{
  "contractName": "Token",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bool",
          "name": "_isFrozen",
          "type": "bool"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "AddressFrozen",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "AgentAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "AgentRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_compliance",
          "type": "address"
        }
      ],
      "name": "ComplianceAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_identityRegistry",
          "type": "address"
        }
      ],
      "name": "IdentityRegistryAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_lostWallet",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_newWallet",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_investorOnchainID",
          "type": "address"
        }
      ],
      "name": "RecoverySuccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "TokensFrozen",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "TokensUnfrozen",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "_newName",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "_newSymbol",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "_newDecimals",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "_newVersion",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_newOnchainID",
          "type": "address"
        }
      ],
      "name": "UpdatedTokenInformation",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "isAgent",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeAgent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_identityRegistry",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_compliance",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_symbol",
          "type": "string"
        },
        {
          "internalType": "uint8",
          "name": "_decimals",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "_onchainID",
          "type": "address"
        }
      ],
      "name": "init",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "onchainID",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        }
      ],
      "name": "setName",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_symbol",
          "type": "string"
        }
      ],
      "name": "setSymbol",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_onchainID",
          "type": "address"
        }
      ],
      "name": "setOnchainID",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        }
      ],
      "name": "isFrozen",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        }
      ],
      "name": "getFrozenTokens",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "identityRegistry",
      "outputs": [
        {
          "internalType": "contract IIdentityRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "compliance",
      "outputs": [
        {
          "internalType": "contract ICompliance",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_toList",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        }
      ],
      "name": "batchTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "forcedTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_fromList",
          "type": "address[]"
        },
        {
          "internalType": "address[]",
          "name": "_toList",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        }
      ],
      "name": "batchForcedTransfer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_toList",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        }
      ],
      "name": "batchMint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_userAddresses",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        }
      ],
      "name": "batchBurn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "_freeze",
          "type": "bool"
        }
      ],
      "name": "setAddressFrozen",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_userAddresses",
          "type": "address[]"
        },
        {
          "internalType": "bool[]",
          "name": "_freeze",
          "type": "bool[]"
        }
      ],
      "name": "batchSetAddressFrozen",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "freezePartialTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_userAddresses",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        }
      ],
      "name": "batchFreezePartialTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_userAddress",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "unfreezePartialTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_userAddresses",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        }
      ],
      "name": "batchUnfreezePartialTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_identityRegistry",
          "type": "address"
        }
      ],
      "name": "setIdentityRegistry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_compliance",
          "type": "address"
        }
      ],
      "name": "setCompliance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_lostWallet",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_newWallet",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_investorOnchainID",
          "type": "address"
        }
      ],
      "name": "recoveryAddress",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnershipOnTokenContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "addAgentOnTokenContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_agent",
          "type": "address"
        }
      ],
      "name": "removeAgentOnTokenContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"_isFrozen\",\"type\":\"bool\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"AddressFrozen\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"AgentAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"AgentRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_compliance\",\"type\":\"address\"}],\"name\":\"ComplianceAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_identityRegistry\",\"type\":\"address\"}],\"name\":\"IdentityRegistryAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_lostWallet\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_newWallet\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_investorOnchainID\",\"type\":\"address\"}],\"name\":\"RecoverySuccess\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokensFrozen\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"TokensUnfrozen\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_newName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_newSymbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"_newDecimals\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"_newVersion\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_newOnchainID\",\"type\":\"address\"}],\"name\":\"UpdatedTokenInformation\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"addAgentOnTokenContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_userAddresses\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_amounts\",\"type\":\"uint256[]\"}],\"name\":\"batchBurn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_fromList\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_toList\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_amounts\",\"type\":\"uint256[]\"}],\"name\":\"batchForcedTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_userAddresses\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_amounts\",\"type\":\"uint256[]\"}],\"name\":\"batchFreezePartialTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_toList\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_amounts\",\"type\":\"uint256[]\"}],\"name\":\"batchMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_userAddresses\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"_freeze\",\"type\":\"bool[]\"}],\"name\":\"batchSetAddressFrozen\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_toList\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_amounts\",\"type\":\"uint256[]\"}],\"name\":\"batchTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_userAddresses\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_amounts\",\"type\":\"uint256[]\"}],\"name\":\"batchUnfreezePartialTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"compliance\",\"outputs\":[{\"internalType\":\"contract ICompliance\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_subtractedValue\",\"type\":\"uint256\"}],\"name\":\"decreaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"forcedTransfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"freezePartialTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"}],\"name\":\"getFrozenTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identityRegistry\",\"outputs\":[{\"internalType\":\"contract IIdentityRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_addedValue\",\"type\":\"uint256\"}],\"name\":\"increaseAllowance\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_identityRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_compliance\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"uint8\",\"name\":\"_decimals\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"_onchainID\",\"type\":\"address\"}],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"isAgent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"}],\"name\":\"isFrozen\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onchainID\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_lostWallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_newWallet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_investorOnchainID\",\"type\":\"address\"}],\"name\":\"recoveryAddress\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeAgent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_agent\",\"type\":\"address\"}],\"name\":\"removeAgentOnTokenContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"_freeze\",\"type\":\"bool\"}],\"name\":\"setAddressFrozen\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_compliance\",\"type\":\"address\"}],\"name\":\"setCompliance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_identityRegistry\",\"type\":\"address\"}],\"name\":\"setIdentityRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_onchainID\",\"type\":\"address\"}],\"name\":\"setOnchainID\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"name\":\"setSymbol\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnershipOnTokenContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_userAddress\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"unfreezePartialTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addAgentOnTokenContract(address)\":{\"details\":\"See {IToken-addAgentOnTokenContract}.\"},\"allowance(address,address)\":{\"details\":\"See {IERC20-allowance}.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"batchBurn(address[],uint256[])\":{\"details\":\"See {IToken-batchBurn}.\"},\"batchForcedTransfer(address[],address[],uint256[])\":{\"details\":\"See {IToken-batchForcedTransfer}.\"},\"batchFreezePartialTokens(address[],uint256[])\":{\"details\":\"See {IToken-batchFreezePartialTokens}.\"},\"batchMint(address[],uint256[])\":{\"details\":\"See {IToken-batchMint}.\"},\"batchSetAddressFrozen(address[],bool[])\":{\"details\":\"See {IToken-batchSetAddressFrozen}.\"},\"batchTransfer(address[],uint256[])\":{\"details\":\"See {IToken-batchTransfer}.\"},\"batchUnfreezePartialTokens(address[],uint256[])\":{\"details\":\"See {IToken-batchUnfreezePartialTokens}.\"},\"burn(address,uint256)\":{\"details\":\"See {IToken-burn}.\"},\"compliance()\":{\"details\":\"See {IToken-compliance}.\"},\"decimals()\":{\"details\":\"See {IToken-decimals}.\"},\"decreaseAllowance(address,uint256)\":{\"details\":\"See {ERC20-decreaseAllowance}.\"},\"forcedTransfer(address,address,uint256)\":{\"details\":\"See {IToken-forcedTransfer}.\"},\"freezePartialTokens(address,uint256)\":{\"details\":\"See {IToken-freezePartialTokens}.\"},\"getFrozenTokens(address)\":{\"details\":\"See {IToken-getFrozenTokens}.\"},\"identityRegistry()\":{\"details\":\"See {IToken-identityRegistry}.\"},\"increaseAllowance(address,uint256)\":{\"details\":\"See {ERC20-increaseAllowance}.\"},\"init(address,address,string,string,uint8,address)\":{\"details\":\"the constructor initiates the token contract  msg.sender is set automatically as the owner of the smart contract\",\"params\":{\"_compliance\":\"the address of the compliance contract linked to the token\",\"_decimals\":\"the decimals of the token\",\"_identityRegistry\":\"the address of the Identity registry linked to the token\",\"_name\":\"the name of the token\",\"_onchainID\":\"the address of the onchainID of the token  emits an `UpdatedTokenInformation` event  emits an `IdentityRegistryAdded` event  emits a `ComplianceAdded` event\",\"_symbol\":\"the symbol of the token\"}},\"isFrozen(address)\":{\"details\":\"See {IToken-isFrozen}.\"},\"mint(address,uint256)\":{\"details\":\"See {IToken-mint}.\"},\"name()\":{\"details\":\"See {IToken-name}.\"},\"onchainID()\":{\"details\":\"See {IToken-onchainID}.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pause()\":{\"details\":\"See {IToken-pause}.\"},\"paused()\":{\"details\":\"See {IToken-paused}.\"},\"recoveryAddress(address,address,address)\":{\"details\":\"See {IToken-recoveryAddress}.\"},\"removeAgentOnTokenContract(address)\":{\"details\":\"See {IToken-removeAgentOnTokenContract}.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setAddressFrozen(address,bool)\":{\"details\":\"See {IToken-setAddressFrozen}.\"},\"setCompliance(address)\":{\"details\":\"See {IToken-setCompliance}.\"},\"setIdentityRegistry(address)\":{\"details\":\"See {IToken-setIdentityRegistry}.\"},\"setName(string)\":{\"details\":\"See {IToken-setName}.\"},\"setOnchainID(address)\":{\"details\":\"See {IToken-setOnchainID}.\"},\"setSymbol(string)\":{\"details\":\"See {IToken-setSymbol}.\"},\"symbol()\":{\"details\":\"See {IToken-symbol}.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"params\":{\"_amount\":\"The number of tokens to transfer\",\"_to\":\"The address of the receiver\"},\"returns\":{\"_0\":\"`true` if successful and revert if unsuccessful\"}},\"transferFrom(address,address,uint256)\":{\"params\":{\"_amount\":\"The number of tokens to transfer\",\"_from\":\"The address of the sender\",\"_to\":\"The address of the receiver\"},\"returns\":{\"_0\":\"`true` if successful and revert if unsuccessful\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"transferOwnershipOnTokenContract(address)\":{\"details\":\"See {IToken-transferOwnershipOnTokenContract}.\"},\"unfreezePartialTokens(address,uint256)\":{\"details\":\"See {IToken-unfreezePartialTokens}.\"},\"unpause()\":{\"details\":\"See {IToken-unpause}.\"},\"version()\":{\"details\":\"See {IToken-version}.\"}},\"version\":1},\"userdoc\":{\"events\":{\"AddressFrozen(address,bool,address)\":{\"notice\":\"this event is emitted when the wallet of an investor is frozen or unfrozen  the event is emitted by setAddressFrozen and batchSetAddressFrozen functions  `_userAddress` is the wallet of the investor that is concerned by the freezing status  `_isFrozen` is the freezing status of the wallet  if `_isFrozen` equals `true` the wallet is frozen after emission of the event  if `_isFrozen` equals `false` the wallet is unfrozen after emission of the event  `_owner` is the address of the agent who called the function to freeze the wallet\"},\"ComplianceAdded(address)\":{\"notice\":\"this event is emitted when the Compliance has been set for the token  the event is emitted by the token constructor and by the setCompliance function  `_compliance` is the address of the Compliance contract of the token\"},\"IdentityRegistryAdded(address)\":{\"notice\":\"this event is emitted when the IdentityRegistry has been set for the token  the event is emitted by the token constructor and by the setIdentityRegistry function  `_identityRegistry` is the address of the Identity Registry of the token\"},\"Paused(address)\":{\"notice\":\"this event is emitted when the token is paused  the event is emitted by the pause function  `_userAddress` is the address of the wallet that called the pause function\"},\"RecoverySuccess(address,address,address)\":{\"notice\":\"this event is emitted when an investor successfully recovers his tokens  the event is emitted by the recoveryAddress function  `_lostWallet` is the address of the wallet that the investor lost access to  `_newWallet` is the address of the wallet that the investor provided for the recovery  `_investorOnchainID` is the address of the onchainID of the investor who asked for a recovery\"},\"TokensFrozen(address,uint256)\":{\"notice\":\"this event is emitted when a certain amount of tokens is frozen on a wallet  the event is emitted by freezePartialTokens and batchFreezePartialTokens functions  `_userAddress` is the wallet of the investor that is concerned by the freezing status  `_amount` is the amount of tokens that are frozen\"},\"TokensUnfrozen(address,uint256)\":{\"notice\":\"this event is emitted when a certain amount of tokens is unfrozen on a wallet  the event is emitted by unfreezePartialTokens and batchUnfreezePartialTokens functions  `_userAddress` is the wallet of the investor that is concerned by the freezing status  `_amount` is the amount of tokens that are unfrozen\"},\"Unpaused(address)\":{\"notice\":\"this event is emitted when the token is unpaused  the event is emitted by the unpause function  `_userAddress` is the address of the wallet that called the unpause function\"},\"UpdatedTokenInformation(string,string,uint8,string,address)\":{\"notice\":\"this event is emitted when the token information is updated.  the event is emitted by the token constructor and by the setTokenInformation function  `_newName` is the name of the token  `_newSymbol` is the symbol of the token  `_newDecimals` is the decimals of the token  `_newVersion` is the version of the token, current version is 3.0  `_newOnchainID` is the address of the onchainID of the token\"}},\"kind\":\"user\",\"methods\":{\"transfer(address,uint256)\":{\"notice\":\"ERC-20 overridden function that include logic to check for trade validity.  Require that the msg.sender and to addresses are not frozen.  Require that the value should not exceed available balance .  Require that the to address is a verified address\"},\"transferFrom(address,address,uint256)\":{\"notice\":\"ERC-20 overridden function that include logic to check for trade validity.  Require that the from and to addresses are not frozen.  Require that the value should not exceed available balance .  Require that the to address is a verified address\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/token/Token.sol\":\"Token\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":10},\"remappings\":[]},\"sources\":{\"@onchain-id/solidity/contracts/interface/IClaimIssuer.sol\":{\"keccak256\":\"0xd0493be7cb7342962b46f8e2afdca4614ea0fe34a7f493b2da9db7d361a9042c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://105232aae24e3d0fcb4c80c00793b61b6019f6127c0ec6f9e3082ae01b2e778b\",\"dweb:/ipfs/QmV5C1wbq7H5H6DiakafSX5agAAP6rQSZ5qq7Qgq6VLkXo\"]},\"@onchain-id/solidity/contracts/interface/IERC734.sol\":{\"keccak256\":\"0x3302de9e9fe7a548cb7395b6fda38f952f6a6d1c599dfeee181a1ef80741fc1d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://fc9f00e5b2f1523fecf52b1a833e9263a53edbebb7d1458f9004cfd41dd0402e\",\"dweb:/ipfs/QmWcNcVQrg66KeQz39jPgJun7jF3CbdJKHQa19q97n5Hzb\"]},\"@onchain-id/solidity/contracts/interface/IERC735.sol\":{\"keccak256\":\"0x3b77ce6012a96cf0075197cdeb1b98b66ca1722ef23241e40ba6185f03bf4584\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://766e139f0c3cc0c6489561e75df0d8eab8c277f90009e4fa19add4f22bb40d82\",\"dweb:/ipfs/QmcbAReZn9nLcnYn9AHiDmcYJ42JqAU5QSy4dKhUcJUnjy\"]},\"@onchain-id/solidity/contracts/interface/IIdentity.sol\":{\"keccak256\":\"0xdcefbe2a850f9f43e959b9f7ed93fd5b35f29ff3dfbfaac7530af737c9eba7c6\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://2e887c7cc67fdb2710c48bed22dbb27880f6dfb84ee93178ad4fcd659099cb96\",\"dweb:/ipfs/QmUuDEsZJC7uQQEErmuNJzePsNgHiTDdS2TuMzG1GRqrC3\"]},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34\",\"dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr\"]},\"project:/contracts/compliance/ICompliance.sol\":{\"keccak256\":\"0x4049905b34eab118c0c3f644450299a5ed8022bbbdb26036e7c2854dae8ae1ba\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://f8144953d88f543b2f537514f1136b8adf705837ba6d420b95569f6895153edb\",\"dweb:/ipfs/QmRqM7A6XrofFR67k8RtNNEkriAbKsQHDgUYaKZTMr9Nm5\"]},\"project:/contracts/registry/IClaimTopicsRegistry.sol\":{\"keccak256\":\"0x95f8fa17a716771125b203f00890eceb20ac3807f7a39a25b644427b1ff81d61\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://460dceb9e88957d5ce002b80748767c80a7e146c9b38b055a3c1ca04586b2009\",\"dweb:/ipfs/QmVdqEpGMRzSpLKBCtPzaPGatBgUyNm3NS5rQnkkYMnc1C\"]},\"project:/contracts/registry/IIdentityRegistry.sol\":{\"keccak256\":\"0x16a31f2d35143f99cc6b83d0cf6e9da9543c2b8561712079098f3a39d12ae32a\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://7669a9272b1df8e27e0fc3f5f64977b2b16615e585b673383db1eb157a62bf7c\",\"dweb:/ipfs/QmQzXmoFcFyBPehPyiUzGjaKfXJHLEPZMtFTBTgjuCavah\"]},\"project:/contracts/registry/IIdentityRegistryStorage.sol\":{\"keccak256\":\"0x8cd4de1e77c5da8ca2ff732069bc184aef86bcb94f95a5229e5bd6336abbd06d\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://f88894a3d046940be03a12cc2da3b3fb6efb51e0461fbea060a9a3190cadcf16\",\"dweb:/ipfs/QmNndZUPdpc83A9LungeAsrcencq3CzTum1tkU6KVdSRNC\"]},\"project:/contracts/registry/ITrustedIssuersRegistry.sol\":{\"keccak256\":\"0x01af20f2f537db3122c60b7c6e60e5036e07c673ef9762428b42129f65fcbc60\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://28f514b876c975777fe84bdb9f96ec5c687e4e4ff5d2b14961ba61affc57d46c\",\"dweb:/ipfs/QmdbVRsg1Q71PVHYxy1r7e5MeiMN5hHHDD8vRnXBSr8JiV\"]},\"project:/contracts/roles/AgentRoleUpgradeable.sol\":{\"keccak256\":\"0xe19da0daf8a0c29fc5df7e30f66948d57549e58a678b7bd47b4525104084ff81\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://aef968c1f1ac0af55e5c3fa8eb7f8256b0dc9c3ac9bebac951de23cf0206c5f9\",\"dweb:/ipfs/QmbkfpqVvJbd2zjkh5CWa4uQgtQygJn7unA5PTzCGATniK\"]},\"project:/contracts/roles/Roles.sol\":{\"keccak256\":\"0x9e018cafd4e2a2890d4ed32f0a4e5edf92fe95000f35b15d7932890bd0efdb95\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://6c07fd269689b662d782817bc4fdfc00d33fd7e320c20916528fff7853847954\",\"dweb:/ipfs/QmUz39kdgQM8M2W2gcBZ8Vi3mzzSmXUx9NXxTJatYYQJyw\"]},\"project:/contracts/token/IToken.sol\":{\"keccak256\":\"0x34ce3cabab2f6b66aeb4e89fe8e9952b8aa57663e7b33429963169a835fc1f25\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://cffd212e911fd0a6a402d5438e5f5da0c1637226bfcab173a7c58efba12f2655\",\"dweb:/ipfs/QmVbqFNczrUAETfAX6F9MxXKivALRvt1HBTMhrjAKWHniq\"]},\"project:/contracts/token/Storage.sol\":{\"keccak256\":\"0x15ddd5f8ee0881bf07137cd04ef9d529b2bf8acb006db3c2b451be5ae07ac71c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://09c5d5ef2d9818a431fe3d05024ac03040ec9ca51d9eb43f452f388a9d282025\",\"dweb:/ipfs/QmSUHCthksYjJeoWLTm1Car1zoVHJPKSvuQZEe9YHMCNJw\"]},\"project:/contracts/token/Token.sol\":{\"keccak256\":\"0x6d31369f226850078d31303c0c6071767164a1af0b97cb9d65ae6bdc8410b6a3\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://eaaac98375ae921d2bf809076c1ebbf7a677abf43ae20d8cd6d02c41e513ba12\",\"dweb:/ipfs/QmU6XVbaj8oCYbUGNes5XAa6VaPoKpEpAQ2gxPMV28DHgE\"]}},\"version\":1}",
  "bytecode": "0x6080604052606e805460ff1916905534801561001a57600080fd5b5061327b8061002a6000396000f3fe608060405234801561001057600080fd5b506004361061023b5760003560e01c806306fdde0314610240578063095ea7b31461025e578063125c4a3314610281578063134e18f414610296578063158b1a57146102b557806318160ddd146102ec5780631a7af379146102f45780631fe56f7d146103075780631ffbb0641461031a57806323b872dd1461032d578063313ce5671461034057806339509351146103555780633d1ddc5b146103685780633f4ba83a1461037b57806340c10f191461038357806342a47abc146103965780634710362d146103a95780634a6cc677146103bc57806351411b33146103cf57806354fd4d50146103e25780635c975abb146104035780635dc7a3cb1461040e5780636290865d14610421578063685731071461043257806370a0823114610445578063715018a6146104585780638456cb591461046057806384e798421461046857806388d695b21461047b5780638da5cb5b1461048e5780639285948a1461049657806395d89b41146104a957806397a6278e146104b15780639dc29fac146104c45780639fc1d0e7146104d7578063a457c2d7146104ea578063a9059cbb146104fd578063aba6370514610510578063b422d83014610526578063b84c824614610539578063c47f00271461054c578063c69c09cf1461055f578063cbf3f86114610572578063dd62ed3e14610585578063e5839836146105be578063f2fde38b146105ea578063f8981789146105fd578063f91b619c14610610578063fc7e5fa814610623575b600080fd5b610248610636565b6040516102559190612816565b60405180910390f35b61027161026c366004612845565b6106c8565b6040519015158152602001610255565b61029461028f366004612845565b6106df565b005b606e5461010090046001600160a01b03165b604051610255919061286f565b6102de6102c3366004612883565b6001600160a01b03166000908152606d602052604090205490565b604051908152602001610255565b6068546102de565b6102946103023660046128e9565b61080e565b610294610315366004612845565b610883565b610271610328366004612883565b61099a565b61027161033b366004612954565b6109a7565b606b5460405160ff9091168152602001610255565b610271610363366004612845565b610c67565b610294610376366004612883565b610c9e565b610294610d26565b610294610391366004612845565b610dd8565b6102946103a4366004612990565b610fe7565b6102946103b73660046128e9565b61107d565b6102946103ca3660046128e9565b6110e2565b6102946103dd366004612883565b611147565b604080518082019091526005815264332e352e3160d81b6020820152610248565b606e5460ff16610271565b61029461041c366004612883565b61115b565b606f546001600160a01b03166102a8565b6102946104403660046128e9565b611164565b6102de610453366004612883565b6111c9565b6102946111e4565b6102946111f8565b610294610476366004612883565b61127d565b6102946104893660046128e9565b6112c7565b6102a861132d565b6102716104a4366004612a29565b61133c565b6102486116af565b6102946104bf366004612883565b6116be565b6102946104d2366004612845565b611708565b6102716104e5366004612954565b611847565b6102716104f8366004612845565b611a13565b61027161050b366004612845565b611a4a565b606b5461010090046001600160a01b03166102a8565b610294610534366004612883565b611c77565b610294610547366004612a6c565b611c80565b61029461055a366004612a6c565b611cf7565b61029461056d366004612aeb565b611d0c565b610294610580366004612883565b611d86565b6102de610593366004612b22565b6001600160a01b03918216600090815260676020908152604080832093909416825291909152205490565b6102716105cc366004612883565b6001600160a01b03166000908152606c602052604090205460ff1690565b6102946105f8366004612883565b611dce565b61029461060b366004612883565b611e44565b61029461061e366004612bf7565b611e84565b6102946106313660046128e9565b6120a4565b60606069805461064590612ca3565b80601f016020809104026020016040519081016040528092919081815260200182805461067190612ca3565b80156106be5780601f10610693576101008083540402835291602001916106be565b820191906000526020600020905b8154815290600101906020018083116106a157829003601f168201915b5050505050905090565b60006106d5338484612109565b5060015b92915050565b6106e83361099a565b61070d5760405162461bcd60e51b815260040161070490612cdd565b60405180910390fd5b6000610718836111c9565b6001600160a01b0384166000908152606d602052604090205490915061073f908390612d41565b81101561078e5760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206578636565647320617661696c61626c652062616c616e63656044820152606401610704565b6001600160a01b0383166000908152606d60205260409020546107b2908390612d41565b6001600160a01b0384166000818152606d6020526040908190209290925590517fa065e63c631c86f1b9f66a4a2f63f2093bf1c2168d23290259dbd969e0222a45906108019085815260200190565b60405180910390a2505050565b60005b8381101561087c5761086a85858381811061082e5761082e612d54565b90506020020160208101906108439190612883565b84848481811061085557610855612d54565b905060200201602081019061056d9190612d6a565b8061087481612d87565b915050610811565b5050505050565b61088c3361099a565b6108a85760405162461bcd60e51b815260040161070490612cdd565b6001600160a01b0382166000908152606d602052604090205481111561092d5760405162461bcd60e51b815260206004820152603460248201527f416d6f756e742073686f756c64206265206c657373207468616e206f7220657160448201527375616c20746f2066726f7a656e20746f6b656e7360601b6064820152608401610704565b6001600160a01b0382166000908152606d6020526040902054610951908290612da0565b6001600160a01b0383166000818152606d6020526040908190209290925590516000805160206131a68339815191529061098e9084815260200190565b60405180910390a25050565b60006106d960658361222e565b606e5460009060ff16156109cd5760405162461bcd60e51b815260040161070490612db3565b6001600160a01b0383166000908152606c602052604090205460ff16158015610a0f57506001600160a01b0384166000908152606c602052604090205460ff16155b610a2b5760405162461bcd60e51b815260040161070490612ddd565b6001600160a01b0384166000908152606d6020526040902054610a4d856111c9565b610a579190612da0565b821115610a765760405162461bcd60e51b815260040161070490612e07565b606e5460405163b9209e3360e01b81526101009091046001600160a01b03169063b9209e3390610aaa90869060040161286f565b602060405180830381865afa158015610ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aeb9190612e35565b8015610b675750606f546040516372331c7360e11b81526001600160a01b039091169063e46638e690610b2690879087908790600401612e52565b602060405180830381865afa158015610b43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b679190612e35565b15610c2057606f546040516322ebca6d60e21b81526001600160a01b0390911690638baf29b490610ba090879087908790600401612e52565b600060405180830381600087803b158015610bba57600080fd5b505af1158015610bce573d6000803e3d6000fd5b50505050610bdd8484846122b1565b6001600160a01b038416600090815260676020908152604080832033808552925290912054610c18918691610c13908690612da0565b612109565b506001610c60565b60405162461bcd60e51b81526020600482015260156024820152745472616e73666572206e6f7420706f737369626c6560581b6044820152606401610704565b9392505050565b3360008181526067602090815260408083206001600160a01b038716845290915281205490916106d5918590610c13908690612d41565b610ca661240d565b606b80546001600160a01b03808416610100908102610100600160a81b031984168117948590556040805180820182526005815264332e352e3160d81b6020820152905160008051602061320683398151915296610d1b96606996606a9660ff96871696909216959095179491041690612ef3565b60405180910390a150565b610d2f3361099a565b610d4b5760405162461bcd60e51b815260040161070490612cdd565b606e5460ff16610d945760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610704565b606e805460ff191690556040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90610dce90339061286f565b60405180910390a1565b610de13361099a565b610dfd5760405162461bcd60e51b815260040161070490612cdd565b606e5460405163b9209e3360e01b81526101009091046001600160a01b03169063b9209e3390610e3190859060040161286f565b602060405180830381865afa158015610e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e729190612e35565b610eba5760405162461bcd60e51b815260206004820152601960248201527824b232b73a34ba3c9034b9903737ba103b32b934b334b2b21760391b6044820152606401610704565b606f546040516372331c7360e11b81526001600160a01b039091169063e46638e690610eee90339086908690600401612e52565b602060405180830381865afa158015610f0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2f9190612e35565b610f755760405162461bcd60e51b815260206004820152601760248201527610dbdb5c1b1a585b98d9481b9bdd08199bdb1b1bddd959604a1b6044820152606401610704565b610f7f828261246c565b606f54604051635f8dead360e01b81526001600160a01b0390911690635f8dead390610fb19085908590600401612f50565b600060405180830381600087803b158015610fcb57600080fd5b505af1158015610fdf573d6000803e3d6000fd5b505050505050565b60005b858110156110745761106187878381811061100757611007612d54565b905060200201602081019061101c9190612883565b86868481811061102e5761102e612d54565b90506020020160208101906110439190612883565b85858581811061105557611055612d54565b90506020020135611847565b508061106c81612d87565b915050610fea565b50505050505050565b60005b8381101561087c576110d085858381811061109d5761109d612d54565b90506020020160208101906110b29190612883565b8484848181106110c4576110c4612d54565b90506020020135610883565b806110da81612d87565b915050611080565b60005b8381101561087c5761113585858381811061110257611102612d54565b90506020020160208101906111179190612883565b84848481811061112957611129612d54565b90506020020135611708565b8061113f81612d87565b9150506110e5565b61114f61240d565b61115881611dce565b50565b611158816116be565b60005b8381101561087c576111b785858381811061118457611184612d54565b90506020020160208101906111999190612883565b8484848181106111ab576111ab612d54565b90506020020135610dd8565b806111c181612d87565b915050611167565b6001600160a01b031660009081526066602052604090205490565b6111ec61240d565b6111f66000612542565b565b6112013361099a565b61121d5760405162461bcd60e51b815260040161070490612cdd565b606e5460ff16156112405760405162461bcd60e51b815260040161070490612db3565b606e805460ff191660011790556040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890610dce90339061286f565b61128561240d565b611290606582612594565b6040516001600160a01b038216907ff68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec590600090a250565b60005b8381101561087c5761131a8585838181106112e7576112e7612d54565b90506020020160208101906112fc9190612883565b84848481811061130e5761130e612d54565b90506020020135611a4a565b508061132581612d87565b9150506112ca565b6033546001600160a01b031690565b60006113473361099a565b6113635760405162461bcd60e51b815260040161070490612cdd565b61136c846111c9565b6000036113b25760405162461bcd60e51b81526020600482015260146024820152733737903a37b5b2b739903a37903932b1b7bb32b960611b6044820152606401610704565b60405182906000906113c890869060200161286f565b60408051808303601f1901815290829052805160209091012063d202158d60e01b8252600482018190526001602483015291506001600160a01b0383169063d202158d90604401602060405180830381865afa15801561142c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114509190612e35565b1561166f576000611460876111c9565b6001600160a01b038089166000908152606d60205260409081902054606e549151637e42683b60e01b8152939450926101009091049091169063454a03e090899087908490637e42683b906114b9908f9060040161286f565b602060405180830381865afa1580156114d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fa9190612f69565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015261ffff166044820152606401600060405180830381600087803b15801561154d57600080fd5b505af1158015611561573d6000803e3d6000fd5b5050606e5460405163a8d29d1d60e01b81526101009091046001600160a01b0316925063a8d29d1d9150611599908b9060040161286f565b600060405180830381600087803b1580156115b357600080fd5b505af11580156115c7573d6000803e3d6000fd5b505050506115d6888884611847565b5080156115e7576115e787826106df565b6001600160a01b0388166000908152606c602052604090205460ff16151560010361161757611617876001611d0c565b604080516001600160a01b038a81168252898116602083015288168183015290517ff0c9129a94f30f1caaceb63e44b9811d0a3edf1d6c23757f346093af5553fed09181900360600190a16001945050505050610c60565b60405162461bcd60e51b81526020600482015260156024820152745265636f76657279206e6f7420706f737369626c6560581b6044820152606401610704565b6060606a805461064590612ca3565b6116c661240d565b6116d1606582612610565b6040516001600160a01b038216907fed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b90600090a250565b6117113361099a565b61172d5760405162461bcd60e51b815260040161070490612cdd565b6001600160a01b0382166000908152606d602052604081205461174f846111c9565b6117599190612da0565b9050808211156117dd57600061176f8284612da0565b6001600160a01b0385166000908152606d6020526040902054909150611796908290612da0565b6001600160a01b0385166000818152606d6020526040908190209290925590516000805160206131a6833981519152906117d39084815260200190565b60405180910390a2505b6117e78383612692565b606f5460405163469753b960e11b81526001600160a01b0390911690638d2ea772906118199086908690600401612f50565b600060405180830381600087803b15801561183357600080fd5b505af1158015611074573d6000803e3d6000fd5b60006118523361099a565b61186e5760405162461bcd60e51b815260040161070490612cdd565b6001600160a01b0384166000908152606d6020526040812054611890866111c9565b61189a9190612da0565b90508083111561191e5760006118b08285612da0565b6001600160a01b0387166000908152606d60205260409020549091506118d7908290612da0565b6001600160a01b0387166000818152606d6020526040908190209290925590516000805160206131a6833981519152906119149084815260200190565b60405180910390a2505b606e5460405163b9209e3360e01b81526101009091046001600160a01b03169063b9209e339061195290879060040161286f565b602060405180830381865afa15801561196f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119939190612e35565b15610c2057606f546040516322ebca6d60e21b81526001600160a01b0390911690638baf29b4906119cc90889088908890600401612e52565b600060405180830381600087803b1580156119e657600080fd5b505af11580156119fa573d6000803e3d6000fd5b50505050611a098585856122b1565b6001915050610c60565b3360008181526067602090815260408083206001600160a01b038716845290915281205490916106d5918590610c13908690612da0565b606e5460009060ff1615611a705760405162461bcd60e51b815260040161070490612db3565b6001600160a01b0383166000908152606c602052604090205460ff16158015611aa95750336000908152606c602052604090205460ff16155b611ac55760405162461bcd60e51b815260040161070490612ddd565b336000818152606d602052604090205490611adf906111c9565b611ae99190612da0565b821115611b085760405162461bcd60e51b815260040161070490612e07565b606e5460405163b9209e3360e01b81526101009091046001600160a01b03169063b9209e3390611b3c90869060040161286f565b602060405180830381865afa158015611b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7d9190612e35565b8015611bf95750606f546040516372331c7360e11b81526001600160a01b039091169063e46638e690611bb890339087908790600401612e52565b602060405180830381865afa158015611bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf99190612e35565b15610c2057606f546040516322ebca6d60e21b81526001600160a01b0390911690638baf29b490611c3290339087908790600401612e52565b600060405180830381600087803b158015611c4c57600080fd5b505af1158015611c60573d6000803e3d6000fd5b50505050611c6f3384846122b1565b5060016106d9565b6111588161127d565b611c8861240d565b606a611c95828483612fe8565b50606b546040805180820182526005815264332e352e3160d81b6020820152905160008051602061320683398151915292611ceb92606992606a9260ff811692916101009091046001600160a01b031690612ef3565b60405180910390a15050565b611cff61240d565b6069611c95828483612fe8565b611d153361099a565b611d315760405162461bcd60e51b815260040161070490612cdd565b6001600160a01b0382166000818152606c6020526040808220805460ff19168515159081179091559051339391927f7fa523c84ab8d7fc5b72f08b9e46dbbf10c39e119a075b3e317002d14bc9f43691a45050565b611d8e61240d565b606e8054610100600160a81b0319166101006001600160a01b0384169081029190911790915560405160008051602061322683398151915290600090a250565b611dd661240d565b6001600160a01b038116611e3b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610704565b61115881612542565b611e4c61240d565b606f80546001600160a01b0319166001600160a01b0383169081179091556040516000805160206131c683398151915290600090a250565b600054610100900460ff1615808015611ea45750600054600160ff909116105b80611ebe5750303b158015611ebe575060005460ff166001145b611f215760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610704565b6000805460ff191660011790558015611f44576000805461ff0019166101001790555b6069611f5086826130a1565b50606a611f5d85826130a1565b50606b805460ff85166001600160a81b0319909116176101006001600160a01b03858116820292909217909255606e8054610100600160a81b031916918a1692830291909117905560405160008051602061322683398151915290600090a2606f80546001600160a01b0319166001600160a01b0388169081179091556040516000805160206131c683398151915290600090a2606b546040805180820182526005815264332e352e3160d81b602082015290516000805160206132068339815191529261204692606992606a9260ff811692916101009091046001600160a01b031690612ef3565b60405180910390a161205661276c565b8015611074576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050565b60005b8381101561087c576120f78585838181106120c4576120c4612d54565b90506020020160208101906120d99190612883565b8484848181106120eb576120eb612d54565b905060200201356106df565b8061210181612d87565b9150506120a7565b6001600160a01b03831661216b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610704565b6001600160a01b0382166121cc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610704565b6001600160a01b0383811660008181526067602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006001600160a01b0382166122915760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b6064820152608401610704565b506001600160a01b03166000908152602091909152604090205460ff1690565b6001600160a01b0383166123155760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610704565b6001600160a01b0382166123775760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610704565b6001600160a01b03831660009081526066602052604090205461239b908290612da0565b6001600160a01b0380851660009081526066602052604080822093909355908416815220546123cb908290612d41565b6001600160a01b0380841660008181526066602052604090819020939093559151908516906000805160206131e6833981519152906122219085815260200190565b3361241661132d565b6001600160a01b0316146111f65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610704565b6001600160a01b0382166124c25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610704565b806068546124d09190612d41565b6068556001600160a01b0382166000908152606660205260409020546124f7908290612d41565b6001600160a01b0383166000818152606660205260408082209390935591519091906000805160206131e6833981519152906125369085815260200190565b60405180910390a35050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61259e828261222e565b156125eb5760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006044820152606401610704565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b61261a828261222e565b6126705760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b6064820152608401610704565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b0382166126f25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610704565b6001600160a01b038216600090815260666020526040902054612716908290612da0565b6001600160a01b03831660009081526066602052604090205560685461273d908290612da0565b6068556040518181526000906001600160a01b038416906000805160206131e683398151915290602001612536565b600054610100900460ff166127935760405162461bcd60e51b81526004016107049061315a565b6111f66127a0565b505050565b600054610100900460ff166127c75760405162461bcd60e51b81526004016107049061315a565b6111f633612542565b6000815180845260005b818110156127f6576020818501810151868301820152016127da565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610c6060208301846127d0565b80356001600160a01b038116811461284057600080fd5b919050565b6000806040838503121561285857600080fd5b61286183612829565b946020939093013593505050565b6001600160a01b0391909116815260200190565b60006020828403121561289557600080fd5b610c6082612829565b60008083601f8401126128b057600080fd5b5081356001600160401b038111156128c757600080fd5b6020830191508360208260051b85010111156128e257600080fd5b9250929050565b600080600080604085870312156128ff57600080fd5b84356001600160401b038082111561291657600080fd5b6129228883890161289e565b9096509450602087013591508082111561293b57600080fd5b506129488782880161289e565b95989497509550505050565b60008060006060848603121561296957600080fd5b61297284612829565b925061298060208501612829565b9150604084013590509250925092565b600080600080600080606087890312156129a957600080fd5b86356001600160401b03808211156129c057600080fd5b6129cc8a838b0161289e565b909850965060208901359150808211156129e557600080fd5b6129f18a838b0161289e565b90965094506040890135915080821115612a0a57600080fd5b50612a1789828a0161289e565b979a9699509497509295939492505050565b600080600060608486031215612a3e57600080fd5b612a4784612829565b9250612a5560208501612829565b9150612a6360408501612829565b90509250925092565b60008060208385031215612a7f57600080fd5b82356001600160401b0380821115612a9657600080fd5b818501915085601f830112612aaa57600080fd5b813581811115612ab957600080fd5b866020828501011115612acb57600080fd5b60209290920196919550909350505050565b801515811461115857600080fd5b60008060408385031215612afe57600080fd5b612b0783612829565b91506020830135612b1781612add565b809150509250929050565b60008060408385031215612b3557600080fd5b612b3e83612829565b9150612b4c60208401612829565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612b7c57600080fd5b81356001600160401b0380821115612b9657612b96612b55565b604051601f8301601f19908116603f01168101908282118183101715612bbe57612bbe612b55565b81604052838152866020858801011115612bd757600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060008060c08789031215612c1057600080fd5b612c1987612829565b9550612c2760208801612829565b945060408701356001600160401b0380821115612c4357600080fd5b612c4f8a838b01612b6b565b95506060890135915080821115612c6557600080fd5b50612c7289828a01612b6b565b935050608087013560ff81168114612c8957600080fd5b9150612c9760a08801612829565b90509295509295509295565b600181811c90821680612cb757607f821691505b602082108103612cd757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4167656e74526f6c653a2063616c6c657220646f6573206e6f7420686176652060408201526d746865204167656e7420726f6c6560901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156106d9576106d9612d2b565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612d7c57600080fd5b8135610c6081612add565b600060018201612d9957612d99612d2b565b5060010190565b818103818111156106d9576106d9612d2b565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526010908201526f3bb0b63632ba1034b990333937bd32b760811b604082015260600190565b602080825260149082015273496e73756666696369656e742042616c616e636560601b604082015260600190565b600060208284031215612e4757600080fd5b8151610c6081612add565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60008154612e8381612ca3565b808552602060018381168015612ea05760018114612eba57612ee8565b60ff1985168884015283151560051b880183019550612ee8565b866000528260002060005b85811015612ee05781548a8201860152908301908401612ec5565b890184019650505b505050505092915050565b60a081526000612f0660a0830188612e76565b8281036020840152612f188188612e76565b905060ff861660408401528281036060840152612f3581866127d0565b91505060018060a01b03831660808301529695505050505050565b6001600160a01b03929092168252602082015260400190565b600060208284031215612f7b57600080fd5b815161ffff81168114610c6057600080fd5b601f82111561279b57600081815260208120601f850160051c81016020861015612fb45750805b601f850160051c820191505b81811015610fdf57828155600101612fc0565b600019600383901b1c191660019190911b1790565b6001600160401b03831115612fff57612fff612b55565b6130138361300d8354612ca3565b83612f8d565b6000601f841160018114613041576000851561302f5750838201355b6130398682612fd3565b84555061087c565b600083815260209020601f19861690835b828110156130725786850135825560209485019460019092019101613052565b508682101561308f5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81516001600160401b038111156130ba576130ba612b55565b6130ce816130c88454612ca3565b84612f8d565b602080601f8311600181146130fd57600084156130eb5750858301515b6130f58582612fd3565b865550610fdf565b600085815260208120601f198616915b8281101561312c5788860151825594840194600190910190840161310d565b508582101561314a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe9bed35cb62ad0dba04f9d5bfee4b5bc91443e77da8a65c4c84834c51bb08b0d67f3a888862559648ec01d97deb7b5012bff86dc91e654a1de397170db40e35b6ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6a1105ac8148a3c319adbc369f9072573e8a11d3a3d195e067e7c40767ec54d1d2be862d755bca7e0d39772b2cab3a5578da9c285f69199f4c063c2294a7f36ca264697066735822122040fb71c1e5e337f4eb323e68d287ec15c8b3da02510210c2f20e4650e10d788f64736f6c63430008110033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061023b5760003560e01c806306fdde0314610240578063095ea7b31461025e578063125c4a3314610281578063134e18f414610296578063158b1a57146102b557806318160ddd146102ec5780631a7af379146102f45780631fe56f7d146103075780631ffbb0641461031a57806323b872dd1461032d578063313ce5671461034057806339509351146103555780633d1ddc5b146103685780633f4ba83a1461037b57806340c10f191461038357806342a47abc146103965780634710362d146103a95780634a6cc677146103bc57806351411b33146103cf57806354fd4d50146103e25780635c975abb146104035780635dc7a3cb1461040e5780636290865d14610421578063685731071461043257806370a0823114610445578063715018a6146104585780638456cb591461046057806384e798421461046857806388d695b21461047b5780638da5cb5b1461048e5780639285948a1461049657806395d89b41146104a957806397a6278e146104b15780639dc29fac146104c45780639fc1d0e7146104d7578063a457c2d7146104ea578063a9059cbb146104fd578063aba6370514610510578063b422d83014610526578063b84c824614610539578063c47f00271461054c578063c69c09cf1461055f578063cbf3f86114610572578063dd62ed3e14610585578063e5839836146105be578063f2fde38b146105ea578063f8981789146105fd578063f91b619c14610610578063fc7e5fa814610623575b600080fd5b610248610636565b6040516102559190612816565b60405180910390f35b61027161026c366004612845565b6106c8565b6040519015158152602001610255565b61029461028f366004612845565b6106df565b005b606e5461010090046001600160a01b03165b604051610255919061286f565b6102de6102c3366004612883565b6001600160a01b03166000908152606d602052604090205490565b604051908152602001610255565b6068546102de565b6102946103023660046128e9565b61080e565b610294610315366004612845565b610883565b610271610328366004612883565b61099a565b61027161033b366004612954565b6109a7565b606b5460405160ff9091168152602001610255565b610271610363366004612845565b610c67565b610294610376366004612883565b610c9e565b610294610d26565b610294610391366004612845565b610dd8565b6102946103a4366004612990565b610fe7565b6102946103b73660046128e9565b61107d565b6102946103ca3660046128e9565b6110e2565b6102946103dd366004612883565b611147565b604080518082019091526005815264332e352e3160d81b6020820152610248565b606e5460ff16610271565b61029461041c366004612883565b61115b565b606f546001600160a01b03166102a8565b6102946104403660046128e9565b611164565b6102de610453366004612883565b6111c9565b6102946111e4565b6102946111f8565b610294610476366004612883565b61127d565b6102946104893660046128e9565b6112c7565b6102a861132d565b6102716104a4366004612a29565b61133c565b6102486116af565b6102946104bf366004612883565b6116be565b6102946104d2366004612845565b611708565b6102716104e5366004612954565b611847565b6102716104f8366004612845565b611a13565b61027161050b366004612845565b611a4a565b606b5461010090046001600160a01b03166102a8565b610294610534366004612883565b611c77565b610294610547366004612a6c565b611c80565b61029461055a366004612a6c565b611cf7565b61029461056d366004612aeb565b611d0c565b610294610580366004612883565b611d86565b6102de610593366004612b22565b6001600160a01b03918216600090815260676020908152604080832093909416825291909152205490565b6102716105cc366004612883565b6001600160a01b03166000908152606c602052604090205460ff1690565b6102946105f8366004612883565b611dce565b61029461060b366004612883565b611e44565b61029461061e366004612bf7565b611e84565b6102946106313660046128e9565b6120a4565b60606069805461064590612ca3565b80601f016020809104026020016040519081016040528092919081815260200182805461067190612ca3565b80156106be5780601f10610693576101008083540402835291602001916106be565b820191906000526020600020905b8154815290600101906020018083116106a157829003601f168201915b5050505050905090565b60006106d5338484612109565b5060015b92915050565b6106e83361099a565b61070d5760405162461bcd60e51b815260040161070490612cdd565b60405180910390fd5b6000610718836111c9565b6001600160a01b0384166000908152606d602052604090205490915061073f908390612d41565b81101561078e5760405162461bcd60e51b815260206004820181905260248201527f416d6f756e74206578636565647320617661696c61626c652062616c616e63656044820152606401610704565b6001600160a01b0383166000908152606d60205260409020546107b2908390612d41565b6001600160a01b0384166000818152606d6020526040908190209290925590517fa065e63c631c86f1b9f66a4a2f63f2093bf1c2168d23290259dbd969e0222a45906108019085815260200190565b60405180910390a2505050565b60005b8381101561087c5761086a85858381811061082e5761082e612d54565b90506020020160208101906108439190612883565b84848481811061085557610855612d54565b905060200201602081019061056d9190612d6a565b8061087481612d87565b915050610811565b5050505050565b61088c3361099a565b6108a85760405162461bcd60e51b815260040161070490612cdd565b6001600160a01b0382166000908152606d602052604090205481111561092d5760405162461bcd60e51b815260206004820152603460248201527f416d6f756e742073686f756c64206265206c657373207468616e206f7220657160448201527375616c20746f2066726f7a656e20746f6b656e7360601b6064820152608401610704565b6001600160a01b0382166000908152606d6020526040902054610951908290612da0565b6001600160a01b0383166000818152606d6020526040908190209290925590516000805160206131a68339815191529061098e9084815260200190565b60405180910390a25050565b60006106d960658361222e565b606e5460009060ff16156109cd5760405162461bcd60e51b815260040161070490612db3565b6001600160a01b0383166000908152606c602052604090205460ff16158015610a0f57506001600160a01b0384166000908152606c602052604090205460ff16155b610a2b5760405162461bcd60e51b815260040161070490612ddd565b6001600160a01b0384166000908152606d6020526040902054610a4d856111c9565b610a579190612da0565b821115610a765760405162461bcd60e51b815260040161070490612e07565b606e5460405163b9209e3360e01b81526101009091046001600160a01b03169063b9209e3390610aaa90869060040161286f565b602060405180830381865afa158015610ac7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aeb9190612e35565b8015610b675750606f546040516372331c7360e11b81526001600160a01b039091169063e46638e690610b2690879087908790600401612e52565b602060405180830381865afa158015610b43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b679190612e35565b15610c2057606f546040516322ebca6d60e21b81526001600160a01b0390911690638baf29b490610ba090879087908790600401612e52565b600060405180830381600087803b158015610bba57600080fd5b505af1158015610bce573d6000803e3d6000fd5b50505050610bdd8484846122b1565b6001600160a01b038416600090815260676020908152604080832033808552925290912054610c18918691610c13908690612da0565b612109565b506001610c60565b60405162461bcd60e51b81526020600482015260156024820152745472616e73666572206e6f7420706f737369626c6560581b6044820152606401610704565b9392505050565b3360008181526067602090815260408083206001600160a01b038716845290915281205490916106d5918590610c13908690612d41565b610ca661240d565b606b80546001600160a01b03808416610100908102610100600160a81b031984168117948590556040805180820182526005815264332e352e3160d81b6020820152905160008051602061320683398151915296610d1b96606996606a9660ff96871696909216959095179491041690612ef3565b60405180910390a150565b610d2f3361099a565b610d4b5760405162461bcd60e51b815260040161070490612cdd565b606e5460ff16610d945760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610704565b606e805460ff191690556040517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90610dce90339061286f565b60405180910390a1565b610de13361099a565b610dfd5760405162461bcd60e51b815260040161070490612cdd565b606e5460405163b9209e3360e01b81526101009091046001600160a01b03169063b9209e3390610e3190859060040161286f565b602060405180830381865afa158015610e4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e729190612e35565b610eba5760405162461bcd60e51b815260206004820152601960248201527824b232b73a34ba3c9034b9903737ba103b32b934b334b2b21760391b6044820152606401610704565b606f546040516372331c7360e11b81526001600160a01b039091169063e46638e690610eee90339086908690600401612e52565b602060405180830381865afa158015610f0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2f9190612e35565b610f755760405162461bcd60e51b815260206004820152601760248201527610dbdb5c1b1a585b98d9481b9bdd08199bdb1b1bddd959604a1b6044820152606401610704565b610f7f828261246c565b606f54604051635f8dead360e01b81526001600160a01b0390911690635f8dead390610fb19085908590600401612f50565b600060405180830381600087803b158015610fcb57600080fd5b505af1158015610fdf573d6000803e3d6000fd5b505050505050565b60005b858110156110745761106187878381811061100757611007612d54565b905060200201602081019061101c9190612883565b86868481811061102e5761102e612d54565b90506020020160208101906110439190612883565b85858581811061105557611055612d54565b90506020020135611847565b508061106c81612d87565b915050610fea565b50505050505050565b60005b8381101561087c576110d085858381811061109d5761109d612d54565b90506020020160208101906110b29190612883565b8484848181106110c4576110c4612d54565b90506020020135610883565b806110da81612d87565b915050611080565b60005b8381101561087c5761113585858381811061110257611102612d54565b90506020020160208101906111179190612883565b84848481811061112957611129612d54565b90506020020135611708565b8061113f81612d87565b9150506110e5565b61114f61240d565b61115881611dce565b50565b611158816116be565b60005b8381101561087c576111b785858381811061118457611184612d54565b90506020020160208101906111999190612883565b8484848181106111ab576111ab612d54565b90506020020135610dd8565b806111c181612d87565b915050611167565b6001600160a01b031660009081526066602052604090205490565b6111ec61240d565b6111f66000612542565b565b6112013361099a565b61121d5760405162461bcd60e51b815260040161070490612cdd565b606e5460ff16156112405760405162461bcd60e51b815260040161070490612db3565b606e805460ff191660011790556040517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890610dce90339061286f565b61128561240d565b611290606582612594565b6040516001600160a01b038216907ff68e73cec97f2d70aa641fb26e87a4383686e2efacb648f2165aeb02ac562ec590600090a250565b60005b8381101561087c5761131a8585838181106112e7576112e7612d54565b90506020020160208101906112fc9190612883565b84848481811061130e5761130e612d54565b90506020020135611a4a565b508061132581612d87565b9150506112ca565b6033546001600160a01b031690565b60006113473361099a565b6113635760405162461bcd60e51b815260040161070490612cdd565b61136c846111c9565b6000036113b25760405162461bcd60e51b81526020600482015260146024820152733737903a37b5b2b739903a37903932b1b7bb32b960611b6044820152606401610704565b60405182906000906113c890869060200161286f565b60408051808303601f1901815290829052805160209091012063d202158d60e01b8252600482018190526001602483015291506001600160a01b0383169063d202158d90604401602060405180830381865afa15801561142c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114509190612e35565b1561166f576000611460876111c9565b6001600160a01b038089166000908152606d60205260409081902054606e549151637e42683b60e01b8152939450926101009091049091169063454a03e090899087908490637e42683b906114b9908f9060040161286f565b602060405180830381865afa1580156114d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fa9190612f69565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015261ffff166044820152606401600060405180830381600087803b15801561154d57600080fd5b505af1158015611561573d6000803e3d6000fd5b5050606e5460405163a8d29d1d60e01b81526101009091046001600160a01b0316925063a8d29d1d9150611599908b9060040161286f565b600060405180830381600087803b1580156115b357600080fd5b505af11580156115c7573d6000803e3d6000fd5b505050506115d6888884611847565b5080156115e7576115e787826106df565b6001600160a01b0388166000908152606c602052604090205460ff16151560010361161757611617876001611d0c565b604080516001600160a01b038a81168252898116602083015288168183015290517ff0c9129a94f30f1caaceb63e44b9811d0a3edf1d6c23757f346093af5553fed09181900360600190a16001945050505050610c60565b60405162461bcd60e51b81526020600482015260156024820152745265636f76657279206e6f7420706f737369626c6560581b6044820152606401610704565b6060606a805461064590612ca3565b6116c661240d565b6116d1606582612610565b6040516001600160a01b038216907fed9c8ad8d5a0a66898ea49d2956929c93ae2e8bd50281b2ed897c5d1a6737e0b90600090a250565b6117113361099a565b61172d5760405162461bcd60e51b815260040161070490612cdd565b6001600160a01b0382166000908152606d602052604081205461174f846111c9565b6117599190612da0565b9050808211156117dd57600061176f8284612da0565b6001600160a01b0385166000908152606d6020526040902054909150611796908290612da0565b6001600160a01b0385166000818152606d6020526040908190209290925590516000805160206131a6833981519152906117d39084815260200190565b60405180910390a2505b6117e78383612692565b606f5460405163469753b960e11b81526001600160a01b0390911690638d2ea772906118199086908690600401612f50565b600060405180830381600087803b15801561183357600080fd5b505af1158015611074573d6000803e3d6000fd5b60006118523361099a565b61186e5760405162461bcd60e51b815260040161070490612cdd565b6001600160a01b0384166000908152606d6020526040812054611890866111c9565b61189a9190612da0565b90508083111561191e5760006118b08285612da0565b6001600160a01b0387166000908152606d60205260409020549091506118d7908290612da0565b6001600160a01b0387166000818152606d6020526040908190209290925590516000805160206131a6833981519152906119149084815260200190565b60405180910390a2505b606e5460405163b9209e3360e01b81526101009091046001600160a01b03169063b9209e339061195290879060040161286f565b602060405180830381865afa15801561196f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119939190612e35565b15610c2057606f546040516322ebca6d60e21b81526001600160a01b0390911690638baf29b4906119cc90889088908890600401612e52565b600060405180830381600087803b1580156119e657600080fd5b505af11580156119fa573d6000803e3d6000fd5b50505050611a098585856122b1565b6001915050610c60565b3360008181526067602090815260408083206001600160a01b038716845290915281205490916106d5918590610c13908690612da0565b606e5460009060ff1615611a705760405162461bcd60e51b815260040161070490612db3565b6001600160a01b0383166000908152606c602052604090205460ff16158015611aa95750336000908152606c602052604090205460ff16155b611ac55760405162461bcd60e51b815260040161070490612ddd565b336000818152606d602052604090205490611adf906111c9565b611ae99190612da0565b821115611b085760405162461bcd60e51b815260040161070490612e07565b606e5460405163b9209e3360e01b81526101009091046001600160a01b03169063b9209e3390611b3c90869060040161286f565b602060405180830381865afa158015611b59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7d9190612e35565b8015611bf95750606f546040516372331c7360e11b81526001600160a01b039091169063e46638e690611bb890339087908790600401612e52565b602060405180830381865afa158015611bd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf99190612e35565b15610c2057606f546040516322ebca6d60e21b81526001600160a01b0390911690638baf29b490611c3290339087908790600401612e52565b600060405180830381600087803b158015611c4c57600080fd5b505af1158015611c60573d6000803e3d6000fd5b50505050611c6f3384846122b1565b5060016106d9565b6111588161127d565b611c8861240d565b606a611c95828483612fe8565b50606b546040805180820182526005815264332e352e3160d81b6020820152905160008051602061320683398151915292611ceb92606992606a9260ff811692916101009091046001600160a01b031690612ef3565b60405180910390a15050565b611cff61240d565b6069611c95828483612fe8565b611d153361099a565b611d315760405162461bcd60e51b815260040161070490612cdd565b6001600160a01b0382166000818152606c6020526040808220805460ff19168515159081179091559051339391927f7fa523c84ab8d7fc5b72f08b9e46dbbf10c39e119a075b3e317002d14bc9f43691a45050565b611d8e61240d565b606e8054610100600160a81b0319166101006001600160a01b0384169081029190911790915560405160008051602061322683398151915290600090a250565b611dd661240d565b6001600160a01b038116611e3b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610704565b61115881612542565b611e4c61240d565b606f80546001600160a01b0319166001600160a01b0383169081179091556040516000805160206131c683398151915290600090a250565b600054610100900460ff1615808015611ea45750600054600160ff909116105b80611ebe5750303b158015611ebe575060005460ff166001145b611f215760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610704565b6000805460ff191660011790558015611f44576000805461ff0019166101001790555b6069611f5086826130a1565b50606a611f5d85826130a1565b50606b805460ff85166001600160a81b0319909116176101006001600160a01b03858116820292909217909255606e8054610100600160a81b031916918a1692830291909117905560405160008051602061322683398151915290600090a2606f80546001600160a01b0319166001600160a01b0388169081179091556040516000805160206131c683398151915290600090a2606b546040805180820182526005815264332e352e3160d81b602082015290516000805160206132068339815191529261204692606992606a9260ff811692916101009091046001600160a01b031690612ef3565b60405180910390a161205661276c565b8015611074576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050565b60005b8381101561087c576120f78585838181106120c4576120c4612d54565b90506020020160208101906120d99190612883565b8484848181106120eb576120eb612d54565b905060200201356106df565b8061210181612d87565b9150506120a7565b6001600160a01b03831661216b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610704565b6001600160a01b0382166121cc5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610704565b6001600160a01b0383811660008181526067602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006001600160a01b0382166122915760405162461bcd60e51b815260206004820152602260248201527f526f6c65733a206163636f756e7420697320746865207a65726f206164647265604482015261737360f01b6064820152608401610704565b506001600160a01b03166000908152602091909152604090205460ff1690565b6001600160a01b0383166123155760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610704565b6001600160a01b0382166123775760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610704565b6001600160a01b03831660009081526066602052604090205461239b908290612da0565b6001600160a01b0380851660009081526066602052604080822093909355908416815220546123cb908290612d41565b6001600160a01b0380841660008181526066602052604090819020939093559151908516906000805160206131e6833981519152906122219085815260200190565b3361241661132d565b6001600160a01b0316146111f65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610704565b6001600160a01b0382166124c25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610704565b806068546124d09190612d41565b6068556001600160a01b0382166000908152606660205260409020546124f7908290612d41565b6001600160a01b0383166000818152606660205260408082209390935591519091906000805160206131e6833981519152906125369085815260200190565b60405180910390a35050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61259e828261222e565b156125eb5760405162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c65006044820152606401610704565b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b61261a828261222e565b6126705760405162461bcd60e51b815260206004820152602160248201527f526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6044820152606560f81b6064820152608401610704565b6001600160a01b0316600090815260209190915260409020805460ff19169055565b6001600160a01b0382166126f25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610704565b6001600160a01b038216600090815260666020526040902054612716908290612da0565b6001600160a01b03831660009081526066602052604090205560685461273d908290612da0565b6068556040518181526000906001600160a01b038416906000805160206131e683398151915290602001612536565b600054610100900460ff166127935760405162461bcd60e51b81526004016107049061315a565b6111f66127a0565b505050565b600054610100900460ff166127c75760405162461bcd60e51b81526004016107049061315a565b6111f633612542565b6000815180845260005b818110156127f6576020818501810151868301820152016127da565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610c6060208301846127d0565b80356001600160a01b038116811461284057600080fd5b919050565b6000806040838503121561285857600080fd5b61286183612829565b946020939093013593505050565b6001600160a01b0391909116815260200190565b60006020828403121561289557600080fd5b610c6082612829565b60008083601f8401126128b057600080fd5b5081356001600160401b038111156128c757600080fd5b6020830191508360208260051b85010111156128e257600080fd5b9250929050565b600080600080604085870312156128ff57600080fd5b84356001600160401b038082111561291657600080fd5b6129228883890161289e565b9096509450602087013591508082111561293b57600080fd5b506129488782880161289e565b95989497509550505050565b60008060006060848603121561296957600080fd5b61297284612829565b925061298060208501612829565b9150604084013590509250925092565b600080600080600080606087890312156129a957600080fd5b86356001600160401b03808211156129c057600080fd5b6129cc8a838b0161289e565b909850965060208901359150808211156129e557600080fd5b6129f18a838b0161289e565b90965094506040890135915080821115612a0a57600080fd5b50612a1789828a0161289e565b979a9699509497509295939492505050565b600080600060608486031215612a3e57600080fd5b612a4784612829565b9250612a5560208501612829565b9150612a6360408501612829565b90509250925092565b60008060208385031215612a7f57600080fd5b82356001600160401b0380821115612a9657600080fd5b818501915085601f830112612aaa57600080fd5b813581811115612ab957600080fd5b866020828501011115612acb57600080fd5b60209290920196919550909350505050565b801515811461115857600080fd5b60008060408385031215612afe57600080fd5b612b0783612829565b91506020830135612b1781612add565b809150509250929050565b60008060408385031215612b3557600080fd5b612b3e83612829565b9150612b4c60208401612829565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612b7c57600080fd5b81356001600160401b0380821115612b9657612b96612b55565b604051601f8301601f19908116603f01168101908282118183101715612bbe57612bbe612b55565b81604052838152866020858801011115612bd757600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060008060008060c08789031215612c1057600080fd5b612c1987612829565b9550612c2760208801612829565b945060408701356001600160401b0380821115612c4357600080fd5b612c4f8a838b01612b6b565b95506060890135915080821115612c6557600080fd5b50612c7289828a01612b6b565b935050608087013560ff81168114612c8957600080fd5b9150612c9760a08801612829565b90509295509295509295565b600181811c90821680612cb757607f821691505b602082108103612cd757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4167656e74526f6c653a2063616c6c657220646f6573206e6f7420686176652060408201526d746865204167656e7420726f6c6560901b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b808201808211156106d9576106d9612d2b565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612d7c57600080fd5b8135610c6081612add565b600060018201612d9957612d99612d2b565b5060010190565b818103818111156106d9576106d9612d2b565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526010908201526f3bb0b63632ba1034b990333937bd32b760811b604082015260600190565b602080825260149082015273496e73756666696369656e742042616c616e636560601b604082015260600190565b600060208284031215612e4757600080fd5b8151610c6081612add565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60008154612e8381612ca3565b808552602060018381168015612ea05760018114612eba57612ee8565b60ff1985168884015283151560051b880183019550612ee8565b866000528260002060005b85811015612ee05781548a8201860152908301908401612ec5565b890184019650505b505050505092915050565b60a081526000612f0660a0830188612e76565b8281036020840152612f188188612e76565b905060ff861660408401528281036060840152612f3581866127d0565b91505060018060a01b03831660808301529695505050505050565b6001600160a01b03929092168252602082015260400190565b600060208284031215612f7b57600080fd5b815161ffff81168114610c6057600080fd5b601f82111561279b57600081815260208120601f850160051c81016020861015612fb45750805b601f850160051c820191505b81811015610fdf57828155600101612fc0565b600019600383901b1c191660019190911b1790565b6001600160401b03831115612fff57612fff612b55565b6130138361300d8354612ca3565b83612f8d565b6000601f841160018114613041576000851561302f5750838201355b6130398682612fd3565b84555061087c565b600083815260209020601f19861690835b828110156130725786850135825560209485019460019092019101613052565b508682101561308f5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81516001600160401b038111156130ba576130ba612b55565b6130ce816130c88454612ca3565b84612f8d565b602080601f8311600181146130fd57600084156130eb5750858301515b6130f58582612fd3565b865550610fdf565b600085815260208120601f198616915b8281101561312c5788860151825594840194600190910190840161310d565b508582101561314a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe9bed35cb62ad0dba04f9d5bfee4b5bc91443e77da8a65c4c84834c51bb08b0d67f3a888862559648ec01d97deb7b5012bff86dc91e654a1de397170db40e35b6ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6a1105ac8148a3c319adbc369f9072573e8a11d3a3d195e067e7c40767ec54d1d2be862d755bca7e0d39772b2cab3a5578da9c285f69199f4c063c2294a7f36ca264697066735822122040fb71c1e5e337f4eb323e68d287ec15c8b3da02510210c2f20e4650e10d788f64736f6c63430008110033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [
    {
      "ast": {
        "nodeType": "YulBlock",
        "src": "0:27463:54",
        "statements": [
          {
            "nodeType": "YulBlock",
            "src": "6:3:54",
            "statements": []
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "64:373:54",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "74:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "94:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "88:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "88:12:54"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "78:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "116:3:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "121:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "109:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "109:19:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "109:19:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "137:10:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "146:1:54",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "i",
                      "nodeType": "YulTypedName",
                      "src": "141:1:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "208:110:54",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "222:14:54",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "232:4:54",
                          "type": "",
                          "value": "0x20"
                        },
                        "variables": [
                          {
                            "name": "_1",
                            "nodeType": "YulTypedName",
                            "src": "226:2:54",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "pos",
                                      "nodeType": "YulIdentifier",
                                      "src": "264:3:54"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "269:1:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "260:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "260:11:54"
                                },
                                {
                                  "name": "_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "273:2:54"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "256:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "256:20:54"
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "name": "value",
                                          "nodeType": "YulIdentifier",
                                          "src": "292:5:54"
                                        },
                                        {
                                          "name": "i",
                                          "nodeType": "YulIdentifier",
                                          "src": "299:1:54"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "add",
                                        "nodeType": "YulIdentifier",
                                        "src": "288:3:54"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "288:13:54"
                                    },
                                    {
                                      "name": "_1",
                                      "nodeType": "YulIdentifier",
                                      "src": "303:2:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "284:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "284:22:54"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "278:5:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "278:29:54"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "249:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "249:59:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "249:59:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "i",
                        "nodeType": "YulIdentifier",
                        "src": "167:1:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "170:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "lt",
                      "nodeType": "YulIdentifier",
                      "src": "164:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "164:13:54"
                  },
                  "nodeType": "YulForLoop",
                  "post": {
                    "nodeType": "YulBlock",
                    "src": "178:21:54",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "180:17:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "i",
                              "nodeType": "YulIdentifier",
                              "src": "189:1:54"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "192:4:54",
                              "type": "",
                              "value": "0x20"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "185:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "185:12:54"
                        },
                        "variableNames": [
                          {
                            "name": "i",
                            "nodeType": "YulIdentifier",
                            "src": "180:1:54"
                          }
                        ]
                      }
                    ]
                  },
                  "pre": {
                    "nodeType": "YulBlock",
                    "src": "160:3:54",
                    "statements": []
                  },
                  "src": "156:162:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "pos",
                                "nodeType": "YulIdentifier",
                                "src": "342:3:54"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "347:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "338:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "338:16:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "356:4:54",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "334:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "334:27:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "363:1:54",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "327:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "327:38:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "327:38:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "374:57:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "pos",
                            "nodeType": "YulIdentifier",
                            "src": "389:3:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "402:6:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "410:2:54",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "398:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "398:15:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "419:2:54",
                                    "type": "",
                                    "value": "31"
                                  }
                                ],
                                "functionName": {
                                  "name": "not",
                                  "nodeType": "YulIdentifier",
                                  "src": "415:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "415:7:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "394:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "394:29:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "385:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "385:39:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "426:4:54",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "381:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "381:50:54"
                  },
                  "variableNames": [
                    {
                      "name": "end",
                      "nodeType": "YulIdentifier",
                      "src": "374:3:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_string",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "41:5:54",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "48:3:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "56:3:54",
                "type": ""
              }
            ],
            "src": "14:423:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "563:99:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "580:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "591:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "573:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "573:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "573:21:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "603:53:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "629:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "641:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "652:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "637:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "637:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_string",
                      "nodeType": "YulIdentifier",
                      "src": "611:17:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "611:45:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "603:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "532:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "543:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "554:4:54",
                "type": ""
              }
            ],
            "src": "442:220:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "716:124:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "726:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "748:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "735:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "735:20:54"
                  },
                  "variableNames": [
                    {
                      "name": "value",
                      "nodeType": "YulIdentifier",
                      "src": "726:5:54"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "818:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "827:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "830:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "820:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "820:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "820:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "777:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "788:5:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "803:3:54",
                                        "type": "",
                                        "value": "160"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "808:1:54",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "799:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "799:11:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "812:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "sub",
                                  "nodeType": "YulIdentifier",
                                  "src": "795:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "795:19:54"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "784:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "784:31:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "774:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "774:42:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "767:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "767:50:54"
                  },
                  "nodeType": "YulIf",
                  "src": "764:70:54"
                }
              ]
            },
            "name": "abi_decode_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "695:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "706:5:54",
                "type": ""
              }
            ],
            "src": "667:173:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "932:167:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "978:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "987:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "990:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "980:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "980:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "980:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "953:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "962:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "949:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "949:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "974:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "945:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "945:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "942:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1003:39:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1032:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "1013:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1013:29:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1003:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1051:42:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1078:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "1089:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "1074:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1074:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "1061:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1061:32:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "1051:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "890:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "901:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "913:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "921:6:54",
                "type": ""
              }
            ],
            "src": "845:254:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1199:92:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1209:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1221:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1232:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1217:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1217:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1209:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1251:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "value0",
                                "nodeType": "YulIdentifier",
                                "src": "1276:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "1269:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1269:14:54"
                          }
                        ],
                        "functionName": {
                          "name": "iszero",
                          "nodeType": "YulIdentifier",
                          "src": "1262:6:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1262:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1244:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1244:41:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1244:41:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1168:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1179:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1190:4:54",
                "type": ""
              }
            ],
            "src": "1104:187:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1423:102:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1433:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1445:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1456:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1441:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1441:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1433:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1475:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "1490:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1506:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "1511:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "1502:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "1502:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "1515:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "1498:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "1498:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "1486:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1486:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1468:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1468:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1468:51:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_contract$_IIdentityRegistry_$6637__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1392:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1403:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1414:4:54",
                "type": ""
              }
            ],
            "src": "1296:229:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1600:116:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "1646:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1655:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "1658:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "1648:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "1648:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "1648:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "1621:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "1630:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "1617:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "1617:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1642:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "1613:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1613:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "1610:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "1671:39:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1700:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "1681:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1681:29:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "1671:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1566:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "1577:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1589:6:54",
                "type": ""
              }
            ],
            "src": "1530:186:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1822:76:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "1832:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1844:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "1855:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "1840:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1840:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "1832:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "1874:9:54"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "1885:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "1867:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "1867:25:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "1867:25:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "1791:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "1802:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "1813:4:54",
                "type": ""
              }
            ],
            "src": "1721:177:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "1987:283:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2036:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2045:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2048:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2038:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2038:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2038:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "2015:6:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2023:4:54",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2011:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2011:17:54"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "2030:3:54"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "2007:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2007:27:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "2000:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2000:35:54"
                  },
                  "nodeType": "YulIf",
                  "src": "1997:55:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2061:30:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "2084:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2071:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2071:20:54"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "2061:6:54"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2134:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2143:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2146:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2136:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2136:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2136:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "2106:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2122:2:54",
                                "type": "",
                                "value": "64"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "2126:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "2118:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2118:10:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2130:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2114:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2114:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "2103:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2103:30:54"
                  },
                  "nodeType": "YulIf",
                  "src": "2100:50:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2159:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "2175:6:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2183:4:54",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "2171:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2171:17:54"
                  },
                  "variableNames": [
                    {
                      "name": "arrayPos",
                      "nodeType": "YulIdentifier",
                      "src": "2159:8:54"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2248:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2257:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2260:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2250:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2250:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2250:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "2211:6:54"
                              },
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "2223:1:54",
                                    "type": "",
                                    "value": "5"
                                  },
                                  {
                                    "name": "length",
                                    "nodeType": "YulIdentifier",
                                    "src": "2226:6:54"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "2219:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2219:14:54"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "2207:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "2207:27:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2236:4:54",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2203:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2203:38:54"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "2243:3:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "2200:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2200:47:54"
                  },
                  "nodeType": "YulIf",
                  "src": "2197:67:54"
                }
              ]
            },
            "name": "abi_decode_array_address_dyn_calldata",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "1950:6:54",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "1958:3:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "arrayPos",
                "nodeType": "YulTypedName",
                "src": "1966:8:54",
                "type": ""
              },
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "1976:6:54",
                "type": ""
              }
            ],
            "src": "1903:367:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "2429:616:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2475:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2484:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2487:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2477:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2477:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2477:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "2450:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2459:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "2446:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2446:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2471:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "2442:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2442:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "2439:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2500:37:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "2527:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2514:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2514:23:54"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "2504:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2546:28:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2564:2:54",
                            "type": "",
                            "value": "64"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2568:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "2560:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2560:10:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "2572:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "2556:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2556:18:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "2550:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2601:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2610:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2613:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2603:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2603:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2603:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "2589:6:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "2597:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "2586:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2586:14:54"
                  },
                  "nodeType": "YulIf",
                  "src": "2583:34:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2626:96:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2694:9:54"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "2705:6:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2690:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2690:22:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "2714:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_address_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "2652:37:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2652:70:54"
                  },
                  "variables": [
                    {
                      "name": "value0_1",
                      "nodeType": "YulTypedName",
                      "src": "2630:8:54",
                      "type": ""
                    },
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "2640:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2731:18:54",
                  "value": {
                    "name": "value0_1",
                    "nodeType": "YulIdentifier",
                    "src": "2741:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "2731:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2758:18:54",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "2768:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "2758:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2785:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2818:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "2829:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2814:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2814:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "2801:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2801:32:54"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "2789:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "2862:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2871:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "2874:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "2864:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2864:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2864:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "2848:8:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "2858:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "2845:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2845:16:54"
                  },
                  "nodeType": "YulIf",
                  "src": "2842:36:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "2887:98:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "2955:9:54"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "2966:8:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "2951:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "2951:24:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "2977:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_address_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "2913:37:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "2913:72:54"
                  },
                  "variables": [
                    {
                      "name": "value2_1",
                      "nodeType": "YulTypedName",
                      "src": "2891:8:54",
                      "type": ""
                    },
                    {
                      "name": "value3_1",
                      "nodeType": "YulTypedName",
                      "src": "2901:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "2994:18:54",
                  "value": {
                    "name": "value2_1",
                    "nodeType": "YulIdentifier",
                    "src": "3004:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "2994:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3021:18:54",
                  "value": {
                    "name": "value3_1",
                    "nodeType": "YulIdentifier",
                    "src": "3031:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "3021:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_bool_$dyn_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "2371:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "2382:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "2394:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "2402:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "2410:6:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "2418:6:54",
                "type": ""
              }
            ],
            "src": "2275:770:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3154:224:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3200:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3209:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3212:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3202:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3202:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3202:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3175:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3184:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3171:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3171:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3196:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3167:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3167:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "3164:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3225:39:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3254:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "3235:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3235:29:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "3225:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3273:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3306:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3317:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3302:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3302:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "3283:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3283:38:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "3273:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "3330:42:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3357:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3368:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "3353:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3353:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3340:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3340:32:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "3330:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_addresst_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3104:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3115:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3127:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3135:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "3143:6:54",
                "type": ""
              }
            ],
            "src": "3050:328:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3480:87:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "3490:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3502:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3513:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "3498:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3498:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "3490:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3532:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "3547:6:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3555:4:54",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "3543:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3543:17:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "3525:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3525:36:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "3525:36:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3449:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3460:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "3471:4:54",
                "type": ""
              }
            ],
            "src": "3383:184:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "3781:879:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3827:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3836:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3839:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3829:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3829:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3829:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "3802:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "3811:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "3798:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3798:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3823:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "3794:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3794:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "3791:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3852:37:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "3879:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "3866:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3866:23:54"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "3856:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3898:28:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3916:2:54",
                            "type": "",
                            "value": "64"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "3920:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "3912:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "3912:10:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "3924:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "3908:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3908:18:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "3902:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "3953:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3962:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3965:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "3955:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3955:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "3955:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "3941:6:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "3949:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "3938:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "3938:14:54"
                  },
                  "nodeType": "YulIf",
                  "src": "3935:34:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "3978:96:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4046:9:54"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "4057:6:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4042:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4042:22:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "4066:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_address_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "4004:37:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4004:70:54"
                  },
                  "variables": [
                    {
                      "name": "value0_1",
                      "nodeType": "YulTypedName",
                      "src": "3982:8:54",
                      "type": ""
                    },
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "3992:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4083:18:54",
                  "value": {
                    "name": "value0_1",
                    "nodeType": "YulIdentifier",
                    "src": "4093:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "4083:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4110:18:54",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "4120:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "4110:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4137:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4170:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4181:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4166:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4166:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4153:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4153:32:54"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "4141:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4214:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4223:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4226:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4216:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4216:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4216:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "4200:8:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "4210:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "4197:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4197:16:54"
                  },
                  "nodeType": "YulIf",
                  "src": "4194:36:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4239:98:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4307:9:54"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "4318:8:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4303:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4303:24:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "4329:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_address_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "4265:37:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4265:72:54"
                  },
                  "variables": [
                    {
                      "name": "value2_1",
                      "nodeType": "YulTypedName",
                      "src": "4243:8:54",
                      "type": ""
                    },
                    {
                      "name": "value3_1",
                      "nodeType": "YulTypedName",
                      "src": "4253:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4346:18:54",
                  "value": {
                    "name": "value2_1",
                    "nodeType": "YulIdentifier",
                    "src": "4356:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "4346:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4373:18:54",
                  "value": {
                    "name": "value3_1",
                    "nodeType": "YulIdentifier",
                    "src": "4383:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "4373:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4400:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4433:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4444:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4429:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4429:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4416:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4416:32:54"
                  },
                  "variables": [
                    {
                      "name": "offset_2",
                      "nodeType": "YulTypedName",
                      "src": "4404:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4477:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4486:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4489:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4479:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4479:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4479:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_2",
                        "nodeType": "YulIdentifier",
                        "src": "4463:8:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "4473:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "4460:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4460:16:54"
                  },
                  "nodeType": "YulIf",
                  "src": "4457:36:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4502:98:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4570:9:54"
                          },
                          {
                            "name": "offset_2",
                            "nodeType": "YulIdentifier",
                            "src": "4581:8:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "4566:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4566:24:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "4592:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_address_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "4528:37:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4528:72:54"
                  },
                  "variables": [
                    {
                      "name": "value4_1",
                      "nodeType": "YulTypedName",
                      "src": "4506:8:54",
                      "type": ""
                    },
                    {
                      "name": "value5_1",
                      "nodeType": "YulTypedName",
                      "src": "4516:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4609:18:54",
                  "value": {
                    "name": "value4_1",
                    "nodeType": "YulIdentifier",
                    "src": "4619:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "4609:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "4636:18:54",
                  "value": {
                    "name": "value5_1",
                    "nodeType": "YulIdentifier",
                    "src": "4646:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value5",
                      "nodeType": "YulIdentifier",
                      "src": "4636:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "3707:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "3718:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "3730:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "3738:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "3746:6:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "3754:6:54",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "3762:6:54",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "3770:6:54",
                "type": ""
              }
            ],
            "src": "3572:1088:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "4822:616:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4868:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4877:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4880:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4870:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4870:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4870:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "4843:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "4852:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "4839:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4839:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4864:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "4835:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4835:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "4832:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4893:37:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "4920:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "4907:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4907:23:54"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "4897:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "4939:28:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4957:2:54",
                            "type": "",
                            "value": "64"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "4961:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "4953:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "4953:10:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "4965:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "4949:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4949:18:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "4943:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "4994:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5003:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5006:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "4996:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4996:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4996:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "4982:6:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "4990:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "4979:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "4979:14:54"
                  },
                  "nodeType": "YulIf",
                  "src": "4976:34:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5019:96:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5087:9:54"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "5098:6:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5083:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5083:22:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "5107:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_address_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "5045:37:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5045:70:54"
                  },
                  "variables": [
                    {
                      "name": "value0_1",
                      "nodeType": "YulTypedName",
                      "src": "5023:8:54",
                      "type": ""
                    },
                    {
                      "name": "value1_1",
                      "nodeType": "YulTypedName",
                      "src": "5033:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5124:18:54",
                  "value": {
                    "name": "value0_1",
                    "nodeType": "YulIdentifier",
                    "src": "5134:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "5124:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5151:18:54",
                  "value": {
                    "name": "value1_1",
                    "nodeType": "YulIdentifier",
                    "src": "5161:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "5151:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5178:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5211:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "5222:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5207:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5207:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "5194:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5194:32:54"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "5182:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "5255:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5264:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5267:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "5257:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5257:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "5257:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "5241:8:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "5251:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "5238:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5238:16:54"
                  },
                  "nodeType": "YulIf",
                  "src": "5235:36:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "5280:98:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "5348:9:54"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "5359:8:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "5344:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5344:24:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "5370:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_array_address_dyn_calldata",
                      "nodeType": "YulIdentifier",
                      "src": "5306:37:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5306:72:54"
                  },
                  "variables": [
                    {
                      "name": "value2_1",
                      "nodeType": "YulTypedName",
                      "src": "5284:8:54",
                      "type": ""
                    },
                    {
                      "name": "value3_1",
                      "nodeType": "YulTypedName",
                      "src": "5294:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5387:18:54",
                  "value": {
                    "name": "value2_1",
                    "nodeType": "YulIdentifier",
                    "src": "5397:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "5387:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "5414:18:54",
                  "value": {
                    "name": "value3_1",
                    "nodeType": "YulIdentifier",
                    "src": "5424:8:54"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "5414:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "4764:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "4775:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "4787:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "4795:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "4803:6:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "4811:6:54",
                "type": ""
              }
            ],
            "src": "4665:773:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5564:102:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "5574:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5586:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5597:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5582:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5582:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "5574:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5616:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "5631:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5647:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5652:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "5643:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5643:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5656:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "5639:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5639:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "5627:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5627:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5609:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5609:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5609:51:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_contract$_ICompliance_$5596__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5533:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5544:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "5555:4:54",
                "type": ""
              }
            ],
            "src": "5443:223:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5772:102:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "5782:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5794:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "5805:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "5790:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5790:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "5782:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "5824:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "5839:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5855:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "5860:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "5851:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "5851:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "5864:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "5847:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "5847:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "5835:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "5835:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "5817:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5817:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "5817:51:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5741:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5752:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "5763:4:54",
                "type": ""
              }
            ],
            "src": "5671:203:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "5983:230:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6029:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6038:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6041:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6031:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6031:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6031:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "6004:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6013:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "6000:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6000:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6025:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "5996:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "5996:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "5993:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6054:39:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6083:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "6064:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6064:29:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "6054:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6102:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6135:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6146:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6131:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6131:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "6112:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6112:38:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "6102:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6159:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6192:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6203:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6188:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6188:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "6169:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6169:38:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "6159:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_addresst_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "5933:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "5944:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "5956:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "5964:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "5972:6:54",
                "type": ""
              }
            ],
            "src": "5879:334:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6308:502:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6354:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6363:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6366:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6356:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6356:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6356:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "6329:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "6338:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "6325:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6325:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6350:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "6321:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6321:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "6318:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6379:37:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6406:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6393:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6393:23:54"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "6383:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6425:28:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6443:2:54",
                            "type": "",
                            "value": "64"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6447:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "6439:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6439:10:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6451:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "6435:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6435:18:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "6429:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6480:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6489:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6492:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6482:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6482:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6482:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "6468:6:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "6476:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "6465:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6465:14:54"
                  },
                  "nodeType": "YulIf",
                  "src": "6462:34:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6505:32:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "6519:9:54"
                      },
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "6530:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6515:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6515:22:54"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "6509:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6585:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6594:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6597:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6587:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6587:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6587:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_2",
                                "nodeType": "YulIdentifier",
                                "src": "6564:2:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "6568:4:54",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "6560:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6560:13:54"
                          },
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "6575:7:54"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "6556:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6556:27:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "6549:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6549:35:54"
                  },
                  "nodeType": "YulIf",
                  "src": "6546:55:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "6610:30:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "6637:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "6624:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6624:16:54"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "6614:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6667:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6676:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6679:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6669:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6669:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6669:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "6655:6:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "6663:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "6652:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6652:14:54"
                  },
                  "nodeType": "YulIf",
                  "src": "6649:34:54"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6733:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6742:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6745:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6735:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6735:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6735:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "_2",
                                "nodeType": "YulIdentifier",
                                "src": "6706:2:54"
                              },
                              {
                                "name": "length",
                                "nodeType": "YulIdentifier",
                                "src": "6710:6:54"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "6702:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6702:15:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "6719:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "6698:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6698:24:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "6724:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "6695:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6695:37:54"
                  },
                  "nodeType": "YulIf",
                  "src": "6692:57:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6758:21:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "6772:2:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "6776:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "6768:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6768:11:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "6758:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "6788:16:54",
                  "value": {
                    "name": "length",
                    "nodeType": "YulIdentifier",
                    "src": "6798:6:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "6788:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_string_calldata_ptr",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6266:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "6277:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "6289:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "6297:6:54",
                "type": ""
              }
            ],
            "src": "6218:592:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "6857:76:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "6911:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6920:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "6923:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "6913:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "6913:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "6913:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "6880:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "name": "value",
                                    "nodeType": "YulIdentifier",
                                    "src": "6901:5:54"
                                  }
                                ],
                                "functionName": {
                                  "name": "iszero",
                                  "nodeType": "YulIdentifier",
                                  "src": "6894:6:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6894:13:54"
                              }
                            ],
                            "functionName": {
                              "name": "iszero",
                              "nodeType": "YulIdentifier",
                              "src": "6887:6:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "6887:21:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "6877:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "6877:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "6870:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "6870:40:54"
                  },
                  "nodeType": "YulIf",
                  "src": "6867:60:54"
                }
              ]
            },
            "name": "validator_revert_bool",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "6846:5:54",
                "type": ""
              }
            ],
            "src": "6815:118:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7022:231:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7068:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7077:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7080:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7070:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7070:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7070:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "7043:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7052:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "7039:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7039:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7064:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "7035:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7035:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "7032:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7093:39:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7122:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "7103:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7103:29:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "7093:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7141:45:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7171:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7182:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7167:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7167:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "7154:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7154:32:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "7145:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "7217:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_bool",
                      "nodeType": "YulIdentifier",
                      "src": "7195:21:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7195:28:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7195:28:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7232:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "7242:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "7232:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_bool",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "6980:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "6991:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7003:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "7011:6:54",
                "type": ""
              }
            ],
            "src": "6938:315:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7345:173:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7391:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7400:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7403:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7393:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7393:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7393:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "7366:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7375:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "7362:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7362:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7387:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "7358:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7358:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "7355:52:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7416:39:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "7445:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "7426:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7426:29:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "7416:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "7464:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "7497:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7508:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "7493:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7493:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "7474:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7474:38:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "7464:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "7303:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "7314:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "7326:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "7334:6:54",
                "type": ""
              }
            ],
            "src": "7258:260:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7555:95:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7572:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7579:3:54",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7584:10:54",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "7575:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7575:20:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7565:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7565:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7565:31:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7612:1:54",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7615:4:54",
                        "type": "",
                        "value": "0x41"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "7605:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7605:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7605:15:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7636:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7639:4:54",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "7629:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7629:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "7629:15:54"
                }
              ]
            },
            "name": "panic_error_0x41",
            "nodeType": "YulFunctionDefinition",
            "src": "7523:127:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "7708:666:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7757:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7766:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "7769:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "7759:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7759:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7759:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "7736:6:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "7744:4:54",
                                "type": "",
                                "value": "0x1f"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7732:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7732:17:54"
                          },
                          {
                            "name": "end",
                            "nodeType": "YulIdentifier",
                            "src": "7751:3:54"
                          }
                        ],
                        "functionName": {
                          "name": "slt",
                          "nodeType": "YulIdentifier",
                          "src": "7728:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7728:27:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "7721:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7721:35:54"
                  },
                  "nodeType": "YulIf",
                  "src": "7718:55:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7782:30:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "7805:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "7792:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7792:20:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "7786:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7821:28:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7839:2:54",
                            "type": "",
                            "value": "64"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "7843:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "7835:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7835:10:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7847:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "7831:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7831:18:54"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "7825:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "7872:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "7874:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "7874:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "7874:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "7864:2:54"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "7868:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "7861:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7861:10:54"
                  },
                  "nodeType": "YulIf",
                  "src": "7858:36:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7903:17:54",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7917:2:54",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "not",
                      "nodeType": "YulIdentifier",
                      "src": "7913:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7913:7:54"
                  },
                  "variables": [
                    {
                      "name": "_3",
                      "nodeType": "YulTypedName",
                      "src": "7907:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7929:23:54",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "7949:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "7943:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7943:9:54"
                  },
                  "variables": [
                    {
                      "name": "memPtr",
                      "nodeType": "YulTypedName",
                      "src": "7933:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "7961:71:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "7983:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "8007:2:54"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "8011:4:54",
                                        "type": "",
                                        "value": "0x1f"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "8003:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "8003:13:54"
                                  },
                                  {
                                    "name": "_3",
                                    "nodeType": "YulIdentifier",
                                    "src": "8018:2:54"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "7999:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7999:22:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "8023:2:54",
                                "type": "",
                                "value": "63"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "7995:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "7995:31:54"
                          },
                          {
                            "name": "_3",
                            "nodeType": "YulIdentifier",
                            "src": "8028:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "7991:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "7991:40:54"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "7979:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "7979:53:54"
                  },
                  "variables": [
                    {
                      "name": "newFreePtr",
                      "nodeType": "YulTypedName",
                      "src": "7965:10:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8091:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "8093:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8093:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8093:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "8050:10:54"
                          },
                          {
                            "name": "_2",
                            "nodeType": "YulIdentifier",
                            "src": "8062:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "gt",
                          "nodeType": "YulIdentifier",
                          "src": "8047:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8047:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "newFreePtr",
                            "nodeType": "YulIdentifier",
                            "src": "8070:10:54"
                          },
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "8082:6:54"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "8067:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8067:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "8044:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8044:46:54"
                  },
                  "nodeType": "YulIf",
                  "src": "8041:72:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8129:2:54",
                        "type": "",
                        "value": "64"
                      },
                      {
                        "name": "newFreePtr",
                        "nodeType": "YulIdentifier",
                        "src": "8133:10:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8122:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8122:22:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8122:22:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "memPtr",
                        "nodeType": "YulIdentifier",
                        "src": "8160:6:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "8168:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8153:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8153:18:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8153:18:54"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8219:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8228:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8231:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8221:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8221:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8221:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "offset",
                                "nodeType": "YulIdentifier",
                                "src": "8194:6:54"
                              },
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "8202:2:54"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "8190:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8190:15:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8207:4:54",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8186:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8186:26:54"
                      },
                      {
                        "name": "end",
                        "nodeType": "YulIdentifier",
                        "src": "8214:3:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "8183:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8183:35:54"
                  },
                  "nodeType": "YulIf",
                  "src": "8180:55:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "memPtr",
                            "nodeType": "YulIdentifier",
                            "src": "8261:6:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8269:4:54",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8257:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8257:17:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "8280:6:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8288:4:54",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8276:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8276:17:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "8295:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldatacopy",
                      "nodeType": "YulIdentifier",
                      "src": "8244:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8244:54:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8244:54:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "memPtr",
                                "nodeType": "YulIdentifier",
                                "src": "8322:6:54"
                              },
                              {
                                "name": "_1",
                                "nodeType": "YulIdentifier",
                                "src": "8330:2:54"
                              }
                            ],
                            "functionName": {
                              "name": "add",
                              "nodeType": "YulIdentifier",
                              "src": "8318:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "8318:15:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8335:4:54",
                            "type": "",
                            "value": "0x20"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8314:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8314:26:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8342:1:54",
                        "type": "",
                        "value": "0"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "8307:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8307:37:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "8307:37:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8353:15:54",
                  "value": {
                    "name": "memPtr",
                    "nodeType": "YulIdentifier",
                    "src": "8362:6:54"
                  },
                  "variableNames": [
                    {
                      "name": "array",
                      "nodeType": "YulIdentifier",
                      "src": "8353:5:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_string",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "offset",
                "nodeType": "YulTypedName",
                "src": "7682:6:54",
                "type": ""
              },
              {
                "name": "end",
                "nodeType": "YulTypedName",
                "src": "7690:3:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "7698:5:54",
                "type": ""
              }
            ],
            "src": "7655:719:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "8552:752:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8599:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8608:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8611:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8601:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8601:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8601:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "8573:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8582:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "8569:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8569:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8594:3:54",
                        "type": "",
                        "value": "192"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "8565:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8565:33:54"
                  },
                  "nodeType": "YulIf",
                  "src": "8562:53:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8624:39:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "8653:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "8634:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8634:29:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "8624:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8672:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8705:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8716:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8701:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8701:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "8682:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8682:38:54"
                  },
                  "variableNames": [
                    {
                      "name": "value1",
                      "nodeType": "YulIdentifier",
                      "src": "8672:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8729:46:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8760:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8771:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8756:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8756:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "8743:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8743:32:54"
                  },
                  "variables": [
                    {
                      "name": "offset",
                      "nodeType": "YulTypedName",
                      "src": "8733:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8784:28:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8802:2:54",
                            "type": "",
                            "value": "64"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8806:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "8798:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8798:10:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "8810:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "8794:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8794:18:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "8788:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "8839:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8848:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "8851:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "8841:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "8841:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "8841:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset",
                        "nodeType": "YulIdentifier",
                        "src": "8827:6:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "8835:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "8824:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8824:14:54"
                  },
                  "nodeType": "YulIf",
                  "src": "8821:34:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "8864:60:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8896:9:54"
                          },
                          {
                            "name": "offset",
                            "nodeType": "YulIdentifier",
                            "src": "8907:6:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8892:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8892:22:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "8916:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_string",
                      "nodeType": "YulIdentifier",
                      "src": "8874:17:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8874:50:54"
                  },
                  "variableNames": [
                    {
                      "name": "value2",
                      "nodeType": "YulIdentifier",
                      "src": "8864:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "8933:48:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "8966:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "8977:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "8962:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "8962:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "8949:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8949:32:54"
                  },
                  "variables": [
                    {
                      "name": "offset_1",
                      "nodeType": "YulTypedName",
                      "src": "8937:8:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9010:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9019:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9022:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "9012:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9012:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9012:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "offset_1",
                        "nodeType": "YulIdentifier",
                        "src": "8996:8:54"
                      },
                      {
                        "name": "_1",
                        "nodeType": "YulIdentifier",
                        "src": "9006:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "8993:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "8993:16:54"
                  },
                  "nodeType": "YulIf",
                  "src": "8990:36:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9035:62:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9067:9:54"
                          },
                          {
                            "name": "offset_1",
                            "nodeType": "YulIdentifier",
                            "src": "9078:8:54"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9063:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9063:24:54"
                      },
                      {
                        "name": "dataEnd",
                        "nodeType": "YulIdentifier",
                        "src": "9089:7:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_string",
                      "nodeType": "YulIdentifier",
                      "src": "9045:17:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9045:52:54"
                  },
                  "variableNames": [
                    {
                      "name": "value3",
                      "nodeType": "YulIdentifier",
                      "src": "9035:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9106:46:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9136:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9147:3:54",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9132:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9132:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "9119:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9119:33:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "9110:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9200:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9209:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9212:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "9202:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9202:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9202:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "9174:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "9185:5:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "9192:4:54",
                                "type": "",
                                "value": "0xff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "9181:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "9181:16:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "9171:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9171:27:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "9164:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9164:35:54"
                  },
                  "nodeType": "YulIf",
                  "src": "9161:55:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9225:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "9235:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value4",
                      "nodeType": "YulIdentifier",
                      "src": "9225:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "9249:49:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9282:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9293:3:54",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9278:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9278:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_decode_address",
                      "nodeType": "YulIdentifier",
                      "src": "9259:18:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9259:39:54"
                  },
                  "variableNames": [
                    {
                      "name": "value5",
                      "nodeType": "YulIdentifier",
                      "src": "9249:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_addresst_addresst_string_memory_ptrt_string_memory_ptrt_uint8t_address",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "8478:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "8489:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "8501:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "8509:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "8517:6:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "8525:6:54",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "8533:6:54",
                "type": ""
              },
              {
                "name": "value5",
                "nodeType": "YulTypedName",
                "src": "8541:6:54",
                "type": ""
              }
            ],
            "src": "8379:925:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9364:325:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "9374:22:54",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9388:1:54",
                        "type": "",
                        "value": "1"
                      },
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "9391:4:54"
                      }
                    ],
                    "functionName": {
                      "name": "shr",
                      "nodeType": "YulIdentifier",
                      "src": "9384:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9384:12:54"
                  },
                  "variableNames": [
                    {
                      "name": "length",
                      "nodeType": "YulIdentifier",
                      "src": "9374:6:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "9405:38:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "data",
                        "nodeType": "YulIdentifier",
                        "src": "9435:4:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9441:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "9431:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9431:12:54"
                  },
                  "variables": [
                    {
                      "name": "outOfPlaceEncoding",
                      "nodeType": "YulTypedName",
                      "src": "9409:18:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9482:31:54",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "9484:27:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "length",
                              "nodeType": "YulIdentifier",
                              "src": "9498:6:54"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9506:4:54",
                              "type": "",
                              "value": "0x7f"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "9494:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9494:17:54"
                        },
                        "variableNames": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "9484:6:54"
                          }
                        ]
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "outOfPlaceEncoding",
                        "nodeType": "YulIdentifier",
                        "src": "9462:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "9455:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9455:26:54"
                  },
                  "nodeType": "YulIf",
                  "src": "9452:61:54"
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "9572:111:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9593:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "9600:3:54",
                                  "type": "",
                                  "value": "224"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "9605:10:54",
                                  "type": "",
                                  "value": "0x4e487b71"
                                }
                              ],
                              "functionName": {
                                "name": "shl",
                                "nodeType": "YulIdentifier",
                                "src": "9596:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9596:20:54"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "9586:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9586:31:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9586:31:54"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9637:1:54",
                              "type": "",
                              "value": "4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9640:4:54",
                              "type": "",
                              "value": "0x22"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "9630:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9630:15:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9630:15:54"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9665:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9668:4:54",
                              "type": "",
                              "value": "0x24"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "9658:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9658:15:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "9658:15:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "outOfPlaceEncoding",
                        "nodeType": "YulIdentifier",
                        "src": "9528:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "length",
                            "nodeType": "YulIdentifier",
                            "src": "9551:6:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9559:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "lt",
                          "nodeType": "YulIdentifier",
                          "src": "9548:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9548:14:54"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nodeType": "YulIdentifier",
                      "src": "9525:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9525:38:54"
                  },
                  "nodeType": "YulIf",
                  "src": "9522:161:54"
                }
              ]
            },
            "name": "extract_byte_array_length",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "data",
                "nodeType": "YulTypedName",
                "src": "9344:4:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "length",
                "nodeType": "YulTypedName",
                "src": "9353:6:54",
                "type": ""
              }
            ],
            "src": "9309:380:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "9868:236:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "9885:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9896:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9878:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9878:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9878:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9919:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9930:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9915:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9915:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "9935:2:54",
                        "type": "",
                        "value": "46"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9908:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9908:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9908:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "9958:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "9969:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "9954:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "9954:18:54"
                      },
                      {
                        "hexValue": "4167656e74526f6c653a2063616c6c657220646f6573206e6f74206861766520",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "9974:34:54",
                        "type": "",
                        "value": "AgentRole: caller does not have "
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "9947:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "9947:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "9947:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10029:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10040:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10025:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10025:18:54"
                      },
                      {
                        "hexValue": "746865204167656e7420726f6c65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10045:16:54",
                        "type": "",
                        "value": "the Agent role"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10018:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10018:44:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10018:44:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10071:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10083:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10094:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10079:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10079:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "10071:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_74a06637aa9b3f007e79b88b2581192c891126ad4f09db67db18ede3d2b5435c__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "9845:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "9859:4:54",
                "type": ""
              }
            ],
            "src": "9694:410:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10141:95:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10158:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10165:3:54",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10170:10:54",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "10161:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10161:20:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10151:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10151:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10151:31:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10198:1:54",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10201:4:54",
                        "type": "",
                        "value": "0x11"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10191:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10191:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10191:15:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10222:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10225:4:54",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "10215:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10215:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10215:15:54"
                }
              ]
            },
            "name": "panic_error_0x11",
            "nodeType": "YulFunctionDefinition",
            "src": "10109:127:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10289:77:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "10299:16:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "10310:1:54"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "10313:1:54"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10306:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10306:9:54"
                  },
                  "variableNames": [
                    {
                      "name": "sum",
                      "nodeType": "YulIdentifier",
                      "src": "10299:3:54"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10338:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "10340:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10340:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10340:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "10330:1:54"
                      },
                      {
                        "name": "sum",
                        "nodeType": "YulIdentifier",
                        "src": "10333:3:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "10327:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10327:10:54"
                  },
                  "nodeType": "YulIf",
                  "src": "10324:36:54"
                }
              ]
            },
            "name": "checked_add_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "10272:1:54",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "10275:1:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "sum",
                "nodeType": "YulTypedName",
                "src": "10281:3:54",
                "type": ""
              }
            ],
            "src": "10241:125:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10545:182:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10562:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10573:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10555:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10555:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10555:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10596:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10607:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10592:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10592:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10612:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10585:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10585:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10585:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10635:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10646:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "10631:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10631:18:54"
                      },
                      {
                        "hexValue": "416d6f756e74206578636565647320617661696c61626c652062616c616e6365",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "10651:34:54",
                        "type": "",
                        "value": "Amount exceeds available balance"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10624:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10624:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10624:62:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "10695:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "10707:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10718:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "10703:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10703:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "10695:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_744672dda3f1a4aac2686ca817a473825cd11c66522615fb58f852c757d084af__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10522:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "10536:4:54",
                "type": ""
              }
            ],
            "src": "10371:356:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10764:95:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10781:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10788:3:54",
                            "type": "",
                            "value": "224"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "10793:10:54",
                            "type": "",
                            "value": "0x4e487b71"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "10784:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10784:20:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10774:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10774:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10774:31:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10821:1:54",
                        "type": "",
                        "value": "4"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10824:4:54",
                        "type": "",
                        "value": "0x32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "10814:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10814:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10814:15:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10845:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10848:4:54",
                        "type": "",
                        "value": "0x24"
                      }
                    ],
                    "functionName": {
                      "name": "revert",
                      "nodeType": "YulIdentifier",
                      "src": "10838:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10838:15:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "10838:15:54"
                }
              ]
            },
            "name": "panic_error_0x32",
            "nodeType": "YulFunctionDefinition",
            "src": "10732:127:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "10931:174:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "10977:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10986:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "10989:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "10979:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10979:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "10979:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "10952:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "10961:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "10948:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "10948:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "10973:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "10944:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "10944:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "10941:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "11002:36:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11028:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "calldataload",
                      "nodeType": "YulIdentifier",
                      "src": "11015:12:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11015:23:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "11006:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "11069:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_bool",
                      "nodeType": "YulIdentifier",
                      "src": "11047:21:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11047:28:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11047:28:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11084:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "11094:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "11084:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bool",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "10897:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "10908:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "10920:6:54",
                "type": ""
              }
            ],
            "src": "10864:241:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11157:88:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "11188:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "11190:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11190:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "11190:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "11173:5:54"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11184:1:54",
                            "type": "",
                            "value": "0"
                          }
                        ],
                        "functionName": {
                          "name": "not",
                          "nodeType": "YulIdentifier",
                          "src": "11180:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11180:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "eq",
                      "nodeType": "YulIdentifier",
                      "src": "11170:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11170:17:54"
                  },
                  "nodeType": "YulIf",
                  "src": "11167:43:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11219:20:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "11230:5:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11237:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11226:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11226:13:54"
                  },
                  "variableNames": [
                    {
                      "name": "ret",
                      "nodeType": "YulIdentifier",
                      "src": "11219:3:54"
                    }
                  ]
                }
              ]
            },
            "name": "increment_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "11139:5:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "11149:3:54",
                "type": ""
              }
            ],
            "src": "11110:135:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11424:242:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11441:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11452:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11434:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11434:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11434:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11475:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11486:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11471:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11471:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11491:2:54",
                        "type": "",
                        "value": "52"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11464:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11464:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11464:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11514:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11525:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11510:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11510:18:54"
                      },
                      {
                        "hexValue": "416d6f756e742073686f756c64206265206c657373207468616e206f72206571",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "11530:34:54",
                        "type": "",
                        "value": "Amount should be less than or eq"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11503:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11503:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11503:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "11585:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "11596:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "11581:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "11581:18:54"
                      },
                      {
                        "hexValue": "75616c20746f2066726f7a656e20746f6b656e73",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "11601:22:54",
                        "type": "",
                        "value": "ual to frozen tokens"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11574:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11574:50:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11574:50:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "11633:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11645:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "11656:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "11641:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11641:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "11633:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_58c49b1d6a87eb553a18b11a7e5e086b34d54efe7947565e8c8e9340bcac49f6__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "11401:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "11415:4:54",
                "type": ""
              }
            ],
            "src": "11250:416:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11720:79:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "11730:17:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "11742:1:54"
                      },
                      {
                        "name": "y",
                        "nodeType": "YulIdentifier",
                        "src": "11745:1:54"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "11738:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11738:9:54"
                  },
                  "variableNames": [
                    {
                      "name": "diff",
                      "nodeType": "YulIdentifier",
                      "src": "11730:4:54"
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "11771:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x11",
                            "nodeType": "YulIdentifier",
                            "src": "11773:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11773:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "11773:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "diff",
                        "nodeType": "YulIdentifier",
                        "src": "11762:4:54"
                      },
                      {
                        "name": "x",
                        "nodeType": "YulIdentifier",
                        "src": "11768:1:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "11759:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11759:11:54"
                  },
                  "nodeType": "YulIf",
                  "src": "11756:37:54"
                }
              ]
            },
            "name": "checked_sub_t_uint256",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "x",
                "nodeType": "YulTypedName",
                "src": "11702:1:54",
                "type": ""
              },
              {
                "name": "y",
                "nodeType": "YulTypedName",
                "src": "11705:1:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "diff",
                "nodeType": "YulTypedName",
                "src": "11711:4:54",
                "type": ""
              }
            ],
            "src": "11671:128:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "11978:166:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "11995:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12006:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "11988:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "11988:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "11988:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12029:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12040:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12025:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12025:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12045:2:54",
                        "type": "",
                        "value": "16"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12018:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12018:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12018:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12068:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12079:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12064:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12064:18:54"
                      },
                      {
                        "hexValue": "5061757361626c653a20706175736564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "12084:18:54",
                        "type": "",
                        "value": "Pausable: paused"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12057:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12057:46:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12057:46:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12112:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12124:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12135:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12120:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12120:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12112:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "11955:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "11969:4:54",
                "type": ""
              }
            ],
            "src": "11804:340:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12323:166:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12340:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12351:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12333:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12333:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12333:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12374:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12385:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12370:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12370:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12390:2:54",
                        "type": "",
                        "value": "16"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12363:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12363:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12363:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12413:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12424:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12409:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12409:18:54"
                      },
                      {
                        "hexValue": "77616c6c65742069732066726f7a656e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "12429:18:54",
                        "type": "",
                        "value": "wallet is frozen"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12402:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12402:46:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12402:46:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12457:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12469:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12480:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12465:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12465:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12457:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_6fdeb49fa8dca802b99c2a57b8d3c6989632cc684eeb0ba36d157473853eb95f__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12300:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12314:4:54",
                "type": ""
              }
            ],
            "src": "12149:340:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12668:170:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12685:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12696:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12678:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12678:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12678:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12719:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12730:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12715:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12715:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12735:2:54",
                        "type": "",
                        "value": "20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12708:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12708:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12708:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12758:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "12769:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "12754:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12754:18:54"
                      },
                      {
                        "hexValue": "496e73756666696369656e742042616c616e6365",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "12774:22:54",
                        "type": "",
                        "value": "Insufficient Balance"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "12747:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12747:50:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "12747:50:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "12806:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "12818:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12829:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "12814:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12814:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "12806:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_b80e76e4c9dd95c0a6a7ab97569124291f4757bb9e5ff42d1e95905b42144c82__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12645:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "12659:4:54",
                "type": ""
              }
            ],
            "src": "12494:344:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "12921:167:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "12967:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "12976:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "12979:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "12969:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12969:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "12969:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "12942:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "12951:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "12938:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "12938:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "12963:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "12934:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "12934:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "12931:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "12992:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13011:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "13005:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13005:16:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "12996:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "13052:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "validator_revert_bool",
                      "nodeType": "YulIdentifier",
                      "src": "13030:21:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13030:28:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13030:28:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13067:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "13077:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "13067:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_bool_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "12887:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "12898:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "12910:6:54",
                "type": ""
              }
            ],
            "src": "12843:245:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13250:218:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "13260:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13272:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13283:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13268:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13268:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13260:4:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "13295:29:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13313:3:54",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13318:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "13309:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13309:11:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13322:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "13305:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13305:19:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "13299:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13340:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "13355:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "13363:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "13351:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13351:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13333:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13333:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13333:34:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13387:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13398:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13383:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13383:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "13407:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "13415:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "13403:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13403:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13376:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13376:43:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13376:43:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13439:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13450:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13435:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13435:18:54"
                      },
                      {
                        "name": "value2",
                        "nodeType": "YulIdentifier",
                        "src": "13455:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13428:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13428:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13428:34:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13203:9:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "13214:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "13222:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "13230:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13241:4:54",
                "type": ""
              }
            ],
            "src": "13093:375:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13647:171:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13664:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13675:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13657:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13657:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13657:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13698:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13709:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13694:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13694:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13714:2:54",
                        "type": "",
                        "value": "21"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13687:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13687:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13687:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "13737:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "13748:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "13733:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "13733:18:54"
                      },
                      {
                        "hexValue": "5472616e73666572206e6f7420706f737369626c65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "13753:23:54",
                        "type": "",
                        "value": "Transfer not possible"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13726:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13726:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13726:51:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13786:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "13798:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13809:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "13794:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13794:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "13786:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_965de3177b9ab9d8ebf7092e1d4b11b84b3f5ec94a07ac1a7dcc6c263a2b34af__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "13624:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "13638:4:54",
                "type": ""
              }
            ],
            "src": "13473:345:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "13879:65:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13896:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "name": "ptr",
                        "nodeType": "YulIdentifier",
                        "src": "13899:3:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "13889:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13889:14:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "13889:14:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "13912:26:54",
                  "value": {
                    "arguments": [
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13930:1:54",
                        "type": "",
                        "value": "0"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "13933:4:54",
                        "type": "",
                        "value": "0x20"
                      }
                    ],
                    "functionName": {
                      "name": "keccak256",
                      "nodeType": "YulIdentifier",
                      "src": "13920:9:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "13920:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "data",
                      "nodeType": "YulIdentifier",
                      "src": "13912:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "array_dataslot_string_storage",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "ptr",
                "nodeType": "YulTypedName",
                "src": "13862:3:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "data",
                "nodeType": "YulTypedName",
                "src": "13870:4:54",
                "type": ""
              }
            ],
            "src": "13823:121:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14007:714:54",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "14017:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value",
                        "nodeType": "YulIdentifier",
                        "src": "14040:5:54"
                      }
                    ],
                    "functionName": {
                      "name": "sload",
                      "nodeType": "YulIdentifier",
                      "src": "14034:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14034:12:54"
                  },
                  "variables": [
                    {
                      "name": "slotValue",
                      "nodeType": "YulTypedName",
                      "src": "14021:9:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "14055:50:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "slotValue",
                        "nodeType": "YulIdentifier",
                        "src": "14095:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "extract_byte_array_length",
                      "nodeType": "YulIdentifier",
                      "src": "14069:25:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14069:36:54"
                  },
                  "variables": [
                    {
                      "name": "length",
                      "nodeType": "YulTypedName",
                      "src": "14059:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "pos",
                        "nodeType": "YulIdentifier",
                        "src": "14121:3:54"
                      },
                      {
                        "name": "length",
                        "nodeType": "YulIdentifier",
                        "src": "14126:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14114:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14114:19:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14114:19:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "14142:14:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "14152:4:54",
                    "type": "",
                    "value": "0x20"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "14146:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "14165:11:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "14175:1:54",
                    "type": "",
                    "value": "1"
                  },
                  "variables": [
                    {
                      "name": "_2",
                      "nodeType": "YulTypedName",
                      "src": "14169:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "cases": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "14226:139:54",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "pos",
                                      "nodeType": "YulIdentifier",
                                      "src": "14251:3:54"
                                    },
                                    {
                                      "name": "_1",
                                      "nodeType": "YulIdentifier",
                                      "src": "14256:2:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "14247:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "14247:12:54"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "slotValue",
                                      "nodeType": "YulIdentifier",
                                      "src": "14265:9:54"
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "14280:3:54",
                                          "type": "",
                                          "value": "255"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "not",
                                        "nodeType": "YulIdentifier",
                                        "src": "14276:3:54"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14276:8:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "and",
                                    "nodeType": "YulIdentifier",
                                    "src": "14261:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "14261:24:54"
                                }
                              ],
                              "functionName": {
                                "name": "mstore",
                                "nodeType": "YulIdentifier",
                                "src": "14240:6:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "14240:46:54"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "14240:46:54"
                          },
                          {
                            "nodeType": "YulAssignment",
                            "src": "14299:56:54",
                            "value": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "pos",
                                      "nodeType": "YulIdentifier",
                                      "src": "14314:3:54"
                                    },
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "14323:1:54",
                                          "type": "",
                                          "value": "5"
                                        },
                                        {
                                          "arguments": [
                                            {
                                              "arguments": [
                                                {
                                                  "name": "length",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "14340:6:54"
                                                }
                                              ],
                                              "functionName": {
                                                "name": "iszero",
                                                "nodeType": "YulIdentifier",
                                                "src": "14333:6:54"
                                              },
                                              "nodeType": "YulFunctionCall",
                                              "src": "14333:14:54"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "iszero",
                                            "nodeType": "YulIdentifier",
                                            "src": "14326:6:54"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "14326:22:54"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "shl",
                                        "nodeType": "YulIdentifier",
                                        "src": "14319:3:54"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "14319:30:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "14310:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "14310:40:54"
                                },
                                {
                                  "name": "_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "14352:2:54"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "14306:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "14306:49:54"
                            },
                            "variableNames": [
                              {
                                "name": "ret",
                                "nodeType": "YulIdentifier",
                                "src": "14299:3:54"
                              }
                            ]
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "14219:146:54",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14224:1:54",
                        "type": "",
                        "value": "0"
                      }
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "14381:334:54",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "14402:1:54",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "name": "value",
                                  "nodeType": "YulIdentifier",
                                  "src": "14405:5:54"
                                }
                              ],
                              "functionName": {
                                "name": "mstore",
                                "nodeType": "YulIdentifier",
                                "src": "14395:6:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "14395:16:54"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "14395:16:54"
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "14424:31:54",
                            "value": {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "14449:1:54",
                                  "type": "",
                                  "value": "0"
                                },
                                {
                                  "name": "_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "14452:2:54"
                                }
                              ],
                              "functionName": {
                                "name": "keccak256",
                                "nodeType": "YulIdentifier",
                                "src": "14439:9:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "14439:16:54"
                            },
                            "variables": [
                              {
                                "name": "dataPos",
                                "nodeType": "YulTypedName",
                                "src": "14428:7:54",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "14468:10:54",
                            "value": {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "14477:1:54",
                              "type": "",
                              "value": "0"
                            },
                            "variables": [
                              {
                                "name": "i",
                                "nodeType": "YulTypedName",
                                "src": "14472:1:54",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "14545:120:54",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "pos",
                                                "nodeType": "YulIdentifier",
                                                "src": "14578:3:54"
                                              },
                                              {
                                                "name": "i",
                                                "nodeType": "YulIdentifier",
                                                "src": "14583:1:54"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "14574:3:54"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "14574:11:54"
                                          },
                                          {
                                            "name": "_1",
                                            "nodeType": "YulIdentifier",
                                            "src": "14587:2:54"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "14570:3:54"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "14570:20:54"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "dataPos",
                                            "nodeType": "YulIdentifier",
                                            "src": "14598:7:54"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "sload",
                                          "nodeType": "YulIdentifier",
                                          "src": "14592:5:54"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "14592:14:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mstore",
                                      "nodeType": "YulIdentifier",
                                      "src": "14563:6:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14563:44:54"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "14563:44:54"
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "14624:27:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "dataPos",
                                        "nodeType": "YulIdentifier",
                                        "src": "14639:7:54"
                                      },
                                      {
                                        "name": "_2",
                                        "nodeType": "YulIdentifier",
                                        "src": "14648:2:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "14635:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14635:16:54"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "dataPos",
                                      "nodeType": "YulIdentifier",
                                      "src": "14624:7:54"
                                    }
                                  ]
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "14502:1:54"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "14505:6:54"
                                }
                              ],
                              "functionName": {
                                "name": "lt",
                                "nodeType": "YulIdentifier",
                                "src": "14499:2:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "14499:13:54"
                            },
                            "nodeType": "YulForLoop",
                            "post": {
                              "nodeType": "YulBlock",
                              "src": "14513:19:54",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "14515:15:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "14524:1:54"
                                      },
                                      {
                                        "name": "_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "14527:2:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "14520:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "14520:10:54"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "14515:1:54"
                                    }
                                  ]
                                }
                              ]
                            },
                            "pre": {
                              "nodeType": "YulBlock",
                              "src": "14495:3:54",
                              "statements": []
                            },
                            "src": "14491:174:54"
                          },
                          {
                            "nodeType": "YulAssignment",
                            "src": "14678:27:54",
                            "value": {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "pos",
                                      "nodeType": "YulIdentifier",
                                      "src": "14693:3:54"
                                    },
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "14698:1:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "14689:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "14689:11:54"
                                },
                                {
                                  "name": "_1",
                                  "nodeType": "YulIdentifier",
                                  "src": "14702:2:54"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "14685:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "14685:20:54"
                            },
                            "variableNames": [
                              {
                                "name": "ret",
                                "nodeType": "YulIdentifier",
                                "src": "14678:3:54"
                              }
                            ]
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "14374:341:54",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "14379:1:54",
                        "type": "",
                        "value": "1"
                      }
                    }
                  ],
                  "expression": {
                    "arguments": [
                      {
                        "name": "slotValue",
                        "nodeType": "YulIdentifier",
                        "src": "14196:9:54"
                      },
                      {
                        "name": "_2",
                        "nodeType": "YulIdentifier",
                        "src": "14207:2:54"
                      }
                    ],
                    "functionName": {
                      "name": "and",
                      "nodeType": "YulIdentifier",
                      "src": "14192:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14192:18:54"
                  },
                  "nodeType": "YulSwitch",
                  "src": "14185:530:54"
                }
              ]
            },
            "name": "abi_encode_string_storage",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "value",
                "nodeType": "YulTypedName",
                "src": "13984:5:54",
                "type": ""
              },
              {
                "name": "pos",
                "nodeType": "YulTypedName",
                "src": "13991:3:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "ret",
                "nodeType": "YulTypedName",
                "src": "13999:3:54",
                "type": ""
              }
            ],
            "src": "13949:772:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "14989:471:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15006:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15017:3:54",
                        "type": "",
                        "value": "160"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "14999:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "14999:22:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "14999:22:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "15030:68:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "15070:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15082:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15093:3:54",
                            "type": "",
                            "value": "160"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15078:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15078:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_string_storage",
                      "nodeType": "YulIdentifier",
                      "src": "15044:25:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15044:54:54"
                  },
                  "variables": [
                    {
                      "name": "tail_1",
                      "nodeType": "YulTypedName",
                      "src": "15034:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15118:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15129:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15114:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15114:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail_1",
                            "nodeType": "YulIdentifier",
                            "src": "15138:6:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15146:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "15134:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15134:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15107:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15107:50:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15107:50:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "15166:55:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "15206:6:54"
                      },
                      {
                        "name": "tail_1",
                        "nodeType": "YulIdentifier",
                        "src": "15214:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_string_storage",
                      "nodeType": "YulIdentifier",
                      "src": "15180:25:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15180:41:54"
                  },
                  "variables": [
                    {
                      "name": "tail_2",
                      "nodeType": "YulTypedName",
                      "src": "15170:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15241:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15252:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15237:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15237:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "15261:6:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15269:4:54",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "15257:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15257:17:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15230:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15230:45:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15230:45:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15295:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15306:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15291:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15291:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "tail_2",
                            "nodeType": "YulIdentifier",
                            "src": "15315:6:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15323:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "15311:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15311:22:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15284:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15284:50:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15284:50:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15343:41:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "value3",
                        "nodeType": "YulIdentifier",
                        "src": "15369:6:54"
                      },
                      {
                        "name": "tail_2",
                        "nodeType": "YulIdentifier",
                        "src": "15377:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "abi_encode_string",
                      "nodeType": "YulIdentifier",
                      "src": "15351:17:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15351:33:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15343:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15404:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15415:3:54",
                            "type": "",
                            "value": "128"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15400:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15400:19:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value4",
                            "nodeType": "YulIdentifier",
                            "src": "15425:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15441:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "15446:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "15437:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15437:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "15450:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "15433:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "15433:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "15421:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15421:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15393:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15393:61:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15393:61:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_string_storage_t_string_storage_t_uint8_t_string_memory_ptr_t_address__to_t_string_memory_ptr_t_string_memory_ptr_t_uint8_t_string_memory_ptr_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "14926:9:54",
                "type": ""
              },
              {
                "name": "value4",
                "nodeType": "YulTypedName",
                "src": "14937:6:54",
                "type": ""
              },
              {
                "name": "value3",
                "nodeType": "YulTypedName",
                "src": "14945:6:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "14953:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "14961:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "14969:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "14980:4:54",
                "type": ""
              }
            ],
            "src": "14726:734:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15639:170:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15656:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15667:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15649:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15649:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15649:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15690:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15701:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15686:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15686:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15706:2:54",
                        "type": "",
                        "value": "20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15679:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15679:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15679:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "15729:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "15740:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "15725:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "15725:18:54"
                      },
                      {
                        "hexValue": "5061757361626c653a206e6f7420706175736564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "15745:22:54",
                        "type": "",
                        "value": "Pausable: not paused"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15718:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15718:50:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15718:50:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "15777:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "15789:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "15800:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "15785:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15785:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "15777:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15616:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15630:4:54",
                "type": ""
              }
            ],
            "src": "15465:344:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "15988:175:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16005:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16016:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "15998:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "15998:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "15998:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16039:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16050:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16035:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16035:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16055:2:54",
                        "type": "",
                        "value": "25"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16028:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16028:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16028:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16078:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16089:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16074:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16074:18:54"
                      },
                      {
                        "hexValue": "4964656e74697479206973206e6f742076657269666965642e",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "16094:27:54",
                        "type": "",
                        "value": "Identity is not verified."
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16067:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16067:55:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16067:55:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "16131:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16143:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16154:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16139:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16139:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16131:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_7885d1d076c7cb06968a199289d2d58ec4ab4a669ff082350b4910edd50058db__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "15965:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "15979:4:54",
                "type": ""
              }
            ],
            "src": "15814:349:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16342:173:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16359:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16370:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16352:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16352:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16352:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16393:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16404:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16389:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16389:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16409:2:54",
                        "type": "",
                        "value": "23"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16382:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16382:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16382:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16432:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16443:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16428:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16428:18:54"
                      },
                      {
                        "hexValue": "436f6d706c69616e6365206e6f7420666f6c6c6f776564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "16448:25:54",
                        "type": "",
                        "value": "Compliance not followed"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16421:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16421:53:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16421:53:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "16483:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16495:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16506:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16491:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16491:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16483:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_fadaaa2b439502f5d6528c916a36fb7325f021fb36a235fdabb96350c3d44dd8__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "16319:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "16333:4:54",
                "type": ""
              }
            ],
            "src": "16168:347:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16649:145:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "16659:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16671:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "16682:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "16667:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16667:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "16659:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16701:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "16716:6:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16732:3:54",
                                    "type": "",
                                    "value": "160"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "16737:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "shl",
                                  "nodeType": "YulIdentifier",
                                  "src": "16728:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "16728:11:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "16741:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "sub",
                              "nodeType": "YulIdentifier",
                              "src": "16724:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "16724:19:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "16712:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16712:32:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16694:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16694:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16694:51:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "16765:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "16776:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "16761:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "16761:18:54"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "16781:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16754:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16754:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16754:34:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "16610:9:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "16621:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "16629:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "16640:4:54",
                "type": ""
              }
            ],
            "src": "16520:274:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "16973:170:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "16990:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17001:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "16983:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "16983:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "16983:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17024:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17035:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17020:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17020:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17040:2:54",
                        "type": "",
                        "value": "20"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17013:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17013:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17013:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17063:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17074:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17059:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17059:18:54"
                      },
                      {
                        "hexValue": "6e6f20746f6b656e7320746f207265636f766572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "17079:22:54",
                        "type": "",
                        "value": "no tokens to recover"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17052:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17052:50:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17052:50:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17111:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17123:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17134:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "17119:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17119:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "17111:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_79f07542aa3c1495c3697dc03cda6d93f53c96c4590f84c59ebcb420f5f0ee98__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "16950:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "16964:4:54",
                "type": ""
              }
            ],
            "src": "16799:344:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17285:119:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "17295:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17307:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17318:2:54",
                        "type": "",
                        "value": "64"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "17303:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17303:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "17295:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17337:9:54"
                      },
                      {
                        "name": "value0",
                        "nodeType": "YulIdentifier",
                        "src": "17348:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17330:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17330:25:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17330:25:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17375:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17386:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17371:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17371:18:54"
                      },
                      {
                        "name": "value1",
                        "nodeType": "YulIdentifier",
                        "src": "17391:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17364:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17364:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17364:34:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_bytes32_t_rational_1_by_1__to_t_bytes32_t_uint256__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "17246:9:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "17257:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "17265:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "17276:4:54",
                "type": ""
              }
            ],
            "src": "17148:256:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17489:196:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "17535:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "17544:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "17547:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "17537:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17537:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "17537:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "dataEnd",
                            "nodeType": "YulIdentifier",
                            "src": "17510:7:54"
                          },
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "17519:9:54"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "17506:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17506:23:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17531:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "slt",
                      "nodeType": "YulIdentifier",
                      "src": "17502:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17502:32:54"
                  },
                  "nodeType": "YulIf",
                  "src": "17499:52:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "17560:29:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17579:9:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "17573:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17573:16:54"
                  },
                  "variables": [
                    {
                      "name": "value",
                      "nodeType": "YulTypedName",
                      "src": "17564:5:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "17639:16:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "17648:1:54",
                              "type": "",
                              "value": "0"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "17651:1:54",
                              "type": "",
                              "value": "0"
                            }
                          ],
                          "functionName": {
                            "name": "revert",
                            "nodeType": "YulIdentifier",
                            "src": "17641:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "17641:12:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "17641:12:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "value",
                            "nodeType": "YulIdentifier",
                            "src": "17611:5:54"
                          },
                          {
                            "arguments": [
                              {
                                "name": "value",
                                "nodeType": "YulIdentifier",
                                "src": "17622:5:54"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "17629:6:54",
                                "type": "",
                                "value": "0xffff"
                              }
                            ],
                            "functionName": {
                              "name": "and",
                              "nodeType": "YulIdentifier",
                              "src": "17618:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "17618:18:54"
                          }
                        ],
                        "functionName": {
                          "name": "eq",
                          "nodeType": "YulIdentifier",
                          "src": "17608:2:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17608:29:54"
                      }
                    ],
                    "functionName": {
                      "name": "iszero",
                      "nodeType": "YulIdentifier",
                      "src": "17601:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17601:37:54"
                  },
                  "nodeType": "YulIf",
                  "src": "17598:57:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "17664:15:54",
                  "value": {
                    "name": "value",
                    "nodeType": "YulIdentifier",
                    "src": "17674:5:54"
                  },
                  "variableNames": [
                    {
                      "name": "value0",
                      "nodeType": "YulIdentifier",
                      "src": "17664:6:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_decode_tuple_t_uint16_fromMemory",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "17455:9:54",
                "type": ""
              },
              {
                "name": "dataEnd",
                "nodeType": "YulTypedName",
                "src": "17466:7:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "17478:6:54",
                "type": ""
              }
            ],
            "src": "17409:276:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "17863:231:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "17873:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17885:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17896:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "17881:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17881:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "17873:4:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "17908:29:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17926:3:54",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "17931:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "17922:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17922:11:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "17935:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "17918:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17918:19:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "17912:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "17953:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "17968:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "17976:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "17964:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17964:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17946:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17946:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17946:34:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18000:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18011:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "17996:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "17996:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "18020:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "18028:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "18016:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18016:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "17989:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "17989:43:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "17989:43:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18052:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18063:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18048:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18048:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "18072:6:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18080:6:54",
                            "type": "",
                            "value": "0xffff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "18068:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18068:19:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18041:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18041:47:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18041:47:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_contract$_IIdentity_$1743_t_uint16__to_t_address_t_address_t_uint16__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "17816:9:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "17827:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "17835:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "17843:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "17854:4:54",
                "type": ""
              }
            ],
            "src": "17690:404:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18256:227:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "18266:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18278:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18289:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "18274:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18274:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "18266:4:54"
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "18301:29:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18319:3:54",
                            "type": "",
                            "value": "160"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18324:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "18315:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18315:11:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18328:1:54",
                        "type": "",
                        "value": "1"
                      }
                    ],
                    "functionName": {
                      "name": "sub",
                      "nodeType": "YulIdentifier",
                      "src": "18311:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18311:19:54"
                  },
                  "variables": [
                    {
                      "name": "_1",
                      "nodeType": "YulTypedName",
                      "src": "18305:2:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18346:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "18361:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "18369:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "18357:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18357:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18339:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18339:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18339:34:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18393:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18404:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18389:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18389:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value1",
                            "nodeType": "YulIdentifier",
                            "src": "18413:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "18421:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "18409:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18409:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18382:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18382:43:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18382:43:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18445:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18456:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18441:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18441:18:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value2",
                            "nodeType": "YulIdentifier",
                            "src": "18465:6:54"
                          },
                          {
                            "name": "_1",
                            "nodeType": "YulIdentifier",
                            "src": "18473:2:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "18461:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18461:15:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18434:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18434:43:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18434:43:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "18209:9:54",
                "type": ""
              },
              {
                "name": "value2",
                "nodeType": "YulTypedName",
                "src": "18220:6:54",
                "type": ""
              },
              {
                "name": "value1",
                "nodeType": "YulTypedName",
                "src": "18228:6:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "18236:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "18247:4:54",
                "type": ""
              }
            ],
            "src": "18099:384:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18662:171:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18679:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18690:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18672:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18672:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18672:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18713:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18724:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18709:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18709:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18729:2:54",
                        "type": "",
                        "value": "21"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18702:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18702:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18702:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "18752:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "18763:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "18748:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "18748:18:54"
                      },
                      {
                        "hexValue": "5265636f76657279206e6f7420706f737369626c65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "18768:23:54",
                        "type": "",
                        "value": "Recovery not possible"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "18741:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18741:51:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "18741:51:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "18801:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "18813:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18824:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "18809:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18809:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "18801:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_7fa31a753f0812c7ef0f752524a300c5cddee17825e6c8ff6ef207e358e92664__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "18639:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "18653:4:54",
                "type": ""
              }
            ],
            "src": "18488:345:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "18919:464:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "18952:425:54",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "18966:11:54",
                        "value": {
                          "kind": "number",
                          "nodeType": "YulLiteral",
                          "src": "18976:1:54",
                          "type": "",
                          "value": "0"
                        },
                        "variables": [
                          {
                            "name": "_1",
                            "nodeType": "YulTypedName",
                            "src": "18970:2:54",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "18997:2:54"
                            },
                            {
                              "name": "array",
                              "nodeType": "YulIdentifier",
                              "src": "19001:5:54"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "18990:6:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "18990:17:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "18990:17:54"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "19020:31:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "_1",
                              "nodeType": "YulIdentifier",
                              "src": "19042:2:54"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "19046:4:54",
                              "type": "",
                              "value": "0x20"
                            }
                          ],
                          "functionName": {
                            "name": "keccak256",
                            "nodeType": "YulIdentifier",
                            "src": "19032:9:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "19032:19:54"
                        },
                        "variables": [
                          {
                            "name": "data",
                            "nodeType": "YulTypedName",
                            "src": "19024:4:54",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "19064:57:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "data",
                              "nodeType": "YulIdentifier",
                              "src": "19087:4:54"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "19097:1:54",
                                  "type": "",
                                  "value": "5"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "startIndex",
                                      "nodeType": "YulIdentifier",
                                      "src": "19104:10:54"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "19116:2:54",
                                      "type": "",
                                      "value": "31"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "19100:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "19100:19:54"
                                }
                              ],
                              "functionName": {
                                "name": "shr",
                                "nodeType": "YulIdentifier",
                                "src": "19093:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "19093:27:54"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "19083:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "19083:38:54"
                        },
                        "variables": [
                          {
                            "name": "deleteStart",
                            "nodeType": "YulTypedName",
                            "src": "19068:11:54",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "19158:23:54",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "19160:19:54",
                              "value": {
                                "name": "data",
                                "nodeType": "YulIdentifier",
                                "src": "19175:4:54"
                              },
                              "variableNames": [
                                {
                                  "name": "deleteStart",
                                  "nodeType": "YulIdentifier",
                                  "src": "19160:11:54"
                                }
                              ]
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "startIndex",
                              "nodeType": "YulIdentifier",
                              "src": "19140:10:54"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "19152:4:54",
                              "type": "",
                              "value": "0x20"
                            }
                          ],
                          "functionName": {
                            "name": "lt",
                            "nodeType": "YulIdentifier",
                            "src": "19137:2:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "19137:20:54"
                        },
                        "nodeType": "YulIf",
                        "src": "19134:47:54"
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "19194:41:54",
                        "value": {
                          "arguments": [
                            {
                              "name": "data",
                              "nodeType": "YulIdentifier",
                              "src": "19208:4:54"
                            },
                            {
                              "arguments": [
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "19218:1:54",
                                  "type": "",
                                  "value": "5"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "len",
                                      "nodeType": "YulIdentifier",
                                      "src": "19225:3:54"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "19230:2:54",
                                      "type": "",
                                      "value": "31"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "19221:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "19221:12:54"
                                }
                              ],
                              "functionName": {
                                "name": "shr",
                                "nodeType": "YulIdentifier",
                                "src": "19214:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "19214:20:54"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "19204:3:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "19204:31:54"
                        },
                        "variables": [
                          {
                            "name": "_2",
                            "nodeType": "YulTypedName",
                            "src": "19198:2:54",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "19248:24:54",
                        "value": {
                          "name": "deleteStart",
                          "nodeType": "YulIdentifier",
                          "src": "19261:11:54"
                        },
                        "variables": [
                          {
                            "name": "start",
                            "nodeType": "YulTypedName",
                            "src": "19252:5:54",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "body": {
                          "nodeType": "YulBlock",
                          "src": "19346:21:54",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "start",
                                    "nodeType": "YulIdentifier",
                                    "src": "19355:5:54"
                                  },
                                  {
                                    "name": "_1",
                                    "nodeType": "YulIdentifier",
                                    "src": "19362:2:54"
                                  }
                                ],
                                "functionName": {
                                  "name": "sstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "19348:6:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19348:17:54"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "19348:17:54"
                            }
                          ]
                        },
                        "condition": {
                          "arguments": [
                            {
                              "name": "start",
                              "nodeType": "YulIdentifier",
                              "src": "19296:5:54"
                            },
                            {
                              "name": "_2",
                              "nodeType": "YulIdentifier",
                              "src": "19303:2:54"
                            }
                          ],
                          "functionName": {
                            "name": "lt",
                            "nodeType": "YulIdentifier",
                            "src": "19293:2:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "19293:13:54"
                        },
                        "nodeType": "YulForLoop",
                        "post": {
                          "nodeType": "YulBlock",
                          "src": "19307:26:54",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "19309:22:54",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "start",
                                    "nodeType": "YulIdentifier",
                                    "src": "19322:5:54"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "19329:1:54",
                                    "type": "",
                                    "value": "1"
                                  }
                                ],
                                "functionName": {
                                  "name": "add",
                                  "nodeType": "YulIdentifier",
                                  "src": "19318:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19318:13:54"
                              },
                              "variableNames": [
                                {
                                  "name": "start",
                                  "nodeType": "YulIdentifier",
                                  "src": "19309:5:54"
                                }
                              ]
                            }
                          ]
                        },
                        "pre": {
                          "nodeType": "YulBlock",
                          "src": "19289:3:54",
                          "statements": []
                        },
                        "src": "19285:82:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "len",
                        "nodeType": "YulIdentifier",
                        "src": "18935:3:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "18940:2:54",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "18932:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "18932:11:54"
                  },
                  "nodeType": "YulIf",
                  "src": "18929:448:54"
                }
              ]
            },
            "name": "clean_up_bytearray_end_slots_string_storage",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "array",
                "nodeType": "YulTypedName",
                "src": "18891:5:54",
                "type": ""
              },
              {
                "name": "len",
                "nodeType": "YulTypedName",
                "src": "18898:3:54",
                "type": ""
              },
              {
                "name": "startIndex",
                "nodeType": "YulTypedName",
                "src": "18903:10:54",
                "type": ""
              }
            ],
            "src": "18838:545:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19473:81:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "19483:65:54",
                  "value": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "data",
                            "nodeType": "YulIdentifier",
                            "src": "19498:4:54"
                          },
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "19516:1:54",
                                        "type": "",
                                        "value": "3"
                                      },
                                      {
                                        "name": "len",
                                        "nodeType": "YulIdentifier",
                                        "src": "19519:3:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "shl",
                                      "nodeType": "YulIdentifier",
                                      "src": "19512:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19512:11:54"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "19529:1:54",
                                        "type": "",
                                        "value": "0"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "not",
                                      "nodeType": "YulIdentifier",
                                      "src": "19525:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "19525:6:54"
                                  }
                                ],
                                "functionName": {
                                  "name": "shr",
                                  "nodeType": "YulIdentifier",
                                  "src": "19508:3:54"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "19508:24:54"
                              }
                            ],
                            "functionName": {
                              "name": "not",
                              "nodeType": "YulIdentifier",
                              "src": "19504:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "19504:29:54"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "19494:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19494:40:54"
                      },
                      {
                        "arguments": [
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19540:1:54",
                            "type": "",
                            "value": "1"
                          },
                          {
                            "name": "len",
                            "nodeType": "YulIdentifier",
                            "src": "19543:3:54"
                          }
                        ],
                        "functionName": {
                          "name": "shl",
                          "nodeType": "YulIdentifier",
                          "src": "19536:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19536:11:54"
                      }
                    ],
                    "functionName": {
                      "name": "or",
                      "nodeType": "YulIdentifier",
                      "src": "19491:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19491:57:54"
                  },
                  "variableNames": [
                    {
                      "name": "used",
                      "nodeType": "YulIdentifier",
                      "src": "19483:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "extract_used_part_and_set_length_of_short_byte_array",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "data",
                "nodeType": "YulTypedName",
                "src": "19450:4:54",
                "type": ""
              },
              {
                "name": "len",
                "nodeType": "YulTypedName",
                "src": "19456:3:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "used",
                "nodeType": "YulTypedName",
                "src": "19464:4:54",
                "type": ""
              }
            ],
            "src": "19388:166:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "19662:1103:54",
              "statements": [
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "19703:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "19705:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "19705:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "19705:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "len",
                        "nodeType": "YulIdentifier",
                        "src": "19678:3:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "19691:2:54",
                                "type": "",
                                "value": "64"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "19695:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "19687:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "19687:10:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "19699:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "19683:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19683:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "19675:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19675:27:54"
                  },
                  "nodeType": "YulIf",
                  "src": "19672:53:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "slot",
                        "nodeType": "YulIdentifier",
                        "src": "19778:4:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "slot",
                                "nodeType": "YulIdentifier",
                                "src": "19816:4:54"
                              }
                            ],
                            "functionName": {
                              "name": "sload",
                              "nodeType": "YulIdentifier",
                              "src": "19810:5:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "19810:11:54"
                          }
                        ],
                        "functionName": {
                          "name": "extract_byte_array_length",
                          "nodeType": "YulIdentifier",
                          "src": "19784:25:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "19784:38:54"
                      },
                      {
                        "name": "len",
                        "nodeType": "YulIdentifier",
                        "src": "19824:3:54"
                      }
                    ],
                    "functionName": {
                      "name": "clean_up_bytearray_end_slots_string_storage",
                      "nodeType": "YulIdentifier",
                      "src": "19734:43:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19734:94:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "19734:94:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "19837:18:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "19854:1:54",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "srcOffset",
                      "nodeType": "YulTypedName",
                      "src": "19841:9:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "cases": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "19898:609:54",
                        "statements": [
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "19912:32:54",
                            "value": {
                              "arguments": [
                                {
                                  "name": "len",
                                  "nodeType": "YulIdentifier",
                                  "src": "19931:3:54"
                                },
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "19940:2:54",
                                      "type": "",
                                      "value": "31"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "not",
                                    "nodeType": "YulIdentifier",
                                    "src": "19936:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "19936:7:54"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nodeType": "YulIdentifier",
                                "src": "19927:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "19927:17:54"
                            },
                            "variables": [
                              {
                                "name": "loopEnd",
                                "nodeType": "YulTypedName",
                                "src": "19916:7:54",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "19957:49:54",
                            "value": {
                              "arguments": [
                                {
                                  "name": "slot",
                                  "nodeType": "YulIdentifier",
                                  "src": "20001:4:54"
                                }
                              ],
                              "functionName": {
                                "name": "array_dataslot_string_storage",
                                "nodeType": "YulIdentifier",
                                "src": "19971:29:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "19971:35:54"
                            },
                            "variables": [
                              {
                                "name": "dstPtr",
                                "nodeType": "YulTypedName",
                                "src": "19961:6:54",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "20019:18:54",
                            "value": {
                              "name": "srcOffset",
                              "nodeType": "YulIdentifier",
                              "src": "20028:9:54"
                            },
                            "variables": [
                              {
                                "name": "i",
                                "nodeType": "YulTypedName",
                                "src": "20023:1:54",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "20107:172:54",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "name": "dstPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "20132:6:54"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "src",
                                                "nodeType": "YulIdentifier",
                                                "src": "20157:3:54"
                                              },
                                              {
                                                "name": "srcOffset",
                                                "nodeType": "YulIdentifier",
                                                "src": "20162:9:54"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "20153:3:54"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "20153:19:54"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "calldataload",
                                          "nodeType": "YulIdentifier",
                                          "src": "20140:12:54"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "20140:33:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sstore",
                                      "nodeType": "YulIdentifier",
                                      "src": "20125:6:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20125:49:54"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "20125:49:54"
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "20191:24:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "dstPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "20205:6:54"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20213:1:54",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20201:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20201:14:54"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "dstPtr",
                                      "nodeType": "YulIdentifier",
                                      "src": "20191:6:54"
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "20232:33:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "srcOffset",
                                        "nodeType": "YulIdentifier",
                                        "src": "20249:9:54"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20260:4:54",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20245:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20245:20:54"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "srcOffset",
                                      "nodeType": "YulIdentifier",
                                      "src": "20232:9:54"
                                    }
                                  ]
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "20061:1:54"
                                },
                                {
                                  "name": "loopEnd",
                                  "nodeType": "YulIdentifier",
                                  "src": "20064:7:54"
                                }
                              ],
                              "functionName": {
                                "name": "lt",
                                "nodeType": "YulIdentifier",
                                "src": "20058:2:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "20058:14:54"
                            },
                            "nodeType": "YulForLoop",
                            "post": {
                              "nodeType": "YulBlock",
                              "src": "20073:21:54",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "20075:17:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "20084:1:54"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "20087:4:54",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "20080:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20080:12:54"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "20075:1:54"
                                    }
                                  ]
                                }
                              ]
                            },
                            "pre": {
                              "nodeType": "YulBlock",
                              "src": "20054:3:54",
                              "statements": []
                            },
                            "src": "20050:229:54"
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "20324:127:54",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "name": "dstPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "20349:6:54"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "src",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "20378:3:54"
                                                  },
                                                  {
                                                    "name": "srcOffset",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "20383:9:54"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "add",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "20374:3:54"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "20374:19:54"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "calldataload",
                                              "nodeType": "YulIdentifier",
                                              "src": "20361:12:54"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "20361:33:54"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "20412:1:54",
                                                            "type": "",
                                                            "value": "3"
                                                          },
                                                          {
                                                            "name": "len",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "20415:3:54"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "shl",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "20408:3:54"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "20408:11:54"
                                                      },
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "20421:3:54",
                                                        "type": "",
                                                        "value": "248"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "and",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "20404:3:54"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "20404:21:54"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "20431:1:54",
                                                        "type": "",
                                                        "value": "0"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "not",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "20427:3:54"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "20427:6:54"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "20400:3:54"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "20400:34:54"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "20396:3:54"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "20396:39:54"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "20357:3:54"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "20357:79:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sstore",
                                      "nodeType": "YulIdentifier",
                                      "src": "20342:6:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20342:95:54"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "20342:95:54"
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "name": "loopEnd",
                                  "nodeType": "YulIdentifier",
                                  "src": "20298:7:54"
                                },
                                {
                                  "name": "len",
                                  "nodeType": "YulIdentifier",
                                  "src": "20307:3:54"
                                }
                              ],
                              "functionName": {
                                "name": "lt",
                                "nodeType": "YulIdentifier",
                                "src": "20295:2:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "20295:16:54"
                            },
                            "nodeType": "YulIf",
                            "src": "20292:159:54"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "name": "slot",
                                  "nodeType": "YulIdentifier",
                                  "src": "20471:4:54"
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "20485:1:54",
                                          "type": "",
                                          "value": "1"
                                        },
                                        {
                                          "name": "len",
                                          "nodeType": "YulIdentifier",
                                          "src": "20488:3:54"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "shl",
                                        "nodeType": "YulIdentifier",
                                        "src": "20481:3:54"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "20481:11:54"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "20494:1:54",
                                      "type": "",
                                      "value": "1"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "20477:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "20477:19:54"
                                }
                              ],
                              "functionName": {
                                "name": "sstore",
                                "nodeType": "YulIdentifier",
                                "src": "20464:6:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "20464:33:54"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "20464:33:54"
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "19891:616:54",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19896:1:54",
                        "type": "",
                        "value": "1"
                      }
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "20524:235:54",
                        "statements": [
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "20538:14:54",
                            "value": {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "20551:1:54",
                              "type": "",
                              "value": "0"
                            },
                            "variables": [
                              {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "20542:5:54",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "20584:74:54",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "20602:42:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "src",
                                            "nodeType": "YulIdentifier",
                                            "src": "20628:3:54"
                                          },
                                          {
                                            "name": "srcOffset",
                                            "nodeType": "YulIdentifier",
                                            "src": "20633:9:54"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "20624:3:54"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "20624:19:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "calldataload",
                                      "nodeType": "YulIdentifier",
                                      "src": "20611:12:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "20611:33:54"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "value",
                                      "nodeType": "YulIdentifier",
                                      "src": "20602:5:54"
                                    }
                                  ]
                                }
                              ]
                            },
                            "condition": {
                              "name": "len",
                              "nodeType": "YulIdentifier",
                              "src": "20568:3:54"
                            },
                            "nodeType": "YulIf",
                            "src": "20565:93:54"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "name": "slot",
                                  "nodeType": "YulIdentifier",
                                  "src": "20678:4:54"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "value",
                                      "nodeType": "YulIdentifier",
                                      "src": "20737:5:54"
                                    },
                                    {
                                      "name": "len",
                                      "nodeType": "YulIdentifier",
                                      "src": "20744:3:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "extract_used_part_and_set_length_of_short_byte_array",
                                    "nodeType": "YulIdentifier",
                                    "src": "20684:52:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "20684:64:54"
                                }
                              ],
                              "functionName": {
                                "name": "sstore",
                                "nodeType": "YulIdentifier",
                                "src": "20671:6:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "20671:78:54"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "20671:78:54"
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "20516:243:54",
                      "value": "default"
                    }
                  ],
                  "expression": {
                    "arguments": [
                      {
                        "name": "len",
                        "nodeType": "YulIdentifier",
                        "src": "19874:3:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "19879:2:54",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "19871:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "19871:11:54"
                  },
                  "nodeType": "YulSwitch",
                  "src": "19864:895:54"
                }
              ]
            },
            "name": "copy_byte_array_to_storage_from_t_string_calldata_ptr_to_t_string_storage",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "slot",
                "nodeType": "YulTypedName",
                "src": "19642:4:54",
                "type": ""
              },
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "19648:3:54",
                "type": ""
              },
              {
                "name": "len",
                "nodeType": "YulTypedName",
                "src": "19653:3:54",
                "type": ""
              }
            ],
            "src": "19559:1206:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "20944:228:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "20961:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "20972:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20954:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20954:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20954:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "20995:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21006:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "20991:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "20991:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21011:2:54",
                        "type": "",
                        "value": "38"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "20984:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "20984:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "20984:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "21034:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21045:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "21030:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21030:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "21050:34:54",
                        "type": "",
                        "value": "Ownable: new owner is the zero a"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21023:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21023:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21023:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "21105:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21116:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "21101:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21101:18:54"
                      },
                      {
                        "hexValue": "646472657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "21121:8:54",
                        "type": "",
                        "value": "ddress"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21094:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21094:36:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21094:36:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "21139:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "21151:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21162:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "21147:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21147:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "21139:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "20921:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "20935:4:54",
                "type": ""
              }
            ],
            "src": "20770:402:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "21351:236:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "21368:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21379:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21361:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21361:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21361:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "21402:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21413:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "21398:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21398:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21418:2:54",
                        "type": "",
                        "value": "46"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21391:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21391:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21391:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "21441:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21452:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "21437:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21437:18:54"
                      },
                      {
                        "hexValue": "496e697469616c697a61626c653a20636f6e747261637420697320616c726561",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "21457:34:54",
                        "type": "",
                        "value": "Initializable: contract is alrea"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21430:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21430:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21430:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "21512:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21523:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "21508:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21508:18:54"
                      },
                      {
                        "hexValue": "647920696e697469616c697a6564",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "21528:16:54",
                        "type": "",
                        "value": "dy initialized"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "21501:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21501:44:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21501:44:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "21554:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "21566:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "21577:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "21562:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21562:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "21554:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "21328:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "21342:4:54",
                "type": ""
              }
            ],
            "src": "21177:410:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "21688:1256:54",
              "statements": [
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "21698:24:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "src",
                        "nodeType": "YulIdentifier",
                        "src": "21718:3:54"
                      }
                    ],
                    "functionName": {
                      "name": "mload",
                      "nodeType": "YulIdentifier",
                      "src": "21712:5:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21712:10:54"
                  },
                  "variables": [
                    {
                      "name": "newLen",
                      "nodeType": "YulTypedName",
                      "src": "21702:6:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "body": {
                    "nodeType": "YulBlock",
                    "src": "21765:22:54",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "functionName": {
                            "name": "panic_error_0x41",
                            "nodeType": "YulIdentifier",
                            "src": "21767:16:54"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "21767:18:54"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "21767:18:54"
                      }
                    ]
                  },
                  "condition": {
                    "arguments": [
                      {
                        "name": "newLen",
                        "nodeType": "YulIdentifier",
                        "src": "21737:6:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "21753:2:54",
                                "type": "",
                                "value": "64"
                              },
                              {
                                "kind": "number",
                                "nodeType": "YulLiteral",
                                "src": "21757:1:54",
                                "type": "",
                                "value": "1"
                              }
                            ],
                            "functionName": {
                              "name": "shl",
                              "nodeType": "YulIdentifier",
                              "src": "21749:3:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "21749:10:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "21761:1:54",
                            "type": "",
                            "value": "1"
                          }
                        ],
                        "functionName": {
                          "name": "sub",
                          "nodeType": "YulIdentifier",
                          "src": "21745:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21745:18:54"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "21734:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21734:30:54"
                  },
                  "nodeType": "YulIf",
                  "src": "21731:56:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "slot",
                        "nodeType": "YulIdentifier",
                        "src": "21840:4:54"
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "name": "slot",
                                "nodeType": "YulIdentifier",
                                "src": "21878:4:54"
                              }
                            ],
                            "functionName": {
                              "name": "sload",
                              "nodeType": "YulIdentifier",
                              "src": "21872:5:54"
                            },
                            "nodeType": "YulFunctionCall",
                            "src": "21872:11:54"
                          }
                        ],
                        "functionName": {
                          "name": "extract_byte_array_length",
                          "nodeType": "YulIdentifier",
                          "src": "21846:25:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "21846:38:54"
                      },
                      {
                        "name": "newLen",
                        "nodeType": "YulIdentifier",
                        "src": "21886:6:54"
                      }
                    ],
                    "functionName": {
                      "name": "clean_up_bytearray_end_slots_string_storage",
                      "nodeType": "YulIdentifier",
                      "src": "21796:43:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "21796:97:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "21796:97:54"
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "21902:18:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "21919:1:54",
                    "type": "",
                    "value": "0"
                  },
                  "variables": [
                    {
                      "name": "srcOffset",
                      "nodeType": "YulTypedName",
                      "src": "21906:9:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulVariableDeclaration",
                  "src": "21929:23:54",
                  "value": {
                    "kind": "number",
                    "nodeType": "YulLiteral",
                    "src": "21948:4:54",
                    "type": "",
                    "value": "0x20"
                  },
                  "variables": [
                    {
                      "name": "srcOffset_1",
                      "nodeType": "YulTypedName",
                      "src": "21933:11:54",
                      "type": ""
                    }
                  ]
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "21961:24:54",
                  "value": {
                    "name": "srcOffset_1",
                    "nodeType": "YulIdentifier",
                    "src": "21974:11:54"
                  },
                  "variableNames": [
                    {
                      "name": "srcOffset",
                      "nodeType": "YulIdentifier",
                      "src": "21961:9:54"
                    }
                  ]
                },
                {
                  "cases": [
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "22031:656:54",
                        "statements": [
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "22045:35:54",
                            "value": {
                              "arguments": [
                                {
                                  "name": "newLen",
                                  "nodeType": "YulIdentifier",
                                  "src": "22064:6:54"
                                },
                                {
                                  "arguments": [
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "22076:2:54",
                                      "type": "",
                                      "value": "31"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "not",
                                    "nodeType": "YulIdentifier",
                                    "src": "22072:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "22072:7:54"
                                }
                              ],
                              "functionName": {
                                "name": "and",
                                "nodeType": "YulIdentifier",
                                "src": "22060:3:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "22060:20:54"
                            },
                            "variables": [
                              {
                                "name": "loopEnd",
                                "nodeType": "YulTypedName",
                                "src": "22049:7:54",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "22093:49:54",
                            "value": {
                              "arguments": [
                                {
                                  "name": "slot",
                                  "nodeType": "YulIdentifier",
                                  "src": "22137:4:54"
                                }
                              ],
                              "functionName": {
                                "name": "array_dataslot_string_storage",
                                "nodeType": "YulIdentifier",
                                "src": "22107:29:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "22107:35:54"
                            },
                            "variables": [
                              {
                                "name": "dstPtr",
                                "nodeType": "YulTypedName",
                                "src": "22097:6:54",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "22155:10:54",
                            "value": {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "22164:1:54",
                              "type": "",
                              "value": "0"
                            },
                            "variables": [
                              {
                                "name": "i",
                                "nodeType": "YulTypedName",
                                "src": "22159:1:54",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "22242:172:54",
                              "statements": [
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "name": "dstPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "22267:6:54"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "arguments": [
                                              {
                                                "name": "src",
                                                "nodeType": "YulIdentifier",
                                                "src": "22285:3:54"
                                              },
                                              {
                                                "name": "srcOffset",
                                                "nodeType": "YulIdentifier",
                                                "src": "22290:9:54"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "add",
                                              "nodeType": "YulIdentifier",
                                              "src": "22281:3:54"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "22281:19:54"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "mload",
                                          "nodeType": "YulIdentifier",
                                          "src": "22275:5:54"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "22275:26:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sstore",
                                      "nodeType": "YulIdentifier",
                                      "src": "22260:6:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "22260:42:54"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "22260:42:54"
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "22319:24:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "dstPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "22333:6:54"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "22341:1:54",
                                        "type": "",
                                        "value": "1"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "22329:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "22329:14:54"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "dstPtr",
                                      "nodeType": "YulIdentifier",
                                      "src": "22319:6:54"
                                    }
                                  ]
                                },
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "22360:40:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "srcOffset",
                                        "nodeType": "YulIdentifier",
                                        "src": "22377:9:54"
                                      },
                                      {
                                        "name": "srcOffset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "22388:11:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "22373:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "22373:27:54"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "srcOffset",
                                      "nodeType": "YulIdentifier",
                                      "src": "22360:9:54"
                                    }
                                  ]
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "name": "i",
                                  "nodeType": "YulIdentifier",
                                  "src": "22189:1:54"
                                },
                                {
                                  "name": "loopEnd",
                                  "nodeType": "YulIdentifier",
                                  "src": "22192:7:54"
                                }
                              ],
                              "functionName": {
                                "name": "lt",
                                "nodeType": "YulIdentifier",
                                "src": "22186:2:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "22186:14:54"
                            },
                            "nodeType": "YulForLoop",
                            "post": {
                              "nodeType": "YulBlock",
                              "src": "22201:28:54",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "22203:24:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "name": "i",
                                        "nodeType": "YulIdentifier",
                                        "src": "22212:1:54"
                                      },
                                      {
                                        "name": "srcOffset_1",
                                        "nodeType": "YulIdentifier",
                                        "src": "22215:11:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "22208:3:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "22208:19:54"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "i",
                                      "nodeType": "YulIdentifier",
                                      "src": "22203:1:54"
                                    }
                                  ]
                                }
                              ]
                            },
                            "pre": {
                              "nodeType": "YulBlock",
                              "src": "22182:3:54",
                              "statements": []
                            },
                            "src": "22178:236:54"
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "22462:166:54",
                              "statements": [
                                {
                                  "nodeType": "YulVariableDeclaration",
                                  "src": "22480:43:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "src",
                                            "nodeType": "YulIdentifier",
                                            "src": "22507:3:54"
                                          },
                                          {
                                            "name": "srcOffset",
                                            "nodeType": "YulIdentifier",
                                            "src": "22512:9:54"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "22503:3:54"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "22503:19:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "22497:5:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "22497:26:54"
                                  },
                                  "variables": [
                                    {
                                      "name": "lastValue",
                                      "nodeType": "YulTypedName",
                                      "src": "22484:9:54",
                                      "type": ""
                                    }
                                  ]
                                },
                                {
                                  "expression": {
                                    "arguments": [
                                      {
                                        "name": "dstPtr",
                                        "nodeType": "YulIdentifier",
                                        "src": "22547:6:54"
                                      },
                                      {
                                        "arguments": [
                                          {
                                            "name": "lastValue",
                                            "nodeType": "YulIdentifier",
                                            "src": "22559:9:54"
                                          },
                                          {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "arguments": [
                                                      {
                                                        "arguments": [
                                                          {
                                                            "kind": "number",
                                                            "nodeType": "YulLiteral",
                                                            "src": "22586:1:54",
                                                            "type": "",
                                                            "value": "3"
                                                          },
                                                          {
                                                            "name": "newLen",
                                                            "nodeType": "YulIdentifier",
                                                            "src": "22589:6:54"
                                                          }
                                                        ],
                                                        "functionName": {
                                                          "name": "shl",
                                                          "nodeType": "YulIdentifier",
                                                          "src": "22582:3:54"
                                                        },
                                                        "nodeType": "YulFunctionCall",
                                                        "src": "22582:14:54"
                                                      },
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "22598:3:54",
                                                        "type": "",
                                                        "value": "248"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "and",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "22578:3:54"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "22578:24:54"
                                                  },
                                                  {
                                                    "arguments": [
                                                      {
                                                        "kind": "number",
                                                        "nodeType": "YulLiteral",
                                                        "src": "22608:1:54",
                                                        "type": "",
                                                        "value": "0"
                                                      }
                                                    ],
                                                    "functionName": {
                                                      "name": "not",
                                                      "nodeType": "YulIdentifier",
                                                      "src": "22604:3:54"
                                                    },
                                                    "nodeType": "YulFunctionCall",
                                                    "src": "22604:6:54"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "shr",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "22574:3:54"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "22574:37:54"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "not",
                                              "nodeType": "YulIdentifier",
                                              "src": "22570:3:54"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "22570:42:54"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "and",
                                          "nodeType": "YulIdentifier",
                                          "src": "22555:3:54"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "22555:58:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "sstore",
                                      "nodeType": "YulIdentifier",
                                      "src": "22540:6:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "22540:74:54"
                                  },
                                  "nodeType": "YulExpressionStatement",
                                  "src": "22540:74:54"
                                }
                              ]
                            },
                            "condition": {
                              "arguments": [
                                {
                                  "name": "loopEnd",
                                  "nodeType": "YulIdentifier",
                                  "src": "22433:7:54"
                                },
                                {
                                  "name": "newLen",
                                  "nodeType": "YulIdentifier",
                                  "src": "22442:6:54"
                                }
                              ],
                              "functionName": {
                                "name": "lt",
                                "nodeType": "YulIdentifier",
                                "src": "22430:2:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "22430:19:54"
                            },
                            "nodeType": "YulIf",
                            "src": "22427:201:54"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "name": "slot",
                                  "nodeType": "YulIdentifier",
                                  "src": "22648:4:54"
                                },
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "kind": "number",
                                          "nodeType": "YulLiteral",
                                          "src": "22662:1:54",
                                          "type": "",
                                          "value": "1"
                                        },
                                        {
                                          "name": "newLen",
                                          "nodeType": "YulIdentifier",
                                          "src": "22665:6:54"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "shl",
                                        "nodeType": "YulIdentifier",
                                        "src": "22658:3:54"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "22658:14:54"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "22674:1:54",
                                      "type": "",
                                      "value": "1"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "22654:3:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "22654:22:54"
                                }
                              ],
                              "functionName": {
                                "name": "sstore",
                                "nodeType": "YulIdentifier",
                                "src": "22641:6:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "22641:36:54"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "22641:36:54"
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "22024:663:54",
                      "value": {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "22029:1:54",
                        "type": "",
                        "value": "1"
                      }
                    },
                    {
                      "body": {
                        "nodeType": "YulBlock",
                        "src": "22704:234:54",
                        "statements": [
                          {
                            "nodeType": "YulVariableDeclaration",
                            "src": "22718:14:54",
                            "value": {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "22731:1:54",
                              "type": "",
                              "value": "0"
                            },
                            "variables": [
                              {
                                "name": "value",
                                "nodeType": "YulTypedName",
                                "src": "22722:5:54",
                                "type": ""
                              }
                            ]
                          },
                          {
                            "body": {
                              "nodeType": "YulBlock",
                              "src": "22767:67:54",
                              "statements": [
                                {
                                  "nodeType": "YulAssignment",
                                  "src": "22785:35:54",
                                  "value": {
                                    "arguments": [
                                      {
                                        "arguments": [
                                          {
                                            "name": "src",
                                            "nodeType": "YulIdentifier",
                                            "src": "22804:3:54"
                                          },
                                          {
                                            "name": "srcOffset",
                                            "nodeType": "YulIdentifier",
                                            "src": "22809:9:54"
                                          }
                                        ],
                                        "functionName": {
                                          "name": "add",
                                          "nodeType": "YulIdentifier",
                                          "src": "22800:3:54"
                                        },
                                        "nodeType": "YulFunctionCall",
                                        "src": "22800:19:54"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "22794:5:54"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "22794:26:54"
                                  },
                                  "variableNames": [
                                    {
                                      "name": "value",
                                      "nodeType": "YulIdentifier",
                                      "src": "22785:5:54"
                                    }
                                  ]
                                }
                              ]
                            },
                            "condition": {
                              "name": "newLen",
                              "nodeType": "YulIdentifier",
                              "src": "22748:6:54"
                            },
                            "nodeType": "YulIf",
                            "src": "22745:89:54"
                          },
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "name": "slot",
                                  "nodeType": "YulIdentifier",
                                  "src": "22854:4:54"
                                },
                                {
                                  "arguments": [
                                    {
                                      "name": "value",
                                      "nodeType": "YulIdentifier",
                                      "src": "22913:5:54"
                                    },
                                    {
                                      "name": "newLen",
                                      "nodeType": "YulIdentifier",
                                      "src": "22920:6:54"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "extract_used_part_and_set_length_of_short_byte_array",
                                    "nodeType": "YulIdentifier",
                                    "src": "22860:52:54"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "22860:67:54"
                                }
                              ],
                              "functionName": {
                                "name": "sstore",
                                "nodeType": "YulIdentifier",
                                "src": "22847:6:54"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "22847:81:54"
                            },
                            "nodeType": "YulExpressionStatement",
                            "src": "22847:81:54"
                          }
                        ]
                      },
                      "nodeType": "YulCase",
                      "src": "22696:242:54",
                      "value": "default"
                    }
                  ],
                  "expression": {
                    "arguments": [
                      {
                        "name": "newLen",
                        "nodeType": "YulIdentifier",
                        "src": "22004:6:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "22012:2:54",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "gt",
                      "nodeType": "YulIdentifier",
                      "src": "22001:2:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "22001:14:54"
                  },
                  "nodeType": "YulSwitch",
                  "src": "21994:944:54"
                }
              ]
            },
            "name": "copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "slot",
                "nodeType": "YulTypedName",
                "src": "21673:4:54",
                "type": ""
              },
              {
                "name": "src",
                "nodeType": "YulTypedName",
                "src": "21679:3:54",
                "type": ""
              }
            ],
            "src": "21592:1352:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "23056:87:54",
              "statements": [
                {
                  "nodeType": "YulAssignment",
                  "src": "23066:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "23078:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "23089:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "23074:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23074:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "23066:4:54"
                    }
                  ]
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "23108:9:54"
                      },
                      {
                        "arguments": [
                          {
                            "name": "value0",
                            "nodeType": "YulIdentifier",
                            "src": "23123:6:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "23131:4:54",
                            "type": "",
                            "value": "0xff"
                          }
                        ],
                        "functionName": {
                          "name": "and",
                          "nodeType": "YulIdentifier",
                          "src": "23119:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "23119:17:54"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "23101:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23101:36:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "23101:36:54"
                }
              ]
            },
            "name": "abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "23025:9:54",
                "type": ""
              },
              {
                "name": "value0",
                "nodeType": "YulTypedName",
                "src": "23036:6:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "23047:4:54",
                "type": ""
              }
            ],
            "src": "22949:194:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "23322:226:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "23339:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "23350:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "23332:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23332:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "23332:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "23373:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "23384:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "23369:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "23369:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "23389:2:54",
                        "type": "",
                        "value": "36"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "23362:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23362:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "23362:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "23412:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "23423:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "23408:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "23408:18:54"
                      },
                      {
                        "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f20616464",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "23428:34:54",
                        "type": "",
                        "value": "ERC20: approve from the zero add"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "23401:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23401:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "23401:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "23483:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "23494:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "23479:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "23479:18:54"
                      },
                      {
                        "hexValue": "72657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "23499:6:54",
                        "type": "",
                        "value": "ress"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "23472:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23472:34:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "23472:34:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "23515:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "23527:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "23538:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "23523:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23523:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "23515:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "23299:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "23313:4:54",
                "type": ""
              }
            ],
            "src": "23148:400:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "23727:224:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "23744:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "23755:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "23737:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23737:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "23737:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "23778:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "23789:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "23774:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "23774:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "23794:2:54",
                        "type": "",
                        "value": "34"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "23767:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23767:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "23767:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "23817:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "23828:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "23813:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "23813:18:54"
                      },
                      {
                        "hexValue": "45524332303a20617070726f766520746f20746865207a65726f206164647265",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "23833:34:54",
                        "type": "",
                        "value": "ERC20: approve to the zero addre"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "23806:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23806:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "23806:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "23888:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "23899:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "23884:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "23884:18:54"
                      },
                      {
                        "hexValue": "7373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "23904:4:54",
                        "type": "",
                        "value": "ss"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "23877:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23877:32:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "23877:32:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "23918:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "23930:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "23941:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "23926:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "23926:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "23918:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "23704:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "23718:4:54",
                "type": ""
              }
            ],
            "src": "23553:398:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "24130:224:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "24147:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "24158:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "24140:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "24140:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "24140:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "24181:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "24192:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "24177:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "24177:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "24197:2:54",
                        "type": "",
                        "value": "34"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "24170:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "24170:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "24170:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "24220:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "24231:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "24216:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "24216:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420697320746865207a65726f206164647265",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "24236:34:54",
                        "type": "",
                        "value": "Roles: account is the zero addre"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "24209:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "24209:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "24209:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "24291:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "24302:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "24287:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "24287:18:54"
                      },
                      {
                        "hexValue": "7373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "24307:4:54",
                        "type": "",
                        "value": "ss"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "24280:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "24280:32:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "24280:32:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "24321:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "24333:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "24344:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "24329:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "24329:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "24321:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9d214fa89563f4e6456a3929327e54500ea1cde2c0ba9fb2035ec106190d682f__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "24107:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "24121:4:54",
                "type": ""
              }
            ],
            "src": "23956:398:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "24533:227:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "24550:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "24561:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "24543:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "24543:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "24543:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "24584:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "24595:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "24580:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "24580:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "24600:2:54",
                        "type": "",
                        "value": "37"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "24573:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "24573:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "24573:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "24623:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "24634:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "24619:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "24619:18:54"
                      },
                      {
                        "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f206164",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "24639:34:54",
                        "type": "",
                        "value": "ERC20: transfer from the zero ad"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "24612:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "24612:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "24612:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "24694:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "24705:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "24690:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "24690:18:54"
                      },
                      {
                        "hexValue": "6472657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "24710:7:54",
                        "type": "",
                        "value": "dress"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "24683:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "24683:35:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "24683:35:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "24727:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "24739:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "24750:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "24735:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "24735:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "24727:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "24510:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "24524:4:54",
                "type": ""
              }
            ],
            "src": "24359:401:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "24939:225:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "24956:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "24967:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "24949:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "24949:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "24949:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "24990:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "25001:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "24986:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "24986:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "25006:2:54",
                        "type": "",
                        "value": "35"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "24979:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "24979:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "24979:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "25029:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "25040:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "25025:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "25025:18:54"
                      },
                      {
                        "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "25045:34:54",
                        "type": "",
                        "value": "ERC20: transfer to the zero addr"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "25018:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "25018:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "25018:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "25100:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "25111:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "25096:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "25096:18:54"
                      },
                      {
                        "hexValue": "657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "25116:5:54",
                        "type": "",
                        "value": "ess"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "25089:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "25089:33:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "25089:33:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "25131:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "25143:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "25154:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "25139:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "25139:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "25131:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "24916:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "24930:4:54",
                "type": ""
              }
            ],
            "src": "24765:399:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "25343:182:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "25360:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "25371:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "25353:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "25353:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "25353:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "25394:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "25405:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "25390:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "25390:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "25410:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "25383:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "25383:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "25383:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "25433:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "25444:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "25429:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "25429:18:54"
                      },
                      {
                        "hexValue": "4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "25449:34:54",
                        "type": "",
                        "value": "Ownable: caller is not the owner"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "25422:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "25422:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "25422:62:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "25493:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "25505:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "25516:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "25501:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "25501:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "25493:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "25320:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "25334:4:54",
                "type": ""
              }
            ],
            "src": "25169:356:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "25704:181:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "25721:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "25732:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "25714:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "25714:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "25714:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "25755:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "25766:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "25751:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "25751:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "25771:2:54",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "25744:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "25744:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "25744:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "25794:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "25805:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "25790:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "25790:18:54"
                      },
                      {
                        "hexValue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "25810:33:54",
                        "type": "",
                        "value": "ERC20: mint to the zero address"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "25783:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "25783:61:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "25783:61:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "25853:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "25865:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "25876:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "25861:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "25861:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "25853:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "25681:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "25695:4:54",
                "type": ""
              }
            ],
            "src": "25530:355:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "26064:181:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "26081:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "26092:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "26074:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "26074:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "26074:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "26115:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "26126:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "26111:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "26111:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "26131:2:54",
                        "type": "",
                        "value": "31"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "26104:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "26104:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "26104:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "26154:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "26165:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "26150:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "26150:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420616c72656164792068617320726f6c65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "26170:33:54",
                        "type": "",
                        "value": "Roles: account already has role"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "26143:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "26143:61:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "26143:61:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "26213:26:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "26225:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "26236:2:54",
                        "type": "",
                        "value": "96"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "26221:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "26221:18:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "26213:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_0f76c3a3e97a37fcdff532c2741c10933ebf2b769d5475388e30ae4f7155f13a__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "26041:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "26055:4:54",
                "type": ""
              }
            ],
            "src": "25890:355:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "26424:223:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "26441:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "26452:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "26434:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "26434:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "26434:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "26475:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "26486:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "26471:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "26471:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "26491:2:54",
                        "type": "",
                        "value": "33"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "26464:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "26464:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "26464:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "26514:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "26525:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "26510:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "26510:18:54"
                      },
                      {
                        "hexValue": "526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "26530:34:54",
                        "type": "",
                        "value": "Roles: account does not have rol"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "26503:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "26503:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "26503:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "26585:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "26596:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "26581:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "26581:18:54"
                      },
                      {
                        "hexValue": "65",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "26601:3:54",
                        "type": "",
                        "value": "e"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "26574:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "26574:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "26574:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "26614:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "26626:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "26637:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "26622:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "26622:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "26614:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_7bd893145ac435f339bb7c288622d270324b7033b011f693aca172f5cbc3c257__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "26401:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "26415:4:54",
                "type": ""
              }
            ],
            "src": "26250:397:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "26826:223:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "26843:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "26854:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "26836:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "26836:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "26836:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "26877:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "26888:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "26873:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "26873:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "26893:2:54",
                        "type": "",
                        "value": "33"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "26866:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "26866:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "26866:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "26916:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "26927:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "26912:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "26912:18:54"
                      },
                      {
                        "hexValue": "45524332303a206275726e2066726f6d20746865207a65726f20616464726573",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "26932:34:54",
                        "type": "",
                        "value": "ERC20: burn from the zero addres"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "26905:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "26905:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "26905:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "26987:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "26998:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "26983:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "26983:18:54"
                      },
                      {
                        "hexValue": "73",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "27003:3:54",
                        "type": "",
                        "value": "s"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "26976:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "26976:31:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "26976:31:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "27016:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "27028:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "27039:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "27024:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "27024:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "27016:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "26803:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "26817:4:54",
                "type": ""
              }
            ],
            "src": "26652:397:54"
          },
          {
            "body": {
              "nodeType": "YulBlock",
              "src": "27228:233:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "27245:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "27256:2:54",
                        "type": "",
                        "value": "32"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "27238:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "27238:21:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "27238:21:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "27279:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "27290:2:54",
                            "type": "",
                            "value": "32"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "27275:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "27275:18:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "27295:2:54",
                        "type": "",
                        "value": "43"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "27268:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "27268:30:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "27268:30:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "27318:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "27329:2:54",
                            "type": "",
                            "value": "64"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "27314:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "27314:18:54"
                      },
                      {
                        "hexValue": "496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "27334:34:54",
                        "type": "",
                        "value": "Initializable: contract is not i"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "27307:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "27307:62:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "27307:62:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "name": "headStart",
                            "nodeType": "YulIdentifier",
                            "src": "27389:9:54"
                          },
                          {
                            "kind": "number",
                            "nodeType": "YulLiteral",
                            "src": "27400:2:54",
                            "type": "",
                            "value": "96"
                          }
                        ],
                        "functionName": {
                          "name": "add",
                          "nodeType": "YulIdentifier",
                          "src": "27385:3:54"
                        },
                        "nodeType": "YulFunctionCall",
                        "src": "27385:18:54"
                      },
                      {
                        "hexValue": "6e697469616c697a696e67",
                        "kind": "string",
                        "nodeType": "YulLiteral",
                        "src": "27405:13:54",
                        "type": "",
                        "value": "nitializing"
                      }
                    ],
                    "functionName": {
                      "name": "mstore",
                      "nodeType": "YulIdentifier",
                      "src": "27378:6:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "27378:41:54"
                  },
                  "nodeType": "YulExpressionStatement",
                  "src": "27378:41:54"
                },
                {
                  "nodeType": "YulAssignment",
                  "src": "27428:27:54",
                  "value": {
                    "arguments": [
                      {
                        "name": "headStart",
                        "nodeType": "YulIdentifier",
                        "src": "27440:9:54"
                      },
                      {
                        "kind": "number",
                        "nodeType": "YulLiteral",
                        "src": "27451:3:54",
                        "type": "",
                        "value": "128"
                      }
                    ],
                    "functionName": {
                      "name": "add",
                      "nodeType": "YulIdentifier",
                      "src": "27436:3:54"
                    },
                    "nodeType": "YulFunctionCall",
                    "src": "27436:19:54"
                  },
                  "variableNames": [
                    {
                      "name": "tail",
                      "nodeType": "YulIdentifier",
                      "src": "27428:4:54"
                    }
                  ]
                }
              ]
            },
            "name": "abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed",
            "nodeType": "YulFunctionDefinition",
            "parameters": [
              {
                "name": "headStart",
                "nodeType": "YulTypedName",
                "src": "27205:9:54",
                "type": ""
              }
            ],
            "returnVariables": [
              {
                "name": "tail",
                "nodeType": "YulTypedName",
                "src": "27219:4:54",
                "type": ""
              }
            ],
            "src": "27054:407:54"
          }
        ]
      },
      "contents": "{\n    { }\n    function abi_encode_string(value, pos) -> end\n    {\n        let length := mload(value)\n        mstore(pos, length)\n        let i := 0\n        for { } lt(i, length) { i := add(i, 0x20) }\n        {\n            let _1 := 0x20\n            mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n        }\n        mstore(add(add(pos, length), 0x20), 0)\n        end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n    }\n    function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n    {\n        mstore(headStart, 32)\n        tail := abi_encode_string(value0, add(headStart, 32))\n    }\n    function abi_decode_address(offset) -> value\n    {\n        value := calldataload(offset)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_uint256(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := calldataload(add(headStart, 32))\n    }\n    function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, iszero(iszero(value0)))\n    }\n    function abi_encode_tuple_t_contract$_IIdentityRegistry_$6637__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n    }\n    function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, value0)\n    }\n    function abi_decode_array_address_dyn_calldata(offset, end) -> arrayPos, length\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        length := calldataload(offset)\n        if gt(length, sub(shl(64, 1), 1)) { revert(0, 0) }\n        arrayPos := add(offset, 0x20)\n        if gt(add(add(offset, shl(5, length)), 0x20), end) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_bool_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n    }\n    function abi_decode_tuple_t_addresst_addresst_uint256(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := calldataload(add(headStart, 64))\n    }\n    function abi_encode_tuple_t_uint8__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n        let offset_2 := calldataload(add(headStart, 64))\n        if gt(offset_2, _1) { revert(0, 0) }\n        let value4_1, value5_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset_2), dataEnd)\n        value4 := value4_1\n        value5 := value5_1\n    }\n    function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptrt_array$_t_uint256_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let value0_1, value1_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset), dataEnd)\n        value0 := value0_1\n        value1 := value1_1\n        let offset_1 := calldataload(add(headStart, 32))\n        if gt(offset_1, _1) { revert(0, 0) }\n        let value2_1, value3_1 := abi_decode_array_address_dyn_calldata(add(headStart, offset_1), dataEnd)\n        value2 := value2_1\n        value3 := value3_1\n    }\n    function abi_encode_tuple_t_contract$_ICompliance_$5596__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n    }\n    function abi_decode_tuple_t_addresst_addresst_address(headStart, dataEnd) -> value0, value1, value2\n    {\n        if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        value2 := abi_decode_address(add(headStart, 64))\n    }\n    function abi_decode_tuple_t_string_calldata_ptr(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let offset := calldataload(headStart)\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        let _2 := add(headStart, offset)\n        if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n        let length := calldataload(_2)\n        if gt(length, _1) { revert(0, 0) }\n        if gt(add(add(_2, length), 32), dataEnd) { revert(0, 0) }\n        value0 := add(_2, 32)\n        value1 := length\n    }\n    function validator_revert_bool(value)\n    {\n        if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n    }\n    function abi_decode_tuple_t_addresst_bool(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        let value := calldataload(add(headStart, 32))\n        validator_revert_bool(value)\n        value1 := value\n    }\n    function abi_decode_tuple_t_addresst_address(headStart, dataEnd) -> value0, value1\n    {\n        if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n    }\n    function panic_error_0x41()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x41)\n        revert(0, 0x24)\n    }\n    function abi_decode_string(offset, end) -> array\n    {\n        if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n        let _1 := calldataload(offset)\n        let _2 := sub(shl(64, 1), 1)\n        if gt(_1, _2) { panic_error_0x41() }\n        let _3 := not(31)\n        let memPtr := mload(64)\n        let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n        if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n        mstore(64, newFreePtr)\n        mstore(memPtr, _1)\n        if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n        calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n        mstore(add(add(memPtr, _1), 0x20), 0)\n        array := memPtr\n    }\n    function abi_decode_tuple_t_addresst_addresst_string_memory_ptrt_string_memory_ptrt_uint8t_address(headStart, dataEnd) -> value0, value1, value2, value3, value4, value5\n    {\n        if slt(sub(dataEnd, headStart), 192) { revert(0, 0) }\n        value0 := abi_decode_address(headStart)\n        value1 := abi_decode_address(add(headStart, 32))\n        let offset := calldataload(add(headStart, 64))\n        let _1 := sub(shl(64, 1), 1)\n        if gt(offset, _1) { revert(0, 0) }\n        value2 := abi_decode_string(add(headStart, offset), dataEnd)\n        let offset_1 := calldataload(add(headStart, 96))\n        if gt(offset_1, _1) { revert(0, 0) }\n        value3 := abi_decode_string(add(headStart, offset_1), dataEnd)\n        let value := calldataload(add(headStart, 128))\n        if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n        value4 := value\n        value5 := abi_decode_address(add(headStart, 160))\n    }\n    function extract_byte_array_length(data) -> length\n    {\n        length := shr(1, data)\n        let outOfPlaceEncoding := and(data, 1)\n        if iszero(outOfPlaceEncoding) { length := and(length, 0x7f) }\n        if eq(outOfPlaceEncoding, lt(length, 32))\n        {\n            mstore(0, shl(224, 0x4e487b71))\n            mstore(4, 0x22)\n            revert(0, 0x24)\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_74a06637aa9b3f007e79b88b2581192c891126ad4f09db67db18ede3d2b5435c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"AgentRole: caller does not have \")\n        mstore(add(headStart, 96), \"the Agent role\")\n        tail := add(headStart, 128)\n    }\n    function panic_error_0x11()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x11)\n        revert(0, 0x24)\n    }\n    function checked_add_t_uint256(x, y) -> sum\n    {\n        sum := add(x, y)\n        if gt(x, sum) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_744672dda3f1a4aac2686ca817a473825cd11c66522615fb58f852c757d084af__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Amount exceeds available balance\")\n        tail := add(headStart, 96)\n    }\n    function panic_error_0x32()\n    {\n        mstore(0, shl(224, 0x4e487b71))\n        mstore(4, 0x32)\n        revert(0, 0x24)\n    }\n    function abi_decode_tuple_t_bool(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := calldataload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function increment_t_uint256(value) -> ret\n    {\n        if eq(value, not(0)) { panic_error_0x11() }\n        ret := add(value, 1)\n    }\n    function abi_encode_tuple_t_stringliteral_58c49b1d6a87eb553a18b11a7e5e086b34d54efe7947565e8c8e9340bcac49f6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 52)\n        mstore(add(headStart, 64), \"Amount should be less than or eq\")\n        mstore(add(headStart, 96), \"ual to frozen tokens\")\n        tail := add(headStart, 128)\n    }\n    function checked_sub_t_uint256(x, y) -> diff\n    {\n        diff := sub(x, y)\n        if gt(diff, x) { panic_error_0x11() }\n    }\n    function abi_encode_tuple_t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"Pausable: paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_6fdeb49fa8dca802b99c2a57b8d3c6989632cc684eeb0ba36d157473853eb95f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 16)\n        mstore(add(headStart, 64), \"wallet is frozen\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_b80e76e4c9dd95c0a6a7ab97569124291f4757bb9e5ff42d1e95905b42144c82__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"Insufficient Balance\")\n        tail := add(headStart, 96)\n    }\n    function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        validator_revert_bool(value)\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_address_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), value2)\n    }\n    function abi_encode_tuple_t_stringliteral_965de3177b9ab9d8ebf7092e1d4b11b84b3f5ec94a07ac1a7dcc6c263a2b34af__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"Transfer not possible\")\n        tail := add(headStart, 96)\n    }\n    function array_dataslot_string_storage(ptr) -> data\n    {\n        mstore(0, ptr)\n        data := keccak256(0, 0x20)\n    }\n    function abi_encode_string_storage(value, pos) -> ret\n    {\n        let slotValue := sload(value)\n        let length := extract_byte_array_length(slotValue)\n        mstore(pos, length)\n        let _1 := 0x20\n        let _2 := 1\n        switch and(slotValue, _2)\n        case 0 {\n            mstore(add(pos, _1), and(slotValue, not(255)))\n            ret := add(add(pos, shl(5, iszero(iszero(length)))), _1)\n        }\n        case 1 {\n            mstore(0, value)\n            let dataPos := keccak256(0, _1)\n            let i := 0\n            for { } lt(i, length) { i := add(i, _1) }\n            {\n                mstore(add(add(pos, i), _1), sload(dataPos))\n                dataPos := add(dataPos, _2)\n            }\n            ret := add(add(pos, i), _1)\n        }\n    }\n    function abi_encode_tuple_t_string_storage_t_string_storage_t_uint8_t_string_memory_ptr_t_address__to_t_string_memory_ptr_t_string_memory_ptr_t_uint8_t_string_memory_ptr_t_address__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n    {\n        mstore(headStart, 160)\n        let tail_1 := abi_encode_string_storage(value0, add(headStart, 160))\n        mstore(add(headStart, 32), sub(tail_1, headStart))\n        let tail_2 := abi_encode_string_storage(value1, tail_1)\n        mstore(add(headStart, 64), and(value2, 0xff))\n        mstore(add(headStart, 96), sub(tail_2, headStart))\n        tail := abi_encode_string(value3, tail_2)\n        mstore(add(headStart, 128), and(value4, sub(shl(160, 1), 1)))\n    }\n    function abi_encode_tuple_t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"Pausable: not paused\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7885d1d076c7cb06968a199289d2d58ec4ab4a669ff082350b4910edd50058db__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 25)\n        mstore(add(headStart, 64), \"Identity is not verified.\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_fadaaa2b439502f5d6528c916a36fb7325f021fb36a235fdabb96350c3d44dd8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 23)\n        mstore(add(headStart, 64), \"Compliance not followed\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_encode_tuple_t_stringliteral_79f07542aa3c1495c3697dc03cda6d93f53c96c4590f84c59ebcb420f5f0ee98__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 20)\n        mstore(add(headStart, 64), \"no tokens to recover\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_bytes32_t_rational_1_by_1__to_t_bytes32_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n    {\n        tail := add(headStart, 64)\n        mstore(headStart, value0)\n        mstore(add(headStart, 32), value1)\n    }\n    function abi_decode_tuple_t_uint16_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, 0xffff))) { revert(0, 0) }\n        value0 := value\n    }\n    function abi_encode_tuple_t_address_t_contract$_IIdentity_$1743_t_uint16__to_t_address_t_address_t_uint16__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, 0xffff))\n    }\n    function abi_encode_tuple_t_address_t_address_t_address__to_t_address_t_address_t_address__fromStack_reversed(headStart, value2, value1, value0) -> tail\n    {\n        tail := add(headStart, 96)\n        let _1 := sub(shl(160, 1), 1)\n        mstore(headStart, and(value0, _1))\n        mstore(add(headStart, 32), and(value1, _1))\n        mstore(add(headStart, 64), and(value2, _1))\n    }\n    function abi_encode_tuple_t_stringliteral_7fa31a753f0812c7ef0f752524a300c5cddee17825e6c8ff6ef207e358e92664__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 21)\n        mstore(add(headStart, 64), \"Recovery not possible\")\n        tail := add(headStart, 96)\n    }\n    function clean_up_bytearray_end_slots_string_storage(array, len, startIndex)\n    {\n        if gt(len, 31)\n        {\n            let _1 := 0\n            mstore(_1, array)\n            let data := keccak256(_1, 0x20)\n            let deleteStart := add(data, shr(5, add(startIndex, 31)))\n            if lt(startIndex, 0x20) { deleteStart := data }\n            let _2 := add(data, shr(5, add(len, 31)))\n            let start := deleteStart\n            for { } lt(start, _2) { start := add(start, 1) }\n            { sstore(start, _1) }\n        }\n    }\n    function extract_used_part_and_set_length_of_short_byte_array(data, len) -> used\n    {\n        used := or(and(data, not(shr(shl(3, len), not(0)))), shl(1, len))\n    }\n    function copy_byte_array_to_storage_from_t_string_calldata_ptr_to_t_string_storage(slot, src, len)\n    {\n        if gt(len, sub(shl(64, 1), 1)) { panic_error_0x41() }\n        clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), len)\n        let srcOffset := 0\n        switch gt(len, 31)\n        case 1 {\n            let loopEnd := and(len, not(31))\n            let dstPtr := array_dataslot_string_storage(slot)\n            let i := srcOffset\n            for { } lt(i, loopEnd) { i := add(i, 0x20) }\n            {\n                sstore(dstPtr, calldataload(add(src, srcOffset)))\n                dstPtr := add(dstPtr, 1)\n                srcOffset := add(srcOffset, 0x20)\n            }\n            if lt(loopEnd, len)\n            {\n                sstore(dstPtr, and(calldataload(add(src, srcOffset)), not(shr(and(shl(3, len), 248), not(0)))))\n            }\n            sstore(slot, add(shl(1, len), 1))\n        }\n        default {\n            let value := 0\n            if len\n            {\n                value := calldataload(add(src, srcOffset))\n            }\n            sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, len))\n        }\n    }\n    function abi_encode_tuple_t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 38)\n        mstore(add(headStart, 64), \"Ownable: new owner is the zero a\")\n        mstore(add(headStart, 96), \"ddress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 46)\n        mstore(add(headStart, 64), \"Initializable: contract is alrea\")\n        mstore(add(headStart, 96), \"dy initialized\")\n        tail := add(headStart, 128)\n    }\n    function copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage(slot, src)\n    {\n        let newLen := mload(src)\n        if gt(newLen, sub(shl(64, 1), 1)) { panic_error_0x41() }\n        clean_up_bytearray_end_slots_string_storage(slot, extract_byte_array_length(sload(slot)), newLen)\n        let srcOffset := 0\n        let srcOffset_1 := 0x20\n        srcOffset := srcOffset_1\n        switch gt(newLen, 31)\n        case 1 {\n            let loopEnd := and(newLen, not(31))\n            let dstPtr := array_dataslot_string_storage(slot)\n            let i := 0\n            for { } lt(i, loopEnd) { i := add(i, srcOffset_1) }\n            {\n                sstore(dstPtr, mload(add(src, srcOffset)))\n                dstPtr := add(dstPtr, 1)\n                srcOffset := add(srcOffset, srcOffset_1)\n            }\n            if lt(loopEnd, newLen)\n            {\n                let lastValue := mload(add(src, srcOffset))\n                sstore(dstPtr, and(lastValue, not(shr(and(shl(3, newLen), 248), not(0)))))\n            }\n            sstore(slot, add(shl(1, newLen), 1))\n        }\n        default {\n            let value := 0\n            if newLen\n            {\n                value := mload(add(src, srcOffset))\n            }\n            sstore(slot, extract_used_part_and_set_length_of_short_byte_array(value, newLen))\n        }\n    }\n    function abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n    {\n        tail := add(headStart, 32)\n        mstore(headStart, and(value0, 0xff))\n    }\n    function abi_encode_tuple_t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 36)\n        mstore(add(headStart, 64), \"ERC20: approve from the zero add\")\n        mstore(add(headStart, 96), \"ress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"ERC20: approve to the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_9d214fa89563f4e6456a3929327e54500ea1cde2c0ba9fb2035ec106190d682f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 34)\n        mstore(add(headStart, 64), \"Roles: account is the zero addre\")\n        mstore(add(headStart, 96), \"ss\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 37)\n        mstore(add(headStart, 64), \"ERC20: transfer from the zero ad\")\n        mstore(add(headStart, 96), \"dress\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 35)\n        mstore(add(headStart, 64), \"ERC20: transfer to the zero addr\")\n        mstore(add(headStart, 96), \"ess\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 32)\n        mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"ERC20: mint to the zero address\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_0f76c3a3e97a37fcdff532c2741c10933ebf2b769d5475388e30ae4f7155f13a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 31)\n        mstore(add(headStart, 64), \"Roles: account already has role\")\n        tail := add(headStart, 96)\n    }\n    function abi_encode_tuple_t_stringliteral_7bd893145ac435f339bb7c288622d270324b7033b011f693aca172f5cbc3c257__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"Roles: account does not have rol\")\n        mstore(add(headStart, 96), \"e\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 33)\n        mstore(add(headStart, 64), \"ERC20: burn from the zero addres\")\n        mstore(add(headStart, 96), \"s\")\n        tail := add(headStart, 128)\n    }\n    function abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n    {\n        mstore(headStart, 32)\n        mstore(add(headStart, 32), 43)\n        mstore(add(headStart, 64), \"Initializable: contract is not i\")\n        mstore(add(headStart, 96), \"nitializing\")\n        tail := add(headStart, 128)\n    }\n}",
      "id": 54,
      "language": "Yul",
      "name": "#utility.yul"
    }
  ],
  "sourceMap": "1532:17783:53:-:0;;;1803:33:52;;;-1:-1:-1;;1803:33:52;;;1532:17783:53;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "1532:17783:53:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6987:96;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3967:170;;;;;;:::i;:::-;;:::i;:::-;;;1269:14:54;;1262:22;1244:41;;1232:2;1217:18;3967:170:53;1104:187:54;15505:381:53;;;;;;:::i;:::-;;:::i;:::-;;10406:124;10502:21;;;;;-1:-1:-1;;;;;10502:21:53;10406:124;;;;;;;:::i;8778:138::-;;;;;;:::i;:::-;-1:-1:-1;;;;;8883:26:53;8857:7;8883:26;;;:12;:26;;;;;;;8778:138;;;;1867:25:54;;;1855:2;1840:18;8778:138:53;1721:177:54;3410:100:53;3491:12;;3410:100;;15187:249;;;;;;:::i;:::-;;:::i;16291:344::-;;;;;;:::i;:::-;;:::i;1570:103:44:-;;;;;;:::i;:::-;;:::i;11493:687:53:-;;;;;;:::i;:::-;;:::i;6837:96::-;6913:13;;6837:96;;6913:13;;;;3525:36:54;;3513:2;3498:18;6837:96:53;3383:184:54;4203:217:53;;;;;;:::i;:::-;;:::i;8164:222::-;;;;;;:::i;:::-;;:::i;10211:129::-;;;:::i;13371:337::-;;;;;;:::i;:::-;;:::i;13012:305::-;;;;;;:::i;:::-;;:::i;16711:264::-;;;;;;:::i;:::-;;:::i;14621:230::-;;;;;;:::i;:::-;;:::i;18824:134::-;;;;;;:::i;:::-;;:::i;7455:103::-;7538:13;;;;;;;;;;;;-1:-1:-1;;;7538:13:53;;;;7455:103;;8442:91;8515:11;;;;8442:91;;19207:106;;;;;;:::i;:::-;;:::i;10590:::-;10674:15;;-1:-1:-1;;;;;10674:15:53;10590:106;;13767:209;;;;;;:::i;:::-;;:::i;3569:127::-;;;;;;:::i;:::-;;:::i;2071:101:9:-;;;:::i;10027:127:53:-;;;:::i;1679:120:44:-;;;;;;:::i;:::-;;:::i;10759:217:53:-;;;;;;:::i;:::-;;:::i;1441:85:9:-;;;:::i;17562:1180:53:-;;;;;;:::i;:::-;;:::i;7298:100::-;;;:::i;1805:128:44:-;;;;;;:::i;:::-;;:::i;14030:532:53:-;;;;;;:::i;:::-;;:::i;12244:699::-;;;;;;:::i;:::-;;:::i;4486:225::-;;;;;;:::i;:::-;;:::i;9392:580::-;;;;;;:::i;:::-;;:::i;7142:100::-;7221:14;;;;;-1:-1:-1;;;;;7221:14:53;7142:100;;19031;;;;;;:::i;:::-;;:::i;7884:218::-;;;;;;:::i;:::-;;:::i;7615:210::-;;;;;;:::i;:::-;;:::i;14917:199::-;;;;;;:::i;:::-;;:::i;17044:216::-;;;;;;:::i;:::-;;:::i;3755:155::-;;;;;;:::i;:::-;-1:-1:-1;;;;;3874:19:53;;;3848:7;3874:19;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;3755:155;8591:122;;;;;;:::i;:::-;-1:-1:-1;;;;;8686:20:53;8663:4;8686:20;;;:6;:20;;;;;;;;;8591:122;2321:198:9;;;;;;:::i;:::-;;:::i;17323:174:53:-;;;;;;:::i;:::-;;:::i;2270:707::-;;;;;;:::i;:::-;;:::i;15960:260::-;;;;;;:::i;:::-;;:::i;6987:96::-;7035:13;7067:9;7060:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6987:96;:::o;3967:170::-;4054:4;4070:39;4079:10;4091:8;4101:7;4070:8;:39::i;:::-;-1:-1:-1;4126:4:53;3967:170;;;;;:::o;15505:381::-;1476:19:44;1484:10;1476:7;:19::i;:::-;1468:78;;;;-1:-1:-1;;;1468:78:44;;;;;;;:::i;:::-;;;;;;;;;15609:15:53::1;15627:23;15637:12;15627:9;:23::i;:::-;-1:-1:-1::0;;;;;15679:26:53;::::1;;::::0;;;:12:::1;:26;::::0;;;;;15609:41;;-1:-1:-1;15679:36:53::1;::::0;15708:7;;15679:36:::1;:::i;:::-;15668:7;:47;;15660:92;;;::::0;-1:-1:-1;;;15660:92:53;;10573:2:54;15660:92:53::1;::::0;::::1;10555:21:54::0;;;10592:18;;;10585:30;10651:34;10631:18;;;10624:62;10703:18;;15660:92:53::1;10371:356:54::0;15660:92:53::1;-1:-1:-1::0;;;;;15791:26:53;::::1;;::::0;;;:12:::1;:26;::::0;;;;;:38:::1;::::0;15821:7;;15791:38:::1;:::i;:::-;-1:-1:-1::0;;;;;15762:26:53;::::1;;::::0;;;:12:::1;:26;::::0;;;;;;:67;;;;15844:35;;::::1;::::0;::::1;::::0;15871:7;1867:25:54;;1855:2;1840:18;;1721:177;15844:35:53::1;;;;;;;;15599:287;15505:381:::0;;:::o;15187:249::-;15311:9;15306:124;15326:25;;;15306:124;;;15372:47;15389:14;;15404:1;15389:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;15408:7;;15416:1;15408:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;15372:47::-;15353:3;;;;:::i;:::-;;;;15306:124;;;;15187:249;;;;:::o;16291:344::-;1476:19:44;1484:10;1476:7;:19::i;:::-;1468:78;;;;-1:-1:-1;;;1468:78:44;;;;;;;:::i;:::-;-1:-1:-1;;;;;16405:26:53;::::1;;::::0;;;:12:::1;:26;::::0;;;;;:37;-1:-1:-1;16405:37:53::1;16397:102;;;::::0;-1:-1:-1;;;16397:102:53;;11452:2:54;16397:102:53::1;::::0;::::1;11434:21:54::0;11491:2;11471:18;;;11464:30;11530:34;11510:18;;;11503:62;-1:-1:-1;;;11581:18:54;;;11574:50;11641:19;;16397:102:53::1;11250:416:54::0;16397:102:53::1;-1:-1:-1::0;;;;;16538:26:53;::::1;;::::0;;;:12:::1;:26;::::0;;;;;:38:::1;::::0;16568:7;;16538:38:::1;:::i;:::-;-1:-1:-1::0;;;;;16509:26:53;::::1;;::::0;;;:12:::1;:26;::::0;;;;;;:67;;;;16591:37;;-1:-1:-1;;;;;;;;;;;16591:37:53;::::1;::::0;16620:7;1867:25:54;;1855:2;1840:18;;1721:177;16591:37:53::1;;;;;;;;16291:344:::0;;:::o;1570:103:44:-;1624:4;1647:19;:7;1659:6;1647:11;:19::i;11493:687:53:-;3115:11;;11631:4;;3115:11;;3114:12;3106:41;;;;-1:-1:-1;;;3106:41:53;;;;;;;:::i;:::-;-1:-1:-1;;;;;11656:11:53;::::1;;::::0;;;:6:::1;:11;::::0;;;;;::::1;;11655:12;:30:::0;::::1;;;-1:-1:-1::0;;;;;;11672:13:53;::::1;;::::0;;;:6:::1;:13;::::0;;;;;::::1;;11671:14;11655:30;11647:59;;;;-1:-1:-1::0;;;11647:59:53::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11755:19:53;::::1;;::::0;;;:12:::1;:19;::::0;;;;;11735:16:::1;11768:5:::0;11735:9:::1;:16::i;:::-;:40;;;;:::i;:::-;11724:7;:51;;11716:84;;;;-1:-1:-1::0;;;11716:84:53::1;;;;;;;:::i;:::-;11814:21;::::0;:37:::1;::::0;-1:-1:-1;;;11814:37:53;;:21:::1;::::0;;::::1;-1:-1:-1::0;;;;;11814:21:53::1;::::0;:32:::1;::::0;:37:::1;::::0;11847:3;;11814:37:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:89;;;;-1:-1:-1::0;11855:15:53::1;::::0;:48:::1;::::0;-1:-1:-1;;;11855:48:53;;-1:-1:-1;;;;;11855:15:53;;::::1;::::0;:27:::1;::::0;:48:::1;::::0;11883:5;;11890:3;;11895:7;;11855:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11810:322;;;11919:15;::::0;:48:::1;::::0;-1:-1:-1;;;11919:48:53;;-1:-1:-1;;;;;11919:15:53;;::::1;::::0;:27:::1;::::0;:48:::1;::::0;11947:5;;11954:3;;11959:7;;11919:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11981:30;11991:5;11998:3;12003:7;11981:9;:30::i;:::-;-1:-1:-1::0;;;;;12053:18:53;::::1;;::::0;;;:11:::1;:18;::::0;;;;;;;12041:10:::1;12053:30:::0;;;;;;;;;12025:71:::1;::::0;12034:5;;12053:42:::1;::::0;12087:7;;12053:42:::1;:::i;:::-;12025:8;:71::i;:::-;-1:-1:-1::0;12117:4:53::1;12110:11;;11810:322;12142:31;::::0;-1:-1:-1;;;12142:31:53;;13675:2:54;12142:31:53::1;::::0;::::1;13657:21:54::0;13714:2;13694:18;;;13687:30;-1:-1:-1;;;13733:18:54;;;13726:51;13794:18;;12142:31:53::1;13473:345:54::0;3157:1:53::1;11493:687:::0;;;;;:::o;4203:217::-;4320:10;4295:4;4342:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;4342:33:53;;;;;;;;;;4295:4;;4311:81;;4332:8;;4342:49;;4379:11;;4342:49;:::i;8164:222::-;1334:13:9;:11;:13::i;:::-;8244:14:53::1;:27:::0;;-1:-1:-1;;;;;8244:27:53;;::::1;;::::0;;::::1;-1:-1:-1::0;;;;;;8244:27:53;::::1;::::0;::::1;::::0;;;;8349:13:::1;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;8349:13:53::1;::::0;::::1;::::0;8286:93;;-1:-1:-1;;;;;;;;;;;8286:93:53;::::1;::::0;8310:9:::1;::::0;8321:11:::1;::::0;8334:13:::1;::::0;;;;;;;;;;;;8364:14;::::1;;::::0;8286:93:::1;:::i;:::-;;;;;;;;8164:222:::0;:::o;10211:129::-;1476:19:44;1484:10;1476:7;:19::i;:::-;1468:78;;;;-1:-1:-1;;;1468:78:44;;;;;;;:::i;:::-;3295:11:53::1;::::0;::::1;;3287:44;;;::::0;-1:-1:-1;;;3287:44:53;;15667:2:54;3287:44:53::1;::::0;::::1;15649:21:54::0;15706:2;15686:18;;;15679:30;-1:-1:-1;;;15725:18:54;;;15718:50;15785:18;;3287:44:53::1;15465:344:54::0;3287:44:53::1;10279:11:::2;:19:::0;;-1:-1:-1;;10279:19:53::2;::::0;;10313:20:::2;::::0;::::2;::::0;::::2;::::0;10322:10:::2;::::0;10313:20:::2;:::i;:::-;;;;;;;;10211:129::o:0;13371:337::-;1476:19:44;1484:10;1476:7;:19::i;:::-;1468:78;;;;-1:-1:-1;;;1468:78:44;;;;;;;:::i;:::-;13459:21:53::1;::::0;:37:::1;::::0;-1:-1:-1;;;13459:37:53;;:21:::1;::::0;;::::1;-1:-1:-1::0;;;;;13459:21:53::1;::::0;:32:::1;::::0;:37:::1;::::0;13492:3;;13459:37:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13451:75;;;::::0;-1:-1:-1;;;13451:75:53;;16016:2:54;13451:75:53::1;::::0;::::1;15998:21:54::0;16055:2;16035:18;;;16028:30;-1:-1:-1;;;16074:18:54;;;16067:55;16139:18;;13451:75:53::1;15814:349:54::0;13451:75:53::1;13544:15;::::0;:53:::1;::::0;-1:-1:-1;;;13544:53:53;;-1:-1:-1;;;;;13544:15:53;;::::1;::::0;:27:::1;::::0;:53:::1;::::0;13572:10:::1;::::0;13584:3;;13589:7;;13544:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13536:89;;;::::0;-1:-1:-1;;;13536:89:53;;16370:2:54;13536:89:53::1;::::0;::::1;16352:21:54::0;16409:2;16389:18;;;16382:30;-1:-1:-1;;;16428:18:54;;;16421:53;16491:18;;13536:89:53::1;16168:347:54::0;13536:89:53::1;13635:19;13641:3;13646:7;13635:5;:19::i;:::-;13664:15;::::0;:37:::1;::::0;-1:-1:-1;;;13664:37:53;;-1:-1:-1;;;;;13664:15:53;;::::1;::::0;:23:::1;::::0;:37:::1;::::0;13688:3;;13693:7;;13664:37:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13371:337:::0;;:::o;13012:305::-;13191:9;13186:125;13206:20;;;13186:125;;;13247:53;13262:9;;13272:1;13262:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;13276:7;;13284:1;13276:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;13288:8;;13297:1;13288:11;;;;;;;:::i;:::-;;;;;;;13247:14;:53::i;:::-;-1:-1:-1;13228:3:53;;;;:::i;:::-;;;;13186:125;;;;13012:305;;;;;;:::o;16711:264::-;16844:9;16839:130;16859:25;;;16839:130;;;16905:53;16927:14;;16942:1;16927:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16946:8;;16955:1;16946:11;;;;;;;:::i;:::-;;;;;;;16905:21;:53::i;:::-;16886:3;;;;:::i;:::-;;;;16839:130;;14621:230;14737:9;14732:113;14752:25;;;14732:113;;;14798:36;14803:14;;14818:1;14803:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;14822:8;;14831:1;14822:11;;;;;;;:::i;:::-;;;;;;;14798:4;:36::i;:::-;14779:3;;;;:::i;:::-;;;;14732:113;;18824:134;1334:13:9;:11;:13::i;:::-;18923:28:53::1;18941:9;18923:17;:28::i;:::-;18824:134:::0;:::o;19207:106::-;19287:19;19299:6;19287:11;:19::i;13767:209::-;13876:9;13871:99;13891:18;;;13871:99;;;13930:29;13935:7;;13943:1;13935:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;13947:8;;13956:1;13947:11;;;;;;;:::i;:::-;;;;;;;13930:4;:29::i;:::-;13911:3;;;;:::i;:::-;;;;13871:99;;3569:127;-1:-1:-1;;;;;3666:23:53;3640:7;3666:23;;;:9;:23;;;;;;;3569:127::o;2071:101:9:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;10027:127:53:-;1476:19:44;1484:10;1476:7;:19::i;:::-;1468:78;;;;-1:-1:-1;;;1468:78:44;;;;;;;:::i;:::-;3115:11:53::1;::::0;::::1;;3114:12;3106:41;;;;-1:-1:-1::0;;;3106:41:53::1;;;;;;;:::i;:::-;10096:11:::2;:18:::0;;-1:-1:-1;;10096:18:53::2;10110:4;10096:18;::::0;;10129::::2;::::0;::::2;::::0;::::2;::::0;10136:10:::2;::::0;10129:18:::2;:::i;1679:120:44:-:0;1334:13:9;:11;:13::i;:::-;1740:19:44::1;:7;1752:6:::0;1740:11:::1;:19::i;:::-;1774:18;::::0;-1:-1:-1;;;;;1774:18:44;::::1;::::0;::::1;::::0;;;::::1;1679:120:::0;:::o;10759:217:53:-;10872:9;10867:103;10887:18;;;10867:103;;;10926:33;10935:7;;10943:1;10935:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;10947:8;;10956:1;10947:11;;;;;;;:::i;:::-;;;;;;;10926:8;:33::i;:::-;-1:-1:-1;10907:3:53;;;;:::i;:::-;;;;10867:103;;1441:85:9;1513:6;;-1:-1:-1;;;;;1513:6:9;;1441:85::o;17562:1180:53:-;17723:4;1476:19:44;1484:10;1476:7;:19::i;:::-;1468:78;;;;-1:-1:-1;;;1468:78:44;;;;;;;:::i;:::-;17747:22:53::1;17757:11;17747:9;:22::i;:::-;17773:1;17747:27:::0;17739:60:::1;;;::::0;-1:-1:-1;;;17739:60:53;;17001:2:54;17739:60:53::1;::::0;::::1;16983:21:54::0;17040:2;17020:18;;;17013:30;-1:-1:-1;;;17059:18:54;;;17052:50;17119:18;;17739:60:53::1;16799:344:54::0;17739:60:53::1;17896:22;::::0;17842:18;;17809:20:::1;::::0;17896:22:::1;::::0;17907:10;;17896:22:::1;;;:::i;:::-;;::::0;;;;::::1;-1:-1:-1::0;;17896:22:53;;;;;;;17886:33;;17896:22:::1;17886:33:::0;;::::1;::::0;-1:-1:-1;;;17933:33:53;;::::1;::::0;::::1;17330:25:54::0;;;17964:1:53::1;17371:18:54::0;;;17364:34;17886:33:53;-1:-1:-1;;;;;;17933:24:53;::::1;::::0;::::1;::::0;17303:18:54;;17933:33:53::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17929:766;;;17982:22;18007;18017:11;18007:9;:22::i;:::-;-1:-1:-1::0;;;;;18067:25:53;;::::1;18043:21;18067:25:::0;;;:12:::1;:25;::::0;;;;;;;18106:21:::1;::::0;18169:50;;-1:-1:-1;;;18169:50:53;;17982:47;;-1:-1:-1;18067:25:53;18106:21:::1;::::0;;::::1;::::0;;::::1;::::0;:38:::1;::::0;18145:10;;18157;;18106:21;;18169:37:::1;::::0;:50:::1;::::0;18080:11;;18169:50:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18106:114;::::0;-1:-1:-1;;;;;;18106:114:53::1;::::0;;;;;;-1:-1:-1;;;;;17964:15:54;;;18106:114:53::1;::::0;::::1;17946:34:54::0;18016:15;;;;17996:18;;;17989:43;18080:6;18068:19;18048:18;;;18041:47;17881:18;;18106:114:53::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;18234:21:53::1;::::0;:49:::1;::::0;-1:-1:-1;;;18234:49:53;;:21:::1;::::0;;::::1;-1:-1:-1::0;;;;;18234:21:53::1;::::0;-1:-1:-1;18234:36:53::1;::::0;-1:-1:-1;18234:49:53::1;::::0;18271:11;;18234:49:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18297:55;18312:11;18325:10;18337:14;18297;:55::i;:::-;-1:-1:-1::0;18370:17:53;;18366:102:::1;;18407:46;18427:10;18439:13;18407:19;:46::i;:::-;-1:-1:-1::0;;;;;18485:19:53;::::1;;::::0;;;:6:::1;:19;::::0;;;;;::::1;;:27;;:19:::0;:27;18481:100:::1;;18532:34;18549:10;18561:4;18532:16;:34::i;:::-;18599:60;::::0;;-1:-1:-1;;;;;18357:15:54;;;18339:34;;18409:15;;;18404:2;18389:18;;18382:43;18461:15;;18441:18;;;18434:43;18599:60:53;;::::1;::::0;;;;18289:2:54;18599:60:53;;::::1;18680:4;18673:11;;;;;;;;17929:766;18704:31;::::0;-1:-1:-1;;;18704:31:53;;18690:2:54;18704:31:53::1;::::0;::::1;18672:21:54::0;18729:2;18709:18;;;18702:30;-1:-1:-1;;;18748:18:54;;;18741:51;18809:18;;18704:31:53::1;18488:345:54::0;7298:100:53;7348:13;7380:11;7373:18;;;;;:::i;1805:128:44:-;1334:13:9;:11;:13::i;:::-;1869:22:44::1;:7;1884:6:::0;1869:14:::1;:22::i;:::-;1906:20;::::0;-1:-1:-1;;;;;1906:20:44;::::1;::::0;::::1;::::0;;;::::1;1805:128:::0;:::o;14030:532:53:-;1476:19:44;1484:10;1476:7;:19::i;:::-;1468:78;;;;-1:-1:-1;;;1468:78:44;;;;;;;:::i;:::-;-1:-1:-1;;;;;14167:26:53;::::1;14119:19;14167:26:::0;;;:12:::1;:26;::::0;;;;;14141:23:::1;14180:12:::0;14141:9:::1;:23::i;:::-;:52;;;;:::i;:::-;14119:74;;14217:11;14207:7;:21;14203:257;;;14244:24;14271:23;14282:11:::0;14271:7;:23:::1;:::i;:::-;-1:-1:-1::0;;;;;14337:26:53;::::1;;::::0;;;:12:::1;:26;::::0;;;;;14244:50;;-1:-1:-1;14337:47:53::1;::::0;14244:50;;14337:47:::1;:::i;:::-;-1:-1:-1::0;;;;;14308:26:53;::::1;;::::0;;;:12:::1;:26;::::0;;;;;;:76;;;;14403:46;;-1:-1:-1;;;;;;;;;;;14403:46:53;::::1;::::0;14432:16;1867:25:54;;1855:2;1840:18;;1721:177;14403:46:53::1;;;;;;;;14230:230;14203:257;14469:28;14475:12;14489:7;14469:5;:28::i;:::-;14507:15;::::0;:48:::1;::::0;-1:-1:-1;;;14507:48:53;;-1:-1:-1;;;;;14507:15:53;;::::1;::::0;:25:::1;::::0;:48:::1;::::0;14533:12;;14547:7;;14507:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;12244:699:::0;12378:4;1476:19:44;1484:10;1476:7;:19::i;:::-;1468:78;;;;-1:-1:-1;;;1468:78:44;;;;;;;:::i;:::-;-1:-1:-1;;;;;12436:19:53;::::1;12394;12436::::0;;;:12:::1;:19;::::0;;;;;12416:16:::1;12449:5:::0;12416:9:::1;:16::i;:::-;:40;;;;:::i;:::-;12394:62;;12480:11;12470:7;:21;12466:236;;;12507:24;12534:23;12545:11:::0;12534:7;:23:::1;:::i;:::-;-1:-1:-1::0;;;;;12593:19:53;::::1;;::::0;;;:12:::1;:19;::::0;;;;;12507:50;;-1:-1:-1;12593:40:53::1;::::0;12507:50;;12593:40:::1;:::i;:::-;-1:-1:-1::0;;;;;12571:19:53;::::1;;::::0;;;:12:::1;:19;::::0;;;;;;:62;;;;12652:39;;-1:-1:-1;;;;;;;;;;;12652:39:53;::::1;::::0;12674:16;1867:25:54;;1855:2;1840:18;;1721:177;12652:39:53::1;;;;;;;;12493:209;12466:236;12715:21;::::0;:37:::1;::::0;-1:-1:-1;;;12715:37:53;;:21:::1;::::0;;::::1;-1:-1:-1::0;;;;;12715:21:53::1;::::0;:32:::1;::::0;:37:::1;::::0;12748:3;;12715:37:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12711:185;;;12768:15;::::0;:48:::1;::::0;-1:-1:-1;;;12768:48:53;;-1:-1:-1;;;;;12768:15:53;;::::1;::::0;:27:::1;::::0;:48:::1;::::0;12796:5;;12803:3;;12808:7;;12768:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;12830:30;12840:5;12847:3;12852:7;12830:9;:30::i;:::-;12881:4;12874:11;;;;;4486:225:::0;4608:10;4583:4;4630:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;4630:33:53;;;;;;;;;;4583:4;;4599:84;;4620:8;;4630:52;;4666:16;;4630:52;:::i;9392:580::-;3115:11;;9479:4;;3115:11;;3114:12;3106:41;;;;-1:-1:-1;;;3106:41:53;;;;;;;:::i;:::-;-1:-1:-1;;;;;9504:11:53;::::1;;::::0;;;:6:::1;:11;::::0;;;;;::::1;;9503:12;:35:::0;::::1;;;-1:-1:-1::0;9527:10:53::1;9520:18;::::0;;;:6:::1;:18;::::0;;;;;::::1;;9519:19;9503:35;9495:64;;;;-1:-1:-1::0;;;9495:64:53::1;;;;;;;:::i;:::-;9626:10;9613:24;::::0;;;:12:::1;:24;::::0;;;;;;9588:21:::1;::::0;:9:::1;:21::i;:::-;:50;;;;:::i;:::-;9577:7;:61;;9569:94;;;;-1:-1:-1::0;;;9569:94:53::1;;;;;;;:::i;:::-;9677:21;::::0;:37:::1;::::0;-1:-1:-1;;;9677:37:53;;:21:::1;::::0;;::::1;-1:-1:-1::0;;;;;9677:21:53::1;::::0;:32:::1;::::0;:37:::1;::::0;9710:3;;9677:37:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:94;;;;-1:-1:-1::0;9718:15:53::1;::::0;:53:::1;::::0;-1:-1:-1;;;9718:53:53;;-1:-1:-1;;;;;9718:15:53;;::::1;::::0;:27:::1;::::0;:53:::1;::::0;9746:10:::1;::::0;9758:3;;9763:7;;9718:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9673:252;;;9787:15;::::0;:53:::1;::::0;-1:-1:-1;;;9787:53:53;;-1:-1:-1;;;;;9787:15:53;;::::1;::::0;:27:::1;::::0;:53:::1;::::0;9815:10:::1;::::0;9827:3;;9832:7;;9787:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;9854:35;9864:10;9876:3;9881:7;9854:9;:35::i;:::-;-1:-1:-1::0;9910:4:53::1;9903:11;;19031:100:::0;19108:16;19117:6;19108:8;:16::i;7884:218::-;1334:13:9;:11;:13::i;:::-;7966:11:53::1;:21;7980:7:::0;;7966:11;:21:::1;:::i;:::-;-1:-1:-1::0;8050:13:53::1;::::0;8065::::1;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;8065:13:53::1;::::0;::::1;::::0;8002:93;;-1:-1:-1;;;;;;;;;;;8002:93:53;::::1;::::0;8026:9:::1;::::0;8037:11:::1;::::0;8050:13:::1;::::0;::::1;::::0;8065;8050::::1;8080:14:::0;;::::1;-1:-1:-1::0;;;;;8080:14:53::1;::::0;8002:93:::1;:::i;:::-;;;;;;;;7884:218:::0;;:::o;7615:210::-;1334:13:9;:11;:13::i;:::-;7693:9:53::1;:17;7705:5:::0;;7693:9;:17:::1;:::i;14917:199::-:0;1476:19:44;1484:10;1476:7;:19::i;:::-;1468:78;;;;-1:-1:-1;;;1468:78:44;;;;;;;:::i;:::-;-1:-1:-1;;;;;15015:20:53;::::1;;::::0;;;:6:::1;:20;::::0;;;;;:30;;-1:-1:-1;;15015:30:53::1;::::0;::::1;;::::0;;::::1;::::0;;;15061:48;;15098:10:::1;::::0;15015:30;;15061:48:::1;::::0;::::1;14917:199:::0;;:::o;17044:216::-;1334:13:9;:11;:13::i;:::-;17138:21:53::1;:60:::0;;-1:-1:-1;;;;;;17138:60:53::1;;-1:-1:-1::0;;;;;17138:60:53;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;17213:40:::1;::::0;-1:-1:-1;;;;;;;;;;;17213:40:53;-1:-1:-1;;17213:40:53::1;17044:216:::0;:::o;2321:198:9:-;1334:13;:11;:13::i;:::-;-1:-1:-1;;;;;2409:22:9;::::1;2401:73;;;::::0;-1:-1:-1;;;2401:73:9;;20972:2:54;2401:73:9::1;::::0;::::1;20954:21:54::0;21011:2;20991:18;;;20984:30;21050:34;21030:18;;;21023:62;-1:-1:-1;;;21101:18:54;;;21094:36;21147:19;;2401:73:9::1;20770:402:54::0;2401:73:9::1;2484:28;2503:8;2484:18;:28::i;17323:174:53:-:0;1334:13:9;:11;:13::i;:::-;17405:15:53::1;:42:::0;;-1:-1:-1;;;;;;17405:42:53::1;-1:-1:-1::0;;;;;17405:42:53;::::1;::::0;;::::1;::::0;;;17462:28:::1;::::0;-1:-1:-1;;;;;;;;;;;17462:28:53;-1:-1:-1;;17462:28:53::1;17323:174:::0;:::o;2270:707::-;3111:19:10;3134:13;;;;;;3133:14;;3179:34;;;;-1:-1:-1;3197:12:10;;3212:1;3197:12;;;;:16;3179:34;3178:108;;;-1:-1:-1;3258:4:10;1476:19:11;:23;;;3219:66:10;;-1:-1:-1;3268:12:10;;;;;:17;3219:66;3157:201;;;;-1:-1:-1;;;3157:201:10;;21379:2:54;3157:201:10;;;21361:21:54;21418:2;21398:18;;;21391:30;21457:34;21437:18;;;21430:62;-1:-1:-1;;;21508:18:54;;;21501:44;21562:19;;3157:201:10;21177:410:54;3157:201:10;3368:12;:16;;-1:-1:-1;;3368:16:10;3383:1;3368:16;;;3394:65;;;;3428:13;:20;;-1:-1:-1;;3428:20:10;;;;;3394:65;2496:9:53::1;:17;2508:5:::0;2496:9;:17:::1;:::i;:::-;-1:-1:-1::0;2523:11:53::1;:21;2537:7:::0;2523:11;:21:::1;:::i;:::-;-1:-1:-1::0;2554:13:53::1;:25:::0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;2589:27:53;;;;2554:25:::1;-1:-1:-1::0;;;;;2589:27:53;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;2626:21:::1;:60:::0;;-1:-1:-1;;;;;;2626:60:53::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;2701:40:::1;::::0;-1:-1:-1;;;;;;;;;;;2701:40:53;-1:-1:-1;;2701:40:53::1;2751:15;:42:::0;;-1:-1:-1;;;;;;2751:42:53::1;-1:-1:-1::0;;;;;2751:42:53;::::1;::::0;;::::1;::::0;;;2808:28:::1;::::0;-1:-1:-1;;;;;;;;;;;2808:28:53;-1:-1:-1;;2808:28:53::1;2899:13;::::0;2914::::1;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;2914:13:53::1;::::0;::::1;::::0;2851:93;;-1:-1:-1;;;;;;;;;;;2851:93:53;::::1;::::0;2875:9:::1;::::0;2886:11:::1;::::0;2899:13:::1;::::0;::::1;::::0;2914;2899::::1;2929:14:::0;;::::1;-1:-1:-1::0;;;;;2929:14:53::1;::::0;2851:93:::1;:::i;:::-;;;;;;;;2954:16;:14;:16::i;:::-;3483:14:10::0;3479:99;;;3529:5;3513:21;;-1:-1:-1;;3513:21:10;;;3553:14;;-1:-1:-1;3525:36:54;;3553:14:10;;3513:2:54;3498:18;3553:14:10;;;;;;;3101:483;2270:707:53;;;;;;:::o;15960:260::-;16091:9;16086:128;16106:25;;;16086:128;;;16152:51;16172:14;;16187:1;16172:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16191:8;;16200:1;16191:11;;;;;;;:::i;:::-;;;;;;;16152:19;:51::i;:::-;16133:3;;;;:::i;:::-;;;;16086:128;;6205:381;-1:-1:-1;;;;;6339:20:53;;6331:69;;;;-1:-1:-1;;;6331:69:53;;23350:2:54;6331:69:53;;;23332:21:54;23389:2;23369:18;;;23362:30;23428:34;23408:18;;;23401:62;-1:-1:-1;;;23479:18:54;;;23472:34;23523:19;;6331:69:53;23148:400:54;6331:69:53;-1:-1:-1;;;;;6418:22:53;;6410:69;;;;-1:-1:-1;;;6410:69:53;;23755:2:54;6410:69:53;;;23737:21:54;23794:2;23774:18;;;23767:30;23833:34;23813:18;;;23806:62;-1:-1:-1;;;23884:18:54;;;23877:32;23926:19;;6410:69:53;23553:398:54;6410:69:53;-1:-1:-1;;;;;6490:19:53;;;;;;;:11;:19;;;;;;;;:29;;;;;;;;;;;;;:39;;;6544:35;;1867:25:54;;;6544:35:53;;1840:18:54;6544:35:53;;;;;;;;6205:381;;;:::o;815:200:50:-;887:4;-1:-1:-1;;;;;911:21:50;;903:68;;;;-1:-1:-1;;;903:68:50;;24158:2:54;903:68:50;;;24140:21:54;24197:2;24177:18;;;24170:30;24236:34;24216:18;;;24209:62;-1:-1:-1;;;24287:18:54;;;24280:32;24329:19;;903:68:50;23956:398:54;903:68:50;-1:-1:-1;;;;;;988:20:50;:11;:20;;;;;;;;;;;;;;;815:200::o;4765:475:53:-;-1:-1:-1;;;;;4894:19:53;;4886:69;;;;-1:-1:-1;;;4886:69:53;;24561:2:54;4886:69:53;;;24543:21:54;24600:2;24580:18;;;24573:30;24639:34;24619:18;;;24612:62;-1:-1:-1;;;24690:18:54;;;24683:35;24735:19;;4886:69:53;24359:401:54;4886:69:53;-1:-1:-1;;;;;4973:17:53;;4965:65;;;;-1:-1:-1;;;4965:65:53;;24967:2:54;4965:65:53;;;24949:21:54;25006:2;24986:18;;;24979:30;25045:34;25025:18;;;25018:62;-1:-1:-1;;;25096:18:54;;;25089:33;25139:19;;4965:65:53;24765:399:54;4965:65:53;-1:-1:-1;;;;;5112:16:53;;;;;;:9;:16;;;;;;:26;;5131:7;;5112:26;:::i;:::-;-1:-1:-1;;;;;5093:16:53;;;;;;;:9;:16;;;;;;:45;;;;5165:14;;;;;;;:24;;5182:7;;5165:24;:::i;:::-;-1:-1:-1;;;;;5148:14:53;;;;;;;:9;:14;;;;;;;:41;;;;5204:29;;;;;;-1:-1:-1;;;;;;;;;;;5204:29:53;;;5225:7;1867:25:54;;1855:2;1840:18;;1721:177;1599:130:9;929:10:12;1662:7:9;:5;:7::i;:::-;-1:-1:-1;;;;;1662:23:9;;1654:68;;;;-1:-1:-1;;;1654:68:9;;25371:2:54;1654:68:9;;;25353:21:54;;;25390:18;;;25383:30;25449:34;25429:18;;;25422:62;25501:18;;1654:68:9;25169:356:54;5294:399:53;-1:-1:-1;;;;;5383:26:53;;5375:70;;;;-1:-1:-1;;;5375:70:53;;25732:2:54;5375:70:53;;;25714:21:54;25771:2;25751:18;;;25744:30;25810:33;25790:18;;;25783:61;25861:18;;5375:70:53;25530:355:54;5375:70:53;5552:7;5537:12;;:22;;;;:::i;:::-;5522:12;:37;-1:-1:-1;;;;;5595:23:53;;;;;;:9;:23;;;;;;:33;;5621:7;;5595:33;:::i;:::-;-1:-1:-1;;;;;5569:23:53;;;;;;:9;:23;;;;;;:59;;;;5643:43;;5569:23;;;-1:-1:-1;;;;;;;;;;;5643:43:53;;;5678:7;1867:25:54;;1855:2;1840:18;;1721:177;5643:43:53;;;;;;;;5294:399;;:::o;2673:187:9:-;2765:6;;;-1:-1:-1;;;;;2781:17:9;;;-1:-1:-1;;;;;;2781:17:9;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;296:175:50:-;373:18;377:4;383:7;373:3;:18::i;:::-;372:19;364:63;;;;-1:-1:-1;;;364:63:50;;26092:2:54;364:63:50;;;26074:21:54;26131:2;26111:18;;;26104:30;26170:33;26150:18;;;26143:61;26221:18;;364:63:50;25890:355:54;364:63:50;-1:-1:-1;;;;;437:20:50;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;437:27:50;460:4;437:27;;;296:175::o;546:180::-;625:18;629:4;635:7;625:3;:18::i;:::-;617:64;;;;-1:-1:-1;;;617:64:50;;26452:2:54;617:64:50;;;26434:21:54;26491:2;26471:18;;;26464:30;26530:34;26510:18;;;26503:62;-1:-1:-1;;;26581:18:54;;;26574:31;26622:19;;617:64:50;26250:397:54;617:64:50;-1:-1:-1;;;;;691:20:50;714:5;691:20;;;;;;;;;;;:28;;-1:-1:-1;;691:28:50;;;546:180::o;5747:401:53:-;-1:-1:-1;;;;;5836:26:53;;5828:72;;;;-1:-1:-1;;;5828:72:53;;26854:2:54;5828:72:53;;;26836:21:54;26893:2;26873:18;;;26866:30;26932:34;26912:18;;;26905:62;-1:-1:-1;;;26983:18:54;;;26976:31;27024:19;;5828:72:53;26652:397:54;5828:72:53;-1:-1:-1;;;;;6003:23:53;;;;;;:9;:23;;;;;;:33;;6029:7;;6003:33;:::i;:::-;-1:-1:-1;;;;;5977:23:53;;;;;;:9;:23;;;;;:59;6061:12;;:22;;6076:7;;6061:22;:::i;:::-;6046:12;:37;6098:43;;1867:25:54;;;6129:1:53;;-1:-1:-1;;;;;6098:43:53;;;-1:-1:-1;;;;;;;;;;;6098:43:53;1855:2:54;1840:18;6098:43:53;1721:177:54;1003:95:9;4910:13:10;;;;;;;4902:69;;;;-1:-1:-1;;;4902:69:10;;;;;;;:::i;:::-;1065:26:9::1;:24;:26::i;6655:124:53:-:0;;;;:::o;1104:111:9:-;4910:13:10;;;;;;;4902:69;;;;-1:-1:-1;;;4902:69:10;;;;;;;:::i;:::-;1176:32:9::1;929:10:12::0;1176:18:9::1;:32::i;14:423:54:-:0;56:3;94:5;88:12;121:6;116:3;109:19;146:1;156:162;170:6;167:1;164:13;156:162;;;232:4;288:13;;;284:22;;278:29;260:11;;;256:20;;249:59;185:12;156:162;;;160:3;363:1;356:4;347:6;342:3;338:16;334:27;327:38;426:4;419:2;415:7;410:2;402:6;398:15;394:29;389:3;385:39;381:50;374:57;;;14:423;;;;:::o;442:220::-;591:2;580:9;573:21;554:4;611:45;652:2;641:9;637:18;629:6;611:45;:::i;667:173::-;735:20;;-1:-1:-1;;;;;784:31:54;;774:42;;764:70;;830:1;827;820:12;764:70;667:173;;;:::o;845:254::-;913:6;921;974:2;962:9;953:7;949:23;945:32;942:52;;;990:1;987;980:12;942:52;1013:29;1032:9;1013:29;:::i;:::-;1003:39;1089:2;1074:18;;;;1061:32;;-1:-1:-1;;;845:254:54:o;1296:229::-;-1:-1:-1;;;;;1486:32:54;;;;1468:51;;1456:2;1441:18;;1296:229::o;1530:186::-;1589:6;1642:2;1630:9;1621:7;1617:23;1613:32;1610:52;;;1658:1;1655;1648:12;1610:52;1681:29;1700:9;1681:29;:::i;1903:367::-;1966:8;1976:6;2030:3;2023:4;2015:6;2011:17;2007:27;1997:55;;2048:1;2045;2038:12;1997:55;-1:-1:-1;2071:20:54;;-1:-1:-1;;;;;2103:30:54;;2100:50;;;2146:1;2143;2136:12;2100:50;2183:4;2175:6;2171:17;2159:29;;2243:3;2236:4;2226:6;2223:1;2219:14;2211:6;2207:27;2203:38;2200:47;2197:67;;;2260:1;2257;2250:12;2197:67;1903:367;;;;;:::o;2275:770::-;2394:6;2402;2410;2418;2471:2;2459:9;2450:7;2446:23;2442:32;2439:52;;;2487:1;2484;2477:12;2439:52;2514:23;;-1:-1:-1;;;;;2586:14:54;;;2583:34;;;2613:1;2610;2603:12;2583:34;2652:70;2714:7;2705:6;2694:9;2690:22;2652:70;:::i;:::-;2741:8;;-1:-1:-1;2626:96:54;-1:-1:-1;2829:2:54;2814:18;;2801:32;;-1:-1:-1;2845:16:54;;;2842:36;;;2874:1;2871;2864:12;2842:36;;2913:72;2977:7;2966:8;2955:9;2951:24;2913:72;:::i;:::-;2275:770;;;;-1:-1:-1;3004:8:54;-1:-1:-1;;;;2275:770:54:o;3050:328::-;3127:6;3135;3143;3196:2;3184:9;3175:7;3171:23;3167:32;3164:52;;;3212:1;3209;3202:12;3164:52;3235:29;3254:9;3235:29;:::i;:::-;3225:39;;3283:38;3317:2;3306:9;3302:18;3283:38;:::i;:::-;3273:48;;3368:2;3357:9;3353:18;3340:32;3330:42;;3050:328;;;;;:::o;3572:1088::-;3730:6;3738;3746;3754;3762;3770;3823:2;3811:9;3802:7;3798:23;3794:32;3791:52;;;3839:1;3836;3829:12;3791:52;3866:23;;-1:-1:-1;;;;;3938:14:54;;;3935:34;;;3965:1;3962;3955:12;3935:34;4004:70;4066:7;4057:6;4046:9;4042:22;4004:70;:::i;:::-;4093:8;;-1:-1:-1;3978:96:54;-1:-1:-1;4181:2:54;4166:18;;4153:32;;-1:-1:-1;4197:16:54;;;4194:36;;;4226:1;4223;4216:12;4194:36;4265:72;4329:7;4318:8;4307:9;4303:24;4265:72;:::i;:::-;4356:8;;-1:-1:-1;4239:98:54;-1:-1:-1;4444:2:54;4429:18;;4416:32;;-1:-1:-1;4460:16:54;;;4457:36;;;4489:1;4486;4479:12;4457:36;;4528:72;4592:7;4581:8;4570:9;4566:24;4528:72;:::i;:::-;3572:1088;;;;-1:-1:-1;3572:1088:54;;-1:-1:-1;3572:1088:54;;4619:8;;3572:1088;-1:-1:-1;;;3572:1088:54:o;5879:334::-;5956:6;5964;5972;6025:2;6013:9;6004:7;6000:23;5996:32;5993:52;;;6041:1;6038;6031:12;5993:52;6064:29;6083:9;6064:29;:::i;:::-;6054:39;;6112:38;6146:2;6135:9;6131:18;6112:38;:::i;:::-;6102:48;;6169:38;6203:2;6192:9;6188:18;6169:38;:::i;:::-;6159:48;;5879:334;;;;;:::o;6218:592::-;6289:6;6297;6350:2;6338:9;6329:7;6325:23;6321:32;6318:52;;;6366:1;6363;6356:12;6318:52;6393:23;;-1:-1:-1;;;;;6465:14:54;;;6462:34;;;6492:1;6489;6482:12;6462:34;6530:6;6519:9;6515:22;6505:32;;6575:7;6568:4;6564:2;6560:13;6556:27;6546:55;;6597:1;6594;6587:12;6546:55;6637:2;6624:16;6663:2;6655:6;6652:14;6649:34;;;6679:1;6676;6669:12;6649:34;6724:7;6719:2;6710:6;6706:2;6702:15;6698:24;6695:37;6692:57;;;6745:1;6742;6735:12;6692:57;6776:2;6768:11;;;;;6798:6;;-1:-1:-1;6218:592:54;;-1:-1:-1;;;;6218:592:54:o;6815:118::-;6901:5;6894:13;6887:21;6880:5;6877:32;6867:60;;6923:1;6920;6913:12;6938:315;7003:6;7011;7064:2;7052:9;7043:7;7039:23;7035:32;7032:52;;;7080:1;7077;7070:12;7032:52;7103:29;7122:9;7103:29;:::i;:::-;7093:39;;7182:2;7171:9;7167:18;7154:32;7195:28;7217:5;7195:28;:::i;:::-;7242:5;7232:15;;;6938:315;;;;;:::o;7258:260::-;7326:6;7334;7387:2;7375:9;7366:7;7362:23;7358:32;7355:52;;;7403:1;7400;7393:12;7355:52;7426:29;7445:9;7426:29;:::i;:::-;7416:39;;7474:38;7508:2;7497:9;7493:18;7474:38;:::i;:::-;7464:48;;7258:260;;;;;:::o;7523:127::-;7584:10;7579:3;7575:20;7572:1;7565:31;7615:4;7612:1;7605:15;7639:4;7636:1;7629:15;7655:719;7698:5;7751:3;7744:4;7736:6;7732:17;7728:27;7718:55;;7769:1;7766;7759:12;7718:55;7792:20;;-1:-1:-1;;;;;7861:10:54;;;7858:36;;;7874:18;;:::i;:::-;7949:2;7943:9;7917:2;8003:13;;-1:-1:-1;;7999:22:54;;;8023:2;7995:31;7991:40;7979:53;;;8047:18;;;8067:22;;;8044:46;8041:72;;;8093:18;;:::i;:::-;8133:10;8129:2;8122:22;8168:2;8160:6;8153:18;8214:3;8207:4;8202:2;8194:6;8190:15;8186:26;8183:35;8180:55;;;8231:1;8228;8221:12;8180:55;8295:2;8288:4;8280:6;8276:17;8269:4;8261:6;8257:17;8244:54;8342:1;8335:4;8330:2;8322:6;8318:15;8314:26;8307:37;8362:6;8353:15;;;;;;7655:719;;;;:::o;8379:925::-;8501:6;8509;8517;8525;8533;8541;8594:3;8582:9;8573:7;8569:23;8565:33;8562:53;;;8611:1;8608;8601:12;8562:53;8634:29;8653:9;8634:29;:::i;:::-;8624:39;;8682:38;8716:2;8705:9;8701:18;8682:38;:::i;:::-;8672:48;-1:-1:-1;8771:2:54;8756:18;;8743:32;-1:-1:-1;;;;;8824:14:54;;;8821:34;;;8851:1;8848;8841:12;8821:34;8874:50;8916:7;8907:6;8896:9;8892:22;8874:50;:::i;:::-;8864:60;;8977:2;8966:9;8962:18;8949:32;8933:48;;9006:2;8996:8;8993:16;8990:36;;;9022:1;9019;9012:12;8990:36;;9045:52;9089:7;9078:8;9067:9;9063:24;9045:52;:::i;:::-;9035:62;;;9147:3;9136:9;9132:19;9119:33;9192:4;9185:5;9181:16;9174:5;9171:27;9161:55;;9212:1;9209;9202:12;9161:55;9235:5;-1:-1:-1;9259:39:54;9293:3;9278:19;;9259:39;:::i;:::-;9249:49;;8379:925;;;;;;;;:::o;9309:380::-;9388:1;9384:12;;;;9431;;;9452:61;;9506:4;9498:6;9494:17;9484:27;;9452:61;9559:2;9551:6;9548:14;9528:18;9525:38;9522:161;;9605:10;9600:3;9596:20;9593:1;9586:31;9640:4;9637:1;9630:15;9668:4;9665:1;9658:15;9522:161;;9309:380;;;:::o;9694:410::-;9896:2;9878:21;;;9935:2;9915:18;;;9908:30;9974:34;9969:2;9954:18;;9947:62;-1:-1:-1;;;10040:2:54;10025:18;;10018:44;10094:3;10079:19;;9694:410::o;10109:127::-;10170:10;10165:3;10161:20;10158:1;10151:31;10201:4;10198:1;10191:15;10225:4;10222:1;10215:15;10241:125;10306:9;;;10327:10;;;10324:36;;;10340:18;;:::i;10732:127::-;10793:10;10788:3;10784:20;10781:1;10774:31;10824:4;10821:1;10814:15;10848:4;10845:1;10838:15;10864:241;10920:6;10973:2;10961:9;10952:7;10948:23;10944:32;10941:52;;;10989:1;10986;10979:12;10941:52;11028:9;11015:23;11047:28;11069:5;11047:28;:::i;11110:135::-;11149:3;11170:17;;;11167:43;;11190:18;;:::i;:::-;-1:-1:-1;11237:1:54;11226:13;;11110:135::o;11671:128::-;11738:9;;;11759:11;;;11756:37;;;11773:18;;:::i;11804:340::-;12006:2;11988:21;;;12045:2;12025:18;;;12018:30;-1:-1:-1;;;12079:2:54;12064:18;;12057:46;12135:2;12120:18;;11804:340::o;12149:::-;12351:2;12333:21;;;12390:2;12370:18;;;12363:30;-1:-1:-1;;;12424:2:54;12409:18;;12402:46;12480:2;12465:18;;12149:340::o;12494:344::-;12696:2;12678:21;;;12735:2;12715:18;;;12708:30;-1:-1:-1;;;12769:2:54;12754:18;;12747:50;12829:2;12814:18;;12494:344::o;12843:245::-;12910:6;12963:2;12951:9;12942:7;12938:23;12934:32;12931:52;;;12979:1;12976;12969:12;12931:52;13011:9;13005:16;13030:28;13052:5;13030:28;:::i;13093:375::-;-1:-1:-1;;;;;13351:15:54;;;13333:34;;13403:15;;;;13398:2;13383:18;;13376:43;13450:2;13435:18;;13428:34;;;;13283:2;13268:18;;13093:375::o;13949:772::-;13999:3;14040:5;14034:12;14069:36;14095:9;14069:36;:::i;:::-;14114:19;;;14152:4;14175:1;14192:18;;;14219:146;;;;14379:1;14374:341;;;;14185:530;;14219:146;-1:-1:-1;;14261:24:54;;14247:12;;;14240:46;14333:14;;14326:22;14323:1;14319:30;14310:40;;14306:49;;;-1:-1:-1;14219:146:54;;14374:341;14405:5;14402:1;14395:16;14452:2;14449:1;14439:16;14477:1;14491:174;14505:6;14502:1;14499:13;14491:174;;;14592:14;;14574:11;;;14570:20;;14563:44;14635:16;;;;14520:10;;14491:174;;;14689:11;;14685:20;;;-1:-1:-1;;14185:530:54;;;;;;13949:772;;;;:::o;14726:734::-;15017:3;15006:9;14999:22;14980:4;15044:54;15093:3;15082:9;15078:19;15070:6;15044:54;:::i;:::-;15146:9;15138:6;15134:22;15129:2;15118:9;15114:18;15107:50;15180:41;15214:6;15206;15180:41;:::i;:::-;15166:55;;15269:4;15261:6;15257:17;15252:2;15241:9;15237:18;15230:45;15323:9;15315:6;15311:22;15306:2;15295:9;15291:18;15284:50;15351:33;15377:6;15369;15351:33;:::i;:::-;15343:41;;;15450:1;15446;15441:3;15437:11;15433:19;15425:6;15421:32;15415:3;15404:9;15400:19;15393:61;14726:734;;;;;;;;:::o;16520:274::-;-1:-1:-1;;;;;16712:32:54;;;;16694:51;;16776:2;16761:18;;16754:34;16682:2;16667:18;;16520:274::o;17409:276::-;17478:6;17531:2;17519:9;17510:7;17506:23;17502:32;17499:52;;;17547:1;17544;17537:12;17499:52;17579:9;17573:16;17629:6;17622:5;17618:18;17611:5;17608:29;17598:57;;17651:1;17648;17641:12;18838:545;18940:2;18935:3;18932:11;18929:448;;;18976:1;19001:5;18997:2;18990:17;19046:4;19042:2;19032:19;19116:2;19104:10;19100:19;19097:1;19093:27;19087:4;19083:38;19152:4;19140:10;19137:20;19134:47;;;-1:-1:-1;19175:4:54;19134:47;19230:2;19225:3;19221:12;19218:1;19214:20;19208:4;19204:31;19194:41;;19285:82;19303:2;19296:5;19293:13;19285:82;;;19348:17;;;19329:1;19318:13;19285:82;;19388:166;-1:-1:-1;;19516:1:54;19512:11;;;19508:24;19504:29;19494:40;19540:1;19536:11;;;;19491:57;;19388:166::o;19559:1206::-;-1:-1:-1;;;;;19675:27:54;;19672:53;;;19705:18;;:::i;:::-;19734:94;19824:3;19784:38;19816:4;19810:11;19784:38;:::i;:::-;19778:4;19734:94;:::i;:::-;19854:1;19879:2;19874:3;19871:11;19896:1;19891:616;;;;20551:1;20568:3;20565:93;;;-1:-1:-1;20624:19:54;;;20611:33;20565:93;20684:64;20744:3;20737:5;20684:64;:::i;:::-;20678:4;20671:78;;19864:895;;19891:616;13896:1;13889:14;;;13933:4;13920:18;;-1:-1:-1;;19927:17:54;;;20028:9;20050:229;20064:7;20061:1;20058:14;20050:229;;;20153:19;;;20140:33;20125:49;;20260:4;20245:20;;;;20213:1;20201:14;;;;20080:12;20050:229;;;20054:3;20307;20298:7;20295:16;20292:159;;;20431:1;20427:6;20421:3;20415;20412:1;20408:11;20404:21;20400:34;20396:39;20383:9;20378:3;20374:19;20361:33;20357:79;20349:6;20342:95;20292:159;;;20494:1;20488:3;20485:1;20481:11;20477:19;20471:4;20464:33;19864:895;;19559:1206;;;:::o;21592:1352::-;21712:10;;-1:-1:-1;;;;;21734:30:54;;21731:56;;;21767:18;;:::i;:::-;21796:97;21886:6;21846:38;21878:4;21872:11;21846:38;:::i;:::-;21840:4;21796:97;:::i;:::-;21948:4;;22012:2;22001:14;;22029:1;22024:663;;;;22731:1;22748:6;22745:89;;;-1:-1:-1;22800:19:54;;;22794:26;22745:89;22860:67;22920:6;22913:5;22860:67;:::i;:::-;22854:4;22847:81;;21994:944;;22024:663;13896:1;13889:14;;;13933:4;13920:18;;-1:-1:-1;;22060:20:54;;;22178:236;22192:7;22189:1;22186:14;22178:236;;;22281:19;;;22275:26;22260:42;;22373:27;;;;22341:1;22329:14;;;;22208:19;;22178:236;;;22182:3;22442:6;22433:7;22430:19;22427:201;;;22503:19;;;22497:26;-1:-1:-1;;22586:1:54;22582:14;;;22598:3;22578:24;22574:37;22570:42;22555:58;22540:74;;22427:201;-1:-1:-1;;;;;22674:1:54;22658:14;;;22654:22;22641:36;;-1:-1:-1;21592:1352:54:o;27054:407::-;27256:2;27238:21;;;27295:2;27275:18;;;27268:30;27334:34;27329:2;27314:18;;27307:62;-1:-1:-1;;;27400:2:54;27385:18;;27378:41;27451:3;27436:19;;27054:407::o",
  "source": "// SPDX-License-Identifier: GPL-3.0\n/**\n *     NOTICE\n *\n *     The T-REX software is licensed under a proprietary license or the GPL v.3.\n *     If you choose to receive it under the GPL v.3 license, the following applies:\n *     T-REX is a suite of smart contracts developed by Tokeny to manage and transfer financial assets on the ethereum blockchain\n *\n *     Copyright (C) 2021, Tokeny sàrl.\n *\n *     This program is free software: you can redistribute it and/or modify\n *     it under the terms of the GNU General Public License as published by\n *     the Free Software Foundation, either version 3 of the License, or\n *     (at your option) any later version.\n *\n *     This program is distributed in the hope that it will be useful,\n *     but WITHOUT ANY WARRANTY; without even the implied warranty of\n *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n *     GNU General Public License for more details.\n *\n *     You should have received a copy of the GNU General Public License\n *     along with this program.  If not, see <https://www.gnu.org/licenses/>.\n */\n\npragma solidity ^0.8.0;\n\nimport './IToken.sol';\nimport '@onchain-id/solidity/contracts/interface/IERC734.sol';\nimport '@onchain-id/solidity/contracts/interface/IERC735.sol';\nimport '@onchain-id/solidity/contracts/interface/IIdentity.sol';\nimport '../registry/IClaimTopicsRegistry.sol';\nimport '../registry/IIdentityRegistry.sol';\nimport '../compliance/ICompliance.sol';\nimport './Storage.sol';\nimport '../roles/AgentRoleUpgradeable.sol';\n\ncontract Token is IToken, AgentRoleUpgradeable, TokenStorage {\n\n    /**\n     *  @dev the constructor initiates the token contract\n     *  msg.sender is set automatically as the owner of the smart contract\n     *  @param _identityRegistry the address of the Identity registry linked to the token\n     *  @param _compliance the address of the compliance contract linked to the token\n     *  @param _name the name of the token\n     *  @param _symbol the symbol of the token\n     *  @param _decimals the decimals of the token\n     *  @param _onchainID the address of the onchainID of the token\n     *  emits an `UpdatedTokenInformation` event\n     *  emits an `IdentityRegistryAdded` event\n     *  emits a `ComplianceAdded` event\n     */\n    function init(\n        address _identityRegistry,\n        address _compliance,\n        string memory _name,\n        string memory _symbol,\n        uint8 _decimals,\n        address _onchainID\n    ) public initializer {\n        tokenName = _name;\n        tokenSymbol = _symbol;\n        tokenDecimals = _decimals;\n        tokenOnchainID = _onchainID;\n        tokenIdentityRegistry = IIdentityRegistry(_identityRegistry);\n        emit IdentityRegistryAdded(_identityRegistry);\n        tokenCompliance = ICompliance(_compliance);\n        emit ComplianceAdded(_compliance);\n        emit UpdatedTokenInformation(tokenName, tokenSymbol, tokenDecimals, TOKEN_VERSION, tokenOnchainID);\n        __Ownable_init();\n    }\n\n    /// @dev Modifier to make a function callable only when the contract is not paused.\n    modifier whenNotPaused() {\n        require(!tokenPaused, 'Pausable: paused');\n        _;\n    }\n\n    /// @dev Modifier to make a function callable only when the contract is paused.\n    modifier whenPaused() {\n        require(tokenPaused, 'Pausable: not paused');\n        _;\n    }\n\n    /**\n     *  @dev See {IERC20-totalSupply}.\n     */\n    function totalSupply() external view override returns (uint256) {\n        return _totalSupply;\n    }\n\n    /**\n     *  @dev See {IERC20-balanceOf}.\n     */\n    function balanceOf(address _userAddress) public view override returns (uint256) {\n        return _balances[_userAddress];\n    }\n\n    /**\n     *  @dev See {IERC20-allowance}.\n     */\n    function allowance(address _owner, address _spender) external view virtual override returns (uint256) {\n        return _allowances[_owner][_spender];\n    }\n\n    /**\n     *  @dev See {IERC20-approve}.\n     */\n    function approve(address _spender, uint256 _amount) external virtual override returns (bool) {\n        _approve(msg.sender, _spender, _amount);\n        return true;\n    }\n\n    /**\n     *  @dev See {ERC20-increaseAllowance}.\n     */\n    function increaseAllowance(address _spender, uint256 _addedValue) external virtual returns (bool) {\n        _approve(msg.sender, _spender, _allowances[msg.sender][_spender] + (_addedValue));\n        return true;\n    }\n\n    /**\n     *  @dev See {ERC20-decreaseAllowance}.\n     */\n    function decreaseAllowance(address _spender, uint256 _subtractedValue) external virtual returns (bool) {\n        _approve(msg.sender, _spender, _allowances[msg.sender][_spender] - _subtractedValue);\n        return true;\n    }\n\n    /**\n     *  @dev See {ERC20-_mint}.\n     */\n    function _transfer(\n        address _from,\n        address _to,\n        uint256 _amount\n    ) internal virtual {\n        require(_from != address(0), 'ERC20: transfer from the zero address');\n        require(_to != address(0), 'ERC20: transfer to the zero address');\n\n        _beforeTokenTransfer(_from, _to, _amount);\n\n        _balances[_from] = _balances[_from] - _amount;\n        _balances[_to] = _balances[_to] + _amount;\n        emit Transfer(_from, _to, _amount);\n    }\n\n    /**\n     *  @dev See {ERC20-_mint}.\n     */\n    function _mint(address _userAddress, uint256 _amount) internal virtual {\n        require(_userAddress != address(0), 'ERC20: mint to the zero address');\n\n        _beforeTokenTransfer(address(0), _userAddress, _amount);\n\n        _totalSupply = _totalSupply + _amount;\n        _balances[_userAddress] = _balances[_userAddress] + _amount;\n        emit Transfer(address(0), _userAddress, _amount);\n    }\n\n    /**\n     *  @dev See {ERC20-_burn}.\n     */\n    function _burn(address _userAddress, uint256 _amount) internal virtual {\n        require(_userAddress != address(0), 'ERC20: burn from the zero address');\n\n        _beforeTokenTransfer(_userAddress, address(0), _amount);\n\n        _balances[_userAddress] = _balances[_userAddress] - _amount;\n        _totalSupply = _totalSupply - _amount;\n        emit Transfer(_userAddress, address(0), _amount);\n    }\n\n    /**\n     *  @dev See {ERC20-_approve}.\n     */\n    function _approve(\n        address _owner,\n        address _spender,\n        uint256 _amount\n    ) internal virtual {\n        require(_owner != address(0), 'ERC20: approve from the zero address');\n        require(_spender != address(0), 'ERC20: approve to the zero address');\n\n        _allowances[_owner][_spender] = _amount;\n        emit Approval(_owner, _spender, _amount);\n    }\n\n    /**\n     *  @dev See {ERC20-_beforeTokenTransfer}.\n     */\n    function _beforeTokenTransfer(\n        address _from,\n        address _to,\n        uint256 _amount\n    ) internal virtual {}\n\n    /**\n     *  @dev See {IToken-decimals}.\n     */\n    function decimals() external view override returns (uint8) {\n        return tokenDecimals;\n    }\n\n    /**\n     *  @dev See {IToken-name}.\n     */\n    function name() external view override returns (string memory) {\n        return tokenName;\n    }\n\n    /**\n     *  @dev See {IToken-onchainID}.\n     */\n    function onchainID() external view override returns (address) {\n        return tokenOnchainID;\n    }\n\n    /**\n     *  @dev See {IToken-symbol}.\n     */\n    function symbol() external view override returns (string memory) {\n        return tokenSymbol;\n    }\n\n    /**\n     *  @dev See {IToken-version}.\n     */\n    function version() external view override returns (string memory) {\n        return TOKEN_VERSION;\n    }\n\n    /**\n     *  @dev See {IToken-setName}.\n     */\n    function setName(string calldata _name) external override onlyOwner {\n        tokenName = _name;\n        emit UpdatedTokenInformation(tokenName, tokenSymbol, tokenDecimals, TOKEN_VERSION, tokenOnchainID);\n    }\n\n    /**\n     *  @dev See {IToken-setSymbol}.\n     */\n    function setSymbol(string calldata _symbol) external override onlyOwner {\n        tokenSymbol = _symbol;\n        emit UpdatedTokenInformation(tokenName, tokenSymbol, tokenDecimals, TOKEN_VERSION, tokenOnchainID);\n    }\n\n    /**\n     *  @dev See {IToken-setOnchainID}.\n     */\n    function setOnchainID(address _onchainID) external override onlyOwner {\n        tokenOnchainID = _onchainID;\n        emit UpdatedTokenInformation(tokenName, tokenSymbol, tokenDecimals, TOKEN_VERSION, tokenOnchainID);\n    }\n\n    /**\n     *  @dev See {IToken-paused}.\n     */\n    function paused() external view override returns (bool) {\n        return tokenPaused;\n    }\n\n    /**\n     *  @dev See {IToken-isFrozen}.\n     */\n    function isFrozen(address _userAddress) external view override returns (bool) {\n        return frozen[_userAddress];\n    }\n\n    /**\n     *  @dev See {IToken-getFrozenTokens}.\n     */\n    function getFrozenTokens(address _userAddress) external view override returns (uint256) {\n        return frozenTokens[_userAddress];\n    }\n\n    /**\n     *  @notice ERC-20 overridden function that include logic to check for trade validity.\n     *  Require that the msg.sender and to addresses are not frozen.\n     *  Require that the value should not exceed available balance .\n     *  Require that the to address is a verified address\n     *  @param _to The address of the receiver\n     *  @param _amount The number of tokens to transfer\n     *  @return `true` if successful and revert if unsuccessful\n     */\n    function transfer(address _to, uint256 _amount) public override whenNotPaused returns (bool) {\n        require(!frozen[_to] && !frozen[msg.sender], 'wallet is frozen');\n        require(_amount <= balanceOf(msg.sender) - (frozenTokens[msg.sender]), 'Insufficient Balance');\n        if (tokenIdentityRegistry.isVerified(_to) && tokenCompliance.canTransfer(msg.sender, _to, _amount)) {\n            tokenCompliance.transferred(msg.sender, _to, _amount);\n            _transfer(msg.sender, _to, _amount);\n            return true;\n        }\n        revert('Transfer not possible');\n    }\n\n    /**\n     *  @dev See {IToken-pause}.\n     */\n    function pause() external override onlyAgent whenNotPaused {\n        tokenPaused = true;\n        emit Paused(msg.sender);\n    }\n\n    /**\n     *  @dev See {IToken-unpause}.\n     */\n    function unpause() external override onlyAgent whenPaused {\n        tokenPaused = false;\n        emit Unpaused(msg.sender);\n    }\n\n    /**\n     *  @dev See {IToken-identityRegistry}.\n     */\n    function identityRegistry() external view override returns (IIdentityRegistry) {\n        return tokenIdentityRegistry;\n    }\n\n    /**\n     *  @dev See {IToken-compliance}.\n     */\n    function compliance() external view override returns (ICompliance) {\n        return tokenCompliance;\n    }\n\n    /**\n     *  @dev See {IToken-batchTransfer}.\n     */\n    function batchTransfer(address[] calldata _toList, uint256[] calldata _amounts) external override {\n        for (uint256 i = 0; i < _toList.length; i++) {\n            transfer(_toList[i], _amounts[i]);\n        }\n    }\n\n    /**\n     *  @notice ERC-20 overridden function that include logic to check for trade validity.\n     *  Require that the from and to addresses are not frozen.\n     *  Require that the value should not exceed available balance .\n     *  Require that the to address is a verified address\n     *  @param _from The address of the sender\n     *  @param _to The address of the receiver\n     *  @param _amount The number of tokens to transfer\n     *  @return `true` if successful and revert if unsuccessful\n     */\n    function transferFrom(\n        address _from,\n        address _to,\n        uint256 _amount\n    ) external override whenNotPaused returns (bool) {\n        require(!frozen[_to] && !frozen[_from], 'wallet is frozen');\n        require(_amount <= balanceOf(_from) - (frozenTokens[_from]), 'Insufficient Balance');\n        if (tokenIdentityRegistry.isVerified(_to) && tokenCompliance.canTransfer(_from, _to, _amount)) {\n            tokenCompliance.transferred(_from, _to, _amount);\n            _transfer(_from, _to, _amount);\n            _approve(_from, msg.sender, _allowances[_from][msg.sender] - (_amount));\n            return true;\n        }\n\n        revert('Transfer not possible');\n    }\n\n    /**\n     *  @dev See {IToken-forcedTransfer}.\n     */\n    function forcedTransfer(\n        address _from,\n        address _to,\n        uint256 _amount\n    ) public override onlyAgent returns (bool) {\n        uint256 freeBalance = balanceOf(_from) - (frozenTokens[_from]);\n        if (_amount > freeBalance) {\n            uint256 tokensToUnfreeze = _amount - (freeBalance);\n            frozenTokens[_from] = frozenTokens[_from] - (tokensToUnfreeze);\n            emit TokensUnfrozen(_from, tokensToUnfreeze);\n        }\n        if (tokenIdentityRegistry.isVerified(_to)) {\n            tokenCompliance.transferred(_from, _to, _amount);\n            _transfer(_from, _to, _amount);\n            return true;\n        }\n        revert('Transfer not possible');\n    }\n\n    /**\n     *  @dev See {IToken-batchForcedTransfer}.\n     */\n    function batchForcedTransfer(\n        address[] calldata _fromList,\n        address[] calldata _toList,\n        uint256[] calldata _amounts\n    ) external override {\n        for (uint256 i = 0; i < _fromList.length; i++) {\n            forcedTransfer(_fromList[i], _toList[i], _amounts[i]);\n        }\n    }\n\n    /**\n     *  @dev See {IToken-mint}.\n     */\n    function mint(address _to, uint256 _amount) public override onlyAgent {\n        require(tokenIdentityRegistry.isVerified(_to), 'Identity is not verified.');\n        require(tokenCompliance.canTransfer(msg.sender, _to, _amount), 'Compliance not followed');\n        _mint(_to, _amount);\n        tokenCompliance.created(_to, _amount);\n    }\n\n    /**\n     *  @dev See {IToken-batchMint}.\n     */\n    function batchMint(address[] calldata _toList, uint256[] calldata _amounts) external override {\n        for (uint256 i = 0; i < _toList.length; i++) {\n            mint(_toList[i], _amounts[i]);\n        }\n    }\n\n    /**\n     *  @dev See {IToken-burn}.\n     */\n    function burn(address _userAddress, uint256 _amount) public override onlyAgent {\n        uint256 freeBalance = balanceOf(_userAddress) - frozenTokens[_userAddress];\n        if (_amount > freeBalance) {\n            uint256 tokensToUnfreeze = _amount - (freeBalance);\n            frozenTokens[_userAddress] = frozenTokens[_userAddress] - (tokensToUnfreeze);\n            emit TokensUnfrozen(_userAddress, tokensToUnfreeze);\n        }\n        _burn(_userAddress, _amount);\n        tokenCompliance.destroyed(_userAddress, _amount);\n    }\n\n    /**\n     *  @dev See {IToken-batchBurn}.\n     */\n    function batchBurn(address[] calldata _userAddresses, uint256[] calldata _amounts) external override {\n        for (uint256 i = 0; i < _userAddresses.length; i++) {\n            burn(_userAddresses[i], _amounts[i]);\n        }\n    }\n\n    /**\n     *  @dev See {IToken-setAddressFrozen}.\n     */\n    function setAddressFrozen(address _userAddress, bool _freeze) public override onlyAgent {\n        frozen[_userAddress] = _freeze;\n\n        emit AddressFrozen(_userAddress, _freeze, msg.sender);\n    }\n\n    /**\n     *  @dev See {IToken-batchSetAddressFrozen}.\n     */\n    function batchSetAddressFrozen(address[] calldata _userAddresses, bool[] calldata _freeze) external override {\n        for (uint256 i = 0; i < _userAddresses.length; i++) {\n            setAddressFrozen(_userAddresses[i], _freeze[i]);\n        }\n    }\n\n    /**\n     *  @dev See {IToken-freezePartialTokens}.\n     */\n    function freezePartialTokens(address _userAddress, uint256 _amount) public override onlyAgent {\n        uint256 balance = balanceOf(_userAddress);\n        require(balance >= frozenTokens[_userAddress] + _amount, 'Amount exceeds available balance');\n        frozenTokens[_userAddress] = frozenTokens[_userAddress] + (_amount);\n        emit TokensFrozen(_userAddress, _amount);\n    }\n\n    /**\n     *  @dev See {IToken-batchFreezePartialTokens}.\n     */\n    function batchFreezePartialTokens(address[] calldata _userAddresses, uint256[] calldata _amounts) external override {\n        for (uint256 i = 0; i < _userAddresses.length; i++) {\n            freezePartialTokens(_userAddresses[i], _amounts[i]);\n        }\n    }\n\n    /**\n     *  @dev See {IToken-unfreezePartialTokens}.\n     */\n    function unfreezePartialTokens(address _userAddress, uint256 _amount) public override onlyAgent {\n        require(frozenTokens[_userAddress] >= _amount, 'Amount should be less than or equal to frozen tokens');\n        frozenTokens[_userAddress] = frozenTokens[_userAddress] - (_amount);\n        emit TokensUnfrozen(_userAddress, _amount);\n    }\n\n    /**\n     *  @dev See {IToken-batchUnfreezePartialTokens}.\n     */\n    function batchUnfreezePartialTokens(address[] calldata _userAddresses, uint256[] calldata _amounts) external override {\n        for (uint256 i = 0; i < _userAddresses.length; i++) {\n            unfreezePartialTokens(_userAddresses[i], _amounts[i]);\n        }\n    }\n\n    /**\n     *  @dev See {IToken-setIdentityRegistry}.\n     */\n    function setIdentityRegistry(address _identityRegistry) external override onlyOwner {\n        tokenIdentityRegistry = IIdentityRegistry(_identityRegistry);\n        emit IdentityRegistryAdded(_identityRegistry);\n    }\n\n    /**\n     *  @dev See {IToken-setCompliance}.\n     */\n    function setCompliance(address _compliance) external override onlyOwner {\n        tokenCompliance = ICompliance(_compliance);\n        emit ComplianceAdded(_compliance);\n    }\n\n    /**\n     *  @dev See {IToken-recoveryAddress}.\n     */\n    function recoveryAddress(\n        address _lostWallet,\n        address _newWallet,\n        address _investorOnchainID\n    ) external override onlyAgent returns (bool) {\n        require(balanceOf(_lostWallet) != 0, 'no tokens to recover');\n        IIdentity _onchainID = IIdentity(_investorOnchainID);\n        bytes32 _key = keccak256(abi.encode(_newWallet));\n        if (_onchainID.keyHasPurpose(_key, 1)) {\n            uint256 investorTokens = balanceOf(_lostWallet);\n            uint256 _frozenTokens = frozenTokens[_lostWallet];\n            tokenIdentityRegistry.registerIdentity(_newWallet, _onchainID, tokenIdentityRegistry.investorCountry(_lostWallet));\n            tokenIdentityRegistry.deleteIdentity(_lostWallet);\n            forcedTransfer(_lostWallet, _newWallet, investorTokens);\n            if (_frozenTokens > 0) {\n                freezePartialTokens(_newWallet, _frozenTokens);\n            }\n            if (frozen[_lostWallet] == true) {\n                setAddressFrozen(_newWallet, true);\n            }\n            emit RecoverySuccess(_lostWallet, _newWallet, _investorOnchainID);\n            return true;\n        }\n        revert('Recovery not possible');\n    }\n\n    /**\n     *  @dev See {IToken-transferOwnershipOnTokenContract}.\n     */\n    function transferOwnershipOnTokenContract(address _newOwner) external override onlyOwner {\n        transferOwnership(_newOwner);\n    }\n\n    /**\n     *  @dev See {IToken-addAgentOnTokenContract}.\n     */\n    function addAgentOnTokenContract(address _agent) external override {\n        addAgent(_agent);\n    }\n\n    /**\n     *  @dev See {IToken-removeAgentOnTokenContract}.\n     */\n    function removeAgentOnTokenContract(address _agent) external override {\n        removeAgent(_agent);\n    }\n}\n",
  "sourcePath": "/home/webxpert/workspace/shipfinex/latest-repos/tokenx_smartcontract/contracts/token/Token.sol",
  "ast": {
    "absolutePath": "project:/contracts/token/Token.sol",
    "exportedSymbols": {
      "AddressUpgradeable": [
        2350
      ],
      "AgentRoleUpgradeable": [
        9203
      ],
      "ContextUpgradeable": [
        2392
      ],
      "IClaimIssuer": [
        1456
      ],
      "IClaimTopicsRegistry": [
        6444
      ],
      "ICompliance": [
        5596
      ],
      "IERC20": [
        3317
      ],
      "IERC734": [
        1609
      ],
      "IERC735": [
        1734
      ],
      "IIdentity": [
        1743
      ],
      "IIdentityRegistry": [
        6637
      ],
      "IIdentityRegistryStorage": [
        6759
      ],
      "IToken": [
        12234
      ],
      "ITrustedIssuersRegistry": [
        6856
      ],
      "Initializable": [
        2107
      ],
      "OwnableUpgradeable": [
        1956
      ],
      "Roles": [
        11901
      ],
      "Token": [
        13849
      ],
      "TokenStorage": [
        12284
      ]
    },
    "id": 13850,
    "license": "GPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 12286,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "1093:23:53"
      },
      {
        "absolutePath": "project:/contracts/token/IToken.sol",
        "file": "./IToken.sol",
        "id": 12287,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13850,
        "sourceUnit": 12235,
        "src": "1118:22:53",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@onchain-id/solidity/contracts/interface/IERC734.sol",
        "file": "@onchain-id/solidity/contracts/interface/IERC734.sol",
        "id": 12288,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13850,
        "sourceUnit": 1610,
        "src": "1141:62:53",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@onchain-id/solidity/contracts/interface/IERC735.sol",
        "file": "@onchain-id/solidity/contracts/interface/IERC735.sol",
        "id": 12289,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13850,
        "sourceUnit": 1735,
        "src": "1204:62:53",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@onchain-id/solidity/contracts/interface/IIdentity.sol",
        "file": "@onchain-id/solidity/contracts/interface/IIdentity.sol",
        "id": 12290,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13850,
        "sourceUnit": 1744,
        "src": "1267:64:53",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/registry/IClaimTopicsRegistry.sol",
        "file": "../registry/IClaimTopicsRegistry.sol",
        "id": 12291,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13850,
        "sourceUnit": 6445,
        "src": "1332:46:53",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/registry/IIdentityRegistry.sol",
        "file": "../registry/IIdentityRegistry.sol",
        "id": 12292,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13850,
        "sourceUnit": 6638,
        "src": "1379:43:53",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/compliance/ICompliance.sol",
        "file": "../compliance/ICompliance.sol",
        "id": 12293,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13850,
        "sourceUnit": 5597,
        "src": "1423:39:53",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/token/Storage.sol",
        "file": "./Storage.sol",
        "id": 12294,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13850,
        "sourceUnit": 12285,
        "src": "1463:23:53",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "project:/contracts/roles/AgentRoleUpgradeable.sol",
        "file": "../roles/AgentRoleUpgradeable.sol",
        "id": 12295,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 13850,
        "sourceUnit": 9204,
        "src": "1487:43:53",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 12296,
              "name": "IToken",
              "nameLocations": [
                "1550:6:53"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 12234,
              "src": "1550:6:53"
            },
            "id": 12297,
            "nodeType": "InheritanceSpecifier",
            "src": "1550:6:53"
          },
          {
            "baseName": {
              "id": 12298,
              "name": "AgentRoleUpgradeable",
              "nameLocations": [
                "1558:20:53"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 9203,
              "src": "1558:20:53"
            },
            "id": 12299,
            "nodeType": "InheritanceSpecifier",
            "src": "1558:20:53"
          },
          {
            "baseName": {
              "id": 12300,
              "name": "TokenStorage",
              "nameLocations": [
                "1580:12:53"
              ],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 12284,
              "src": "1580:12:53"
            },
            "id": 12301,
            "nodeType": "InheritanceSpecifier",
            "src": "1580:12:53"
          }
        ],
        "canonicalName": "Token",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "id": 13849,
        "linearizedBaseContracts": [
          13849,
          12284,
          9203,
          1956,
          2392,
          2107,
          12234,
          3317
        ],
        "name": "Token",
        "nameLocation": "1541:5:53",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 12366,
              "nodeType": "Block",
              "src": "2486:491:53",
              "statements": [
                {
                  "expression": {
                    "id": 12321,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12319,
                      "name": "tokenName",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12254,
                      "src": "2496:9:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 12320,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12308,
                      "src": "2508:5:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "2496:17:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 12322,
                  "nodeType": "ExpressionStatement",
                  "src": "2496:17:53"
                },
                {
                  "expression": {
                    "id": 12325,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12323,
                      "name": "tokenSymbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12256,
                      "src": "2523:11:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 12324,
                      "name": "_symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12310,
                      "src": "2537:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "2523:21:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 12326,
                  "nodeType": "ExpressionStatement",
                  "src": "2523:21:53"
                },
                {
                  "expression": {
                    "id": 12329,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12327,
                      "name": "tokenDecimals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12258,
                      "src": "2554:13:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 12328,
                      "name": "_decimals",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12312,
                      "src": "2570:9:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "2554:25:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "id": 12330,
                  "nodeType": "ExpressionStatement",
                  "src": "2554:25:53"
                },
                {
                  "expression": {
                    "id": 12333,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12331,
                      "name": "tokenOnchainID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12260,
                      "src": "2589:14:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 12332,
                      "name": "_onchainID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12314,
                      "src": "2606:10:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2589:27:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 12334,
                  "nodeType": "ExpressionStatement",
                  "src": "2589:27:53"
                },
                {
                  "expression": {
                    "id": 12339,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12335,
                      "name": "tokenIdentityRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12279,
                      "src": "2626:21:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                        "typeString": "contract IIdentityRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 12337,
                          "name": "_identityRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12304,
                          "src": "2668:17:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 12336,
                        "name": "IIdentityRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6637,
                        "src": "2650:17:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IIdentityRegistry_$6637_$",
                          "typeString": "type(contract IIdentityRegistry)"
                        }
                      },
                      "id": 12338,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2650:36:53",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                        "typeString": "contract IIdentityRegistry"
                      }
                    },
                    "src": "2626:60:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                      "typeString": "contract IIdentityRegistry"
                    }
                  },
                  "id": 12340,
                  "nodeType": "ExpressionStatement",
                  "src": "2626:60:53"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 12342,
                        "name": "_identityRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12304,
                        "src": "2723:17:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 12341,
                      "name": "IdentityRegistryAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11927,
                      "src": "2701:21:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 12343,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2701:40:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12344,
                  "nodeType": "EmitStatement",
                  "src": "2696:45:53"
                },
                {
                  "expression": {
                    "id": 12349,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12345,
                      "name": "tokenCompliance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12283,
                      "src": "2751:15:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ICompliance_$5596",
                        "typeString": "contract ICompliance"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 12347,
                          "name": "_compliance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12306,
                          "src": "2781:11:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 12346,
                        "name": "ICompliance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5596,
                        "src": "2769:11:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ICompliance_$5596_$",
                          "typeString": "type(contract ICompliance)"
                        }
                      },
                      "id": 12348,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2769:24:53",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ICompliance_$5596",
                        "typeString": "contract ICompliance"
                      }
                    },
                    "src": "2751:42:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICompliance_$5596",
                      "typeString": "contract ICompliance"
                    }
                  },
                  "id": 12350,
                  "nodeType": "ExpressionStatement",
                  "src": "2751:42:53"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 12352,
                        "name": "_compliance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12306,
                        "src": "2824:11:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 12351,
                      "name": "ComplianceAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11932,
                      "src": "2808:15:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 12353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2808:28:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12354,
                  "nodeType": "EmitStatement",
                  "src": "2803:33:53"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 12356,
                        "name": "tokenName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12254,
                        "src": "2875:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        }
                      },
                      {
                        "id": 12357,
                        "name": "tokenSymbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12256,
                        "src": "2886:11:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        }
                      },
                      {
                        "id": 12358,
                        "name": "tokenDecimals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12258,
                        "src": "2899:13:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 12359,
                        "name": "TOKEN_VERSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12263,
                        "src": "2914:13:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "id": 12360,
                        "name": "tokenOnchainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12260,
                        "src": "2929:14:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        },
                        {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 12355,
                      "name": "UpdatedTokenInformation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11922,
                      "src": "2851:23:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint8_$_t_string_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (string memory,string memory,uint8,string memory,address)"
                      }
                    },
                    "id": 12361,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2851:93:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12362,
                  "nodeType": "EmitStatement",
                  "src": "2846:98:53"
                },
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 12363,
                      "name": "__Ownable_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1851,
                      "src": "2954:14:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 12364,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2954:16:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12365,
                  "nodeType": "ExpressionStatement",
                  "src": "2954:16:53"
                }
              ]
            },
            "documentation": {
              "id": 12302,
              "nodeType": "StructuredDocumentation",
              "src": "1600:665:53",
              "text": "  @dev the constructor initiates the token contract\n  msg.sender is set automatically as the owner of the smart contract\n  @param _identityRegistry the address of the Identity registry linked to the token\n  @param _compliance the address of the compliance contract linked to the token\n  @param _name the name of the token\n  @param _symbol the symbol of the token\n  @param _decimals the decimals of the token\n  @param _onchainID the address of the onchainID of the token\n  emits an `UpdatedTokenInformation` event\n  emits an `IdentityRegistryAdded` event\n  emits a `ComplianceAdded` event"
            },
            "functionSelector": "f91b619c",
            "id": 12367,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 12317,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 12316,
                  "name": "initializer",
                  "nameLocations": [
                    "2474:11:53"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2027,
                  "src": "2474:11:53"
                },
                "nodeType": "ModifierInvocation",
                "src": "2474:11:53"
              }
            ],
            "name": "init",
            "nameLocation": "2279:4:53",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12315,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12304,
                  "mutability": "mutable",
                  "name": "_identityRegistry",
                  "nameLocation": "2301:17:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12367,
                  "src": "2293:25:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12303,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2293:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12306,
                  "mutability": "mutable",
                  "name": "_compliance",
                  "nameLocation": "2336:11:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12367,
                  "src": "2328:19:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12305,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2328:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12308,
                  "mutability": "mutable",
                  "name": "_name",
                  "nameLocation": "2371:5:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12367,
                  "src": "2357:19:53",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12307,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2357:6:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12310,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nameLocation": "2400:7:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12367,
                  "src": "2386:21:53",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12309,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2386:6:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12312,
                  "mutability": "mutable",
                  "name": "_decimals",
                  "nameLocation": "2423:9:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12367,
                  "src": "2417:15:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 12311,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2417:5:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12314,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "2450:10:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12367,
                  "src": "2442:18:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12313,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2442:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2283:183:53"
            },
            "returnParameters": {
              "id": 12318,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2486:0:53"
            },
            "scope": 13849,
            "src": "2270:707:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 12377,
              "nodeType": "Block",
              "src": "3096:69:53",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12372,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "3114:12:53",
                        "subExpression": {
                          "id": 12371,
                          "name": "tokenPaused",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12275,
                          "src": "3115:11:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "5061757361626c653a20706175736564",
                        "id": 12373,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3128:18:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a",
                          "typeString": "literal_string \"Pausable: paused\""
                        },
                        "value": "Pausable: paused"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_68571e1369f7a6dcdcd736cb0343b35a58ed0f64d245c2ed839c98d412744f8a",
                          "typeString": "literal_string \"Pausable: paused\""
                        }
                      ],
                      "id": 12370,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "3106:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12374,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3106:41:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12375,
                  "nodeType": "ExpressionStatement",
                  "src": "3106:41:53"
                },
                {
                  "id": 12376,
                  "nodeType": "PlaceholderStatement",
                  "src": "3157:1:53"
                }
              ]
            },
            "documentation": {
              "id": 12368,
              "nodeType": "StructuredDocumentation",
              "src": "2983:83:53",
              "text": "@dev Modifier to make a function callable only when the contract is not paused."
            },
            "id": 12378,
            "name": "whenNotPaused",
            "nameLocation": "3080:13:53",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 12369,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3093:2:53"
            },
            "src": "3071:94:53",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12387,
              "nodeType": "Block",
              "src": "3277:72:53",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12382,
                        "name": "tokenPaused",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12275,
                        "src": "3295:11:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "5061757361626c653a206e6f7420706175736564",
                        "id": 12383,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3308:22:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a",
                          "typeString": "literal_string \"Pausable: not paused\""
                        },
                        "value": "Pausable: not paused"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0d1d997348c4b502650619e51f7d09f80514d98b6993be5051d07f703984619a",
                          "typeString": "literal_string \"Pausable: not paused\""
                        }
                      ],
                      "id": 12381,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "3287:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12384,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3287:44:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12385,
                  "nodeType": "ExpressionStatement",
                  "src": "3287:44:53"
                },
                {
                  "id": 12386,
                  "nodeType": "PlaceholderStatement",
                  "src": "3341:1:53"
                }
              ]
            },
            "documentation": {
              "id": 12379,
              "nodeType": "StructuredDocumentation",
              "src": "3171:79:53",
              "text": "@dev Modifier to make a function callable only when the contract is paused."
            },
            "id": 12388,
            "name": "whenPaused",
            "nameLocation": "3264:10:53",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 12380,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3274:2:53"
            },
            "src": "3255:94:53",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              3266
            ],
            "body": {
              "id": 12397,
              "nodeType": "Block",
              "src": "3474:36:53",
              "statements": [
                {
                  "expression": {
                    "id": 12395,
                    "name": "_totalSupply",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12251,
                    "src": "3491:12:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 12394,
                  "id": 12396,
                  "nodeType": "Return",
                  "src": "3484:19:53"
                }
              ]
            },
            "documentation": {
              "id": 12389,
              "nodeType": "StructuredDocumentation",
              "src": "3355:50:53",
              "text": "  @dev See {IERC20-totalSupply}."
            },
            "functionSelector": "18160ddd",
            "id": 12398,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupply",
            "nameLocation": "3419:11:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12391,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3447:8:53"
            },
            "parameters": {
              "id": 12390,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3430:2:53"
            },
            "returnParameters": {
              "id": 12394,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12393,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 12398,
                  "src": "3465:7:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12392,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3465:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3464:9:53"
            },
            "scope": 13849,
            "src": "3410:100:53",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              3274
            ],
            "body": {
              "id": 12411,
              "nodeType": "Block",
              "src": "3649:47:53",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 12407,
                      "name": "_balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12243,
                      "src": "3666:9:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 12409,
                    "indexExpression": {
                      "id": 12408,
                      "name": "_userAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12401,
                      "src": "3676:12:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3666:23:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 12406,
                  "id": 12410,
                  "nodeType": "Return",
                  "src": "3659:30:53"
                }
              ]
            },
            "documentation": {
              "id": 12399,
              "nodeType": "StructuredDocumentation",
              "src": "3516:48:53",
              "text": "  @dev See {IERC20-balanceOf}."
            },
            "functionSelector": "70a08231",
            "id": 12412,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nameLocation": "3578:9:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12403,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3622:8:53"
            },
            "parameters": {
              "id": 12402,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12401,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "3596:12:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12412,
                  "src": "3588:20:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12400,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3588:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3587:22:53"
            },
            "returnParameters": {
              "id": 12406,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12405,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 12412,
                  "src": "3640:7:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12404,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3640:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3639:9:53"
            },
            "scope": 13849,
            "src": "3569:127:53",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              3294
            ],
            "body": {
              "id": 12429,
              "nodeType": "Block",
              "src": "3857:53:53",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 12423,
                        "name": "_allowances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12249,
                        "src": "3874:11:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                          "typeString": "mapping(address => mapping(address => uint256))"
                        }
                      },
                      "id": 12425,
                      "indexExpression": {
                        "id": 12424,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12415,
                        "src": "3886:6:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "3874:19:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 12427,
                    "indexExpression": {
                      "id": 12426,
                      "name": "_spender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12417,
                      "src": "3894:8:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "3874:29:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 12422,
                  "id": 12428,
                  "nodeType": "Return",
                  "src": "3867:36:53"
                }
              ]
            },
            "documentation": {
              "id": 12413,
              "nodeType": "StructuredDocumentation",
              "src": "3702:48:53",
              "text": "  @dev See {IERC20-allowance}."
            },
            "functionSelector": "dd62ed3e",
            "id": 12430,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "allowance",
            "nameLocation": "3764:9:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12419,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3830:8:53"
            },
            "parameters": {
              "id": 12418,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12415,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "3782:6:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12430,
                  "src": "3774:14:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12414,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3774:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12417,
                  "mutability": "mutable",
                  "name": "_spender",
                  "nameLocation": "3798:8:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12430,
                  "src": "3790:16:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12416,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3790:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3773:34:53"
            },
            "returnParameters": {
              "id": 12422,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12421,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 12430,
                  "src": "3848:7:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12420,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3848:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3847:9:53"
            },
            "scope": 13849,
            "src": "3755:155:53",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              3304
            ],
            "body": {
              "id": 12450,
              "nodeType": "Block",
              "src": "4060:77:53",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 12442,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "4079:3:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 12443,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4083:6:53",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "4079:10:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12444,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12433,
                        "src": "4091:8:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12445,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12435,
                        "src": "4101:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 12441,
                      "name": "_approve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12720,
                      "src": "4070:8:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 12446,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4070:39:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12447,
                  "nodeType": "ExpressionStatement",
                  "src": "4070:39:53"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 12448,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4126:4:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 12440,
                  "id": 12449,
                  "nodeType": "Return",
                  "src": "4119:11:53"
                }
              ]
            },
            "documentation": {
              "id": 12431,
              "nodeType": "StructuredDocumentation",
              "src": "3916:46:53",
              "text": "  @dev See {IERC20-approve}."
            },
            "functionSelector": "095ea7b3",
            "id": 12451,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approve",
            "nameLocation": "3976:7:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12437,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4036:8:53"
            },
            "parameters": {
              "id": 12436,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12433,
                  "mutability": "mutable",
                  "name": "_spender",
                  "nameLocation": "3992:8:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12451,
                  "src": "3984:16:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12432,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3984:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12435,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "4010:7:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12451,
                  "src": "4002:15:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12434,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4002:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3983:35:53"
            },
            "returnParameters": {
              "id": 12440,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12439,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 12451,
                  "src": "4054:4:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12438,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4054:4:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4053:6:53"
            },
            "scope": 13849,
            "src": "3967:170:53",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12478,
              "nodeType": "Block",
              "src": "4301:119:53",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 12462,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "4320:3:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 12463,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4324:6:53",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "4320:10:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12464,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12454,
                        "src": "4332:8:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 12473,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 12465,
                              "name": "_allowances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12249,
                              "src": "4342:11:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 12468,
                            "indexExpression": {
                              "expression": {
                                "id": 12466,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967281,
                                "src": "4354:3:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 12467,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "4358:6:53",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "4354:10:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4342:23:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 12470,
                          "indexExpression": {
                            "id": 12469,
                            "name": "_spender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12454,
                            "src": "4366:8:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4342:33:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "components": [
                            {
                              "id": 12471,
                              "name": "_addedValue",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12456,
                              "src": "4379:11:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "id": 12472,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "4378:13:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4342:49:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 12461,
                      "name": "_approve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12720,
                      "src": "4311:8:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 12474,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4311:81:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12475,
                  "nodeType": "ExpressionStatement",
                  "src": "4311:81:53"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 12476,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4409:4:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 12460,
                  "id": 12477,
                  "nodeType": "Return",
                  "src": "4402:11:53"
                }
              ]
            },
            "documentation": {
              "id": 12452,
              "nodeType": "StructuredDocumentation",
              "src": "4143:55:53",
              "text": "  @dev See {ERC20-increaseAllowance}."
            },
            "functionSelector": "39509351",
            "id": 12479,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "increaseAllowance",
            "nameLocation": "4212:17:53",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12457,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12454,
                  "mutability": "mutable",
                  "name": "_spender",
                  "nameLocation": "4238:8:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12479,
                  "src": "4230:16:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12453,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4230:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12456,
                  "mutability": "mutable",
                  "name": "_addedValue",
                  "nameLocation": "4256:11:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12479,
                  "src": "4248:19:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12455,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4248:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4229:39:53"
            },
            "returnParameters": {
              "id": 12460,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12459,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 12479,
                  "src": "4295:4:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12458,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4295:4:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4294:6:53"
            },
            "scope": 13849,
            "src": "4203:217:53",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12505,
              "nodeType": "Block",
              "src": "4589:122:53",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 12490,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "4608:3:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 12491,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "4612:6:53",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "4608:10:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12492,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12482,
                        "src": "4620:8:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 12500,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "baseExpression": {
                              "id": 12493,
                              "name": "_allowances",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12249,
                              "src": "4630:11:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                "typeString": "mapping(address => mapping(address => uint256))"
                              }
                            },
                            "id": 12496,
                            "indexExpression": {
                              "expression": {
                                "id": 12494,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967281,
                                "src": "4642:3:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 12495,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "4646:6:53",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "4642:10:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4630:23:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 12498,
                          "indexExpression": {
                            "id": 12497,
                            "name": "_spender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12482,
                            "src": "4654:8:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "4630:33:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "id": 12499,
                          "name": "_subtractedValue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12484,
                          "src": "4666:16:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "4630:52:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 12489,
                      "name": "_approve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12720,
                      "src": "4599:8:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 12501,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4599:84:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12502,
                  "nodeType": "ExpressionStatement",
                  "src": "4599:84:53"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 12503,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4700:4:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 12488,
                  "id": 12504,
                  "nodeType": "Return",
                  "src": "4693:11:53"
                }
              ]
            },
            "documentation": {
              "id": 12480,
              "nodeType": "StructuredDocumentation",
              "src": "4426:55:53",
              "text": "  @dev See {ERC20-decreaseAllowance}."
            },
            "functionSelector": "a457c2d7",
            "id": 12506,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decreaseAllowance",
            "nameLocation": "4495:17:53",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12485,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12482,
                  "mutability": "mutable",
                  "name": "_spender",
                  "nameLocation": "4521:8:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12506,
                  "src": "4513:16:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12481,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4513:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12484,
                  "mutability": "mutable",
                  "name": "_subtractedValue",
                  "nameLocation": "4539:16:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12506,
                  "src": "4531:24:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12483,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4531:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4512:44:53"
            },
            "returnParameters": {
              "id": 12488,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12487,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 12506,
                  "src": "4583:4:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12486,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4583:4:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4582:6:53"
            },
            "scope": 13849,
            "src": "4486:225:53",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "external"
          },
          {
            "body": {
              "id": 12568,
              "nodeType": "Block",
              "src": "4876:364:53",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 12522,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 12517,
                          "name": "_from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12509,
                          "src": "4894:5:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 12520,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4911:1:53",
                              "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": 12519,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4903:7:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 12518,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4903:7:53",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 12521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4903:10:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "4894:19:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373",
                        "id": 12523,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4915:39:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                          "typeString": "literal_string \"ERC20: transfer from the zero address\""
                        },
                        "value": "ERC20: transfer from the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_baecc556b46f4ed0f2b4cb599d60785ac8563dd2dc0a5bf12edea1c39e5e1fea",
                          "typeString": "literal_string \"ERC20: transfer from the zero address\""
                        }
                      ],
                      "id": 12516,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "4886:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12524,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4886:69:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12525,
                  "nodeType": "ExpressionStatement",
                  "src": "4886:69:53"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 12532,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 12527,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12511,
                          "src": "4973:3:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 12530,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4988:1:53",
                              "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": 12529,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4980:7:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 12528,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4980:7:53",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 12531,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4980:10:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "4973:17:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a207472616e7366657220746f20746865207a65726f2061646472657373",
                        "id": 12533,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4992:37:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                          "typeString": "literal_string \"ERC20: transfer to the zero address\""
                        },
                        "value": "ERC20: transfer to the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0557e210f7a69a685100a7e4e3d0a7024c546085cee28910fd17d0b081d9516f",
                          "typeString": "literal_string \"ERC20: transfer to the zero address\""
                        }
                      ],
                      "id": 12526,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "4965:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12534,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4965:65:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12535,
                  "nodeType": "ExpressionStatement",
                  "src": "4965:65:53"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12537,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12509,
                        "src": "5062:5:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12538,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12511,
                        "src": "5069:3:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12539,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12513,
                        "src": "5074:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 12536,
                      "name": "_beforeTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12731,
                      "src": "5041:20:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 12540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5041:41:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12541,
                  "nodeType": "ExpressionStatement",
                  "src": "5041:41:53"
                },
                {
                  "expression": {
                    "id": 12550,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 12542,
                        "name": "_balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12243,
                        "src": "5093:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 12544,
                      "indexExpression": {
                        "id": 12543,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12509,
                        "src": "5103:5:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5093:16:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 12549,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "baseExpression": {
                          "id": 12545,
                          "name": "_balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12243,
                          "src": "5112:9:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 12547,
                        "indexExpression": {
                          "id": 12546,
                          "name": "_from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12509,
                          "src": "5122:5:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5112:16:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "id": 12548,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12513,
                        "src": "5131:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5112:26:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5093:45:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 12551,
                  "nodeType": "ExpressionStatement",
                  "src": "5093:45:53"
                },
                {
                  "expression": {
                    "id": 12560,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 12552,
                        "name": "_balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12243,
                        "src": "5148:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 12554,
                      "indexExpression": {
                        "id": 12553,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12511,
                        "src": "5158:3:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5148:14:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 12559,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "baseExpression": {
                          "id": 12555,
                          "name": "_balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12243,
                          "src": "5165:9:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 12557,
                        "indexExpression": {
                          "id": 12556,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12511,
                          "src": "5175:3:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5165:14:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "id": 12558,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12513,
                        "src": "5182:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5165:24:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5148:41:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 12561,
                  "nodeType": "ExpressionStatement",
                  "src": "5148:41:53"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 12563,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12509,
                        "src": "5213:5:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12564,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12511,
                        "src": "5220:3:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12565,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12513,
                        "src": "5225:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 12562,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3251,
                      "src": "5204:8:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 12566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5204:29:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12567,
                  "nodeType": "EmitStatement",
                  "src": "5199:34:53"
                }
              ]
            },
            "documentation": {
              "id": 12507,
              "nodeType": "StructuredDocumentation",
              "src": "4717:43:53",
              "text": "  @dev See {ERC20-_mint}."
            },
            "id": 12569,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_transfer",
            "nameLocation": "4774:9:53",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12514,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12509,
                  "mutability": "mutable",
                  "name": "_from",
                  "nameLocation": "4801:5:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12569,
                  "src": "4793:13:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12508,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4793:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12511,
                  "mutability": "mutable",
                  "name": "_to",
                  "nameLocation": "4824:3:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12569,
                  "src": "4816:11:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12510,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4816:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12513,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "4845:7:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12569,
                  "src": "4837:15:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12512,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4837:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4783:75:53"
            },
            "returnParameters": {
              "id": 12515,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4876:0:53"
            },
            "scope": 13849,
            "src": "4765:475:53",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12621,
              "nodeType": "Block",
              "src": "5365:328:53",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 12583,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 12578,
                          "name": "_userAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12572,
                          "src": "5383:12:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 12581,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5407:1:53",
                              "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": 12580,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5399:7:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 12579,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "5399:7:53",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 12582,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5399:10:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "5383:26:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a206d696e7420746f20746865207a65726f2061646472657373",
                        "id": 12584,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5411:33:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                          "typeString": "literal_string \"ERC20: mint to the zero address\""
                        },
                        "value": "ERC20: mint to the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fc0b381caf0a47702017f3c4b358ebe3d3aff6c60ce819a8bf3ef5a95d4f202e",
                          "typeString": "literal_string \"ERC20: mint to the zero address\""
                        }
                      ],
                      "id": 12577,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5375:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12585,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5375:70:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12586,
                  "nodeType": "ExpressionStatement",
                  "src": "5375:70:53"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 12590,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5485:1:53",
                            "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": 12589,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5477:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 12588,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5477:7:53",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 12591,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5477:10:53",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12592,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12572,
                        "src": "5489:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12593,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12574,
                        "src": "5503:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 12587,
                      "name": "_beforeTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12731,
                      "src": "5456:20:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 12594,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5456:55:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12595,
                  "nodeType": "ExpressionStatement",
                  "src": "5456:55:53"
                },
                {
                  "expression": {
                    "id": 12600,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12596,
                      "name": "_totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12251,
                      "src": "5522:12:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 12599,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 12597,
                        "name": "_totalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12251,
                        "src": "5537:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "id": 12598,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12574,
                        "src": "5552:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5537:22:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5522:37:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 12601,
                  "nodeType": "ExpressionStatement",
                  "src": "5522:37:53"
                },
                {
                  "expression": {
                    "id": 12610,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 12602,
                        "name": "_balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12243,
                        "src": "5569:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 12604,
                      "indexExpression": {
                        "id": 12603,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12572,
                        "src": "5579:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5569:23:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 12609,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "baseExpression": {
                          "id": 12605,
                          "name": "_balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12243,
                          "src": "5595:9:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 12607,
                        "indexExpression": {
                          "id": 12606,
                          "name": "_userAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12572,
                          "src": "5605:12:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5595:23:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "id": 12608,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12574,
                        "src": "5621:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "5595:33:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5569:59:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 12611,
                  "nodeType": "ExpressionStatement",
                  "src": "5569:59:53"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 12615,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5660:1:53",
                            "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": 12614,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5652:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 12613,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5652:7:53",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 12616,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5652:10:53",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12617,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12572,
                        "src": "5664:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12618,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12574,
                        "src": "5678:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 12612,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3251,
                      "src": "5643:8:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 12619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5643:43:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12620,
                  "nodeType": "EmitStatement",
                  "src": "5638:48:53"
                }
              ]
            },
            "documentation": {
              "id": 12570,
              "nodeType": "StructuredDocumentation",
              "src": "5246:43:53",
              "text": "  @dev See {ERC20-_mint}."
            },
            "id": 12622,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nameLocation": "5303:5:53",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12575,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12572,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "5317:12:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12622,
                  "src": "5309:20:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12571,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5309:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12574,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "5339:7:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12622,
                  "src": "5331:15:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12573,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5331:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5308:39:53"
            },
            "returnParameters": {
              "id": 12576,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5365:0:53"
            },
            "scope": 13849,
            "src": "5294:399:53",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12674,
              "nodeType": "Block",
              "src": "5818:330:53",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 12636,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 12631,
                          "name": "_userAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12625,
                          "src": "5836:12:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 12634,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "5860:1:53",
                              "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": 12633,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "5852:7:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 12632,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "5852:7:53",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 12635,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5852:10:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "5836:26:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a206275726e2066726f6d20746865207a65726f2061646472657373",
                        "id": 12637,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5864:35:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                          "typeString": "literal_string \"ERC20: burn from the zero address\""
                        },
                        "value": "ERC20: burn from the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b16788493b576042bb52c50ed56189e0b250db113c7bfb1c3897d25cf9632d7f",
                          "typeString": "literal_string \"ERC20: burn from the zero address\""
                        }
                      ],
                      "id": 12630,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "5828:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12638,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5828:72:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12639,
                  "nodeType": "ExpressionStatement",
                  "src": "5828:72:53"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 12641,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12625,
                        "src": "5932:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 12644,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5954:1:53",
                            "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": 12643,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5946:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 12642,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "5946:7:53",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 12645,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5946:10:53",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12646,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12627,
                        "src": "5958:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 12640,
                      "name": "_beforeTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12731,
                      "src": "5911:20:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 12647,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5911:55:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12648,
                  "nodeType": "ExpressionStatement",
                  "src": "5911:55:53"
                },
                {
                  "expression": {
                    "id": 12657,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 12649,
                        "name": "_balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12243,
                        "src": "5977:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 12651,
                      "indexExpression": {
                        "id": 12650,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12625,
                        "src": "5987:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5977:23:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 12656,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "baseExpression": {
                          "id": 12652,
                          "name": "_balances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12243,
                          "src": "6003:9:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 12654,
                        "indexExpression": {
                          "id": 12653,
                          "name": "_userAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12625,
                          "src": "6013:12:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6003:23:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "id": 12655,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12627,
                        "src": "6029:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "6003:33:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5977:59:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 12658,
                  "nodeType": "ExpressionStatement",
                  "src": "5977:59:53"
                },
                {
                  "expression": {
                    "id": 12663,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12659,
                      "name": "_totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12251,
                      "src": "6046:12:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 12662,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 12660,
                        "name": "_totalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12251,
                        "src": "6061:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "id": 12661,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12627,
                        "src": "6076:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "6061:22:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6046:37:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 12664,
                  "nodeType": "ExpressionStatement",
                  "src": "6046:37:53"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 12666,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12625,
                        "src": "6107:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 12669,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6129:1:53",
                            "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": 12668,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6121:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 12667,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "6121:7:53",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 12670,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6121:10:53",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12671,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12627,
                        "src": "6133:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 12665,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3251,
                      "src": "6098:8:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 12672,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6098:43:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12673,
                  "nodeType": "EmitStatement",
                  "src": "6093:48:53"
                }
              ]
            },
            "documentation": {
              "id": 12623,
              "nodeType": "StructuredDocumentation",
              "src": "5699:43:53",
              "text": "  @dev See {ERC20-_burn}."
            },
            "id": 12675,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_burn",
            "nameLocation": "5756:5:53",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12628,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12625,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "5770:12:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12675,
                  "src": "5762:20:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12624,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5762:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12627,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "5792:7:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12675,
                  "src": "5784:15:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12626,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5784:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5761:39:53"
            },
            "returnParameters": {
              "id": 12629,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5818:0:53"
            },
            "scope": 13849,
            "src": "5747:401:53",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12719,
              "nodeType": "Block",
              "src": "6321:265:53",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 12691,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 12686,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12678,
                          "src": "6339:6:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 12689,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6357:1:53",
                              "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": 12688,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6349:7:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 12687,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "6349:7:53",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 12690,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6349:10:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "6339:20:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373",
                        "id": 12692,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6361:38:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                          "typeString": "literal_string \"ERC20: approve from the zero address\""
                        },
                        "value": "ERC20: approve from the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c953f4879035ed60e766b34720f656aab5c697b141d924c283124ecedb91c208",
                          "typeString": "literal_string \"ERC20: approve from the zero address\""
                        }
                      ],
                      "id": 12685,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "6331:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12693,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6331:69:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12694,
                  "nodeType": "ExpressionStatement",
                  "src": "6331:69:53"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 12701,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 12696,
                          "name": "_spender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12680,
                          "src": "6418:8:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 12699,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6438:1:53",
                              "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": 12698,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "6430:7:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 12697,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "6430:7:53",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 12700,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6430:10:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "6418:22:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "45524332303a20617070726f766520746f20746865207a65726f2061646472657373",
                        "id": 12702,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6442:36:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                          "typeString": "literal_string \"ERC20: approve to the zero address\""
                        },
                        "value": "ERC20: approve to the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_24883cc5fe64ace9d0df1893501ecb93c77180f0ff69cca79affb3c316dc8029",
                          "typeString": "literal_string \"ERC20: approve to the zero address\""
                        }
                      ],
                      "id": 12695,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "6410:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12703,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6410:69:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12704,
                  "nodeType": "ExpressionStatement",
                  "src": "6410:69:53"
                },
                {
                  "expression": {
                    "id": 12711,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 12705,
                          "name": "_allowances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12249,
                          "src": "6490:11:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(address => uint256))"
                          }
                        },
                        "id": 12708,
                        "indexExpression": {
                          "id": 12706,
                          "name": "_owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12678,
                          "src": "6502:6:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "6490:19:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 12709,
                      "indexExpression": {
                        "id": 12707,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12680,
                        "src": "6510:8:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6490:29:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 12710,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12682,
                      "src": "6522:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6490:39:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 12712,
                  "nodeType": "ExpressionStatement",
                  "src": "6490:39:53"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 12714,
                        "name": "_owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12678,
                        "src": "6553:6:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12715,
                        "name": "_spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12680,
                        "src": "6561:8:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 12716,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12682,
                        "src": "6571:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 12713,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 3260,
                      "src": "6544:8:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 12717,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6544:35:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12718,
                  "nodeType": "EmitStatement",
                  "src": "6539:40:53"
                }
              ]
            },
            "documentation": {
              "id": 12676,
              "nodeType": "StructuredDocumentation",
              "src": "6154:46:53",
              "text": "  @dev See {ERC20-_approve}."
            },
            "id": 12720,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_approve",
            "nameLocation": "6214:8:53",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12683,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12678,
                  "mutability": "mutable",
                  "name": "_owner",
                  "nameLocation": "6240:6:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12720,
                  "src": "6232:14:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12677,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6232:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12680,
                  "mutability": "mutable",
                  "name": "_spender",
                  "nameLocation": "6264:8:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12720,
                  "src": "6256:16:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12679,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6256:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12682,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "6290:7:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12720,
                  "src": "6282:15:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12681,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6282:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6222:81:53"
            },
            "returnParameters": {
              "id": 12684,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6321:0:53"
            },
            "scope": 13849,
            "src": "6205:381:53",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 12730,
              "nodeType": "Block",
              "src": "6777:2:53",
              "statements": []
            },
            "documentation": {
              "id": 12721,
              "nodeType": "StructuredDocumentation",
              "src": "6592:58:53",
              "text": "  @dev See {ERC20-_beforeTokenTransfer}."
            },
            "id": 12731,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_beforeTokenTransfer",
            "nameLocation": "6664:20:53",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 12728,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12723,
                  "mutability": "mutable",
                  "name": "_from",
                  "nameLocation": "6702:5:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12731,
                  "src": "6694:13:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12722,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6694:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12725,
                  "mutability": "mutable",
                  "name": "_to",
                  "nameLocation": "6725:3:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12731,
                  "src": "6717:11:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12724,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6717:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12727,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "6746:7:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12731,
                  "src": "6738:15:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12726,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6738:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6684:75:53"
            },
            "returnParameters": {
              "id": 12729,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6777:0:53"
            },
            "scope": 13849,
            "src": "6655:124:53",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "baseFunctions": [
              11980
            ],
            "body": {
              "id": 12740,
              "nodeType": "Block",
              "src": "6896:37:53",
              "statements": [
                {
                  "expression": {
                    "id": 12738,
                    "name": "tokenDecimals",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12258,
                    "src": "6913:13:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "functionReturnParameters": 12737,
                  "id": 12739,
                  "nodeType": "Return",
                  "src": "6906:20:53"
                }
              ]
            },
            "documentation": {
              "id": 12732,
              "nodeType": "StructuredDocumentation",
              "src": "6785:47:53",
              "text": "  @dev See {IToken-decimals}."
            },
            "functionSelector": "313ce567",
            "id": 12741,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decimals",
            "nameLocation": "6846:8:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12734,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6871:8:53"
            },
            "parameters": {
              "id": 12733,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6854:2:53"
            },
            "returnParameters": {
              "id": 12737,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12736,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 12741,
                  "src": "6889:5:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 12735,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "6889:5:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6888:7:53"
            },
            "scope": 13849,
            "src": "6837:96:53",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              11986
            ],
            "body": {
              "id": 12750,
              "nodeType": "Block",
              "src": "7050:33:53",
              "statements": [
                {
                  "expression": {
                    "id": 12748,
                    "name": "tokenName",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12254,
                    "src": "7067:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 12747,
                  "id": 12749,
                  "nodeType": "Return",
                  "src": "7060:16:53"
                }
              ]
            },
            "documentation": {
              "id": 12742,
              "nodeType": "StructuredDocumentation",
              "src": "6939:43:53",
              "text": "  @dev See {IToken-name}."
            },
            "functionSelector": "06fdde03",
            "id": 12751,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "name",
            "nameLocation": "6996:4:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12744,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7017:8:53"
            },
            "parameters": {
              "id": 12743,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7000:2:53"
            },
            "returnParameters": {
              "id": 12747,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12746,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 12751,
                  "src": "7035:13:53",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12745,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7035:6:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7034:15:53"
            },
            "scope": 13849,
            "src": "6987:96:53",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              11992
            ],
            "body": {
              "id": 12760,
              "nodeType": "Block",
              "src": "7204:38:53",
              "statements": [
                {
                  "expression": {
                    "id": 12758,
                    "name": "tokenOnchainID",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12260,
                    "src": "7221:14:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "functionReturnParameters": 12757,
                  "id": 12759,
                  "nodeType": "Return",
                  "src": "7214:21:53"
                }
              ]
            },
            "documentation": {
              "id": 12752,
              "nodeType": "StructuredDocumentation",
              "src": "7089:48:53",
              "text": "  @dev See {IToken-onchainID}."
            },
            "functionSelector": "aba63705",
            "id": 12761,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "onchainID",
            "nameLocation": "7151:9:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12754,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7177:8:53"
            },
            "parameters": {
              "id": 12753,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7160:2:53"
            },
            "returnParameters": {
              "id": 12757,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12756,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 12761,
                  "src": "7195:7:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12755,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7195:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7194:9:53"
            },
            "scope": 13849,
            "src": "7142:100:53",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              11998
            ],
            "body": {
              "id": 12770,
              "nodeType": "Block",
              "src": "7363:35:53",
              "statements": [
                {
                  "expression": {
                    "id": 12768,
                    "name": "tokenSymbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12256,
                    "src": "7380:11:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 12767,
                  "id": 12769,
                  "nodeType": "Return",
                  "src": "7373:18:53"
                }
              ]
            },
            "documentation": {
              "id": 12762,
              "nodeType": "StructuredDocumentation",
              "src": "7248:45:53",
              "text": "  @dev See {IToken-symbol}."
            },
            "functionSelector": "95d89b41",
            "id": 12771,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "symbol",
            "nameLocation": "7307:6:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12764,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7330:8:53"
            },
            "parameters": {
              "id": 12763,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7313:2:53"
            },
            "returnParameters": {
              "id": 12767,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12766,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 12771,
                  "src": "7348:13:53",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12765,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7348:6:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7347:15:53"
            },
            "scope": 13849,
            "src": "7298:100:53",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12004
            ],
            "body": {
              "id": 12780,
              "nodeType": "Block",
              "src": "7521:37:53",
              "statements": [
                {
                  "expression": {
                    "id": 12778,
                    "name": "TOKEN_VERSION",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12263,
                    "src": "7538:13:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 12777,
                  "id": 12779,
                  "nodeType": "Return",
                  "src": "7531:20:53"
                }
              ]
            },
            "documentation": {
              "id": 12772,
              "nodeType": "StructuredDocumentation",
              "src": "7404:46:53",
              "text": "  @dev See {IToken-version}."
            },
            "functionSelector": "54fd4d50",
            "id": 12781,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "version",
            "nameLocation": "7464:7:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12774,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7488:8:53"
            },
            "parameters": {
              "id": 12773,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7471:2:53"
            },
            "returnParameters": {
              "id": 12777,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12776,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 12781,
                  "src": "7506:13:53",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12775,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7506:6:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7505:15:53"
            },
            "scope": 13849,
            "src": "7455:103:53",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12046
            ],
            "body": {
              "id": 12802,
              "nodeType": "Block",
              "src": "7683:142:53",
              "statements": [
                {
                  "expression": {
                    "id": 12792,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12790,
                      "name": "tokenName",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12254,
                      "src": "7693:9:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 12791,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12784,
                      "src": "7705:5:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_calldata_ptr",
                        "typeString": "string calldata"
                      }
                    },
                    "src": "7693:17:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 12793,
                  "nodeType": "ExpressionStatement",
                  "src": "7693:17:53"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 12795,
                        "name": "tokenName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12254,
                        "src": "7749:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        }
                      },
                      {
                        "id": 12796,
                        "name": "tokenSymbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12256,
                        "src": "7760:11:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        }
                      },
                      {
                        "id": 12797,
                        "name": "tokenDecimals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12258,
                        "src": "7773:13:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 12798,
                        "name": "TOKEN_VERSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12263,
                        "src": "7788:13:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "id": 12799,
                        "name": "tokenOnchainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12260,
                        "src": "7803:14:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        },
                        {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 12794,
                      "name": "UpdatedTokenInformation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11922,
                      "src": "7725:23:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint8_$_t_string_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (string memory,string memory,uint8,string memory,address)"
                      }
                    },
                    "id": 12800,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7725:93:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12801,
                  "nodeType": "EmitStatement",
                  "src": "7720:98:53"
                }
              ]
            },
            "documentation": {
              "id": 12782,
              "nodeType": "StructuredDocumentation",
              "src": "7564:46:53",
              "text": "  @dev See {IToken-setName}."
            },
            "functionSelector": "c47f0027",
            "id": 12803,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 12788,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 12787,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "7673:9:53"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 1870,
                  "src": "7673:9:53"
                },
                "nodeType": "ModifierInvocation",
                "src": "7673:9:53"
              }
            ],
            "name": "setName",
            "nameLocation": "7624:7:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12786,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7664:8:53"
            },
            "parameters": {
              "id": 12785,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12784,
                  "mutability": "mutable",
                  "name": "_name",
                  "nameLocation": "7648:5:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12803,
                  "src": "7632:21:53",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12783,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7632:6:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7631:23:53"
            },
            "returnParameters": {
              "id": 12789,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7683:0:53"
            },
            "scope": 13849,
            "src": "7615:210:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12052
            ],
            "body": {
              "id": 12824,
              "nodeType": "Block",
              "src": "7956:146:53",
              "statements": [
                {
                  "expression": {
                    "id": 12814,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12812,
                      "name": "tokenSymbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12256,
                      "src": "7966:11:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 12813,
                      "name": "_symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12806,
                      "src": "7980:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_calldata_ptr",
                        "typeString": "string calldata"
                      }
                    },
                    "src": "7966:21:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 12815,
                  "nodeType": "ExpressionStatement",
                  "src": "7966:21:53"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 12817,
                        "name": "tokenName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12254,
                        "src": "8026:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        }
                      },
                      {
                        "id": 12818,
                        "name": "tokenSymbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12256,
                        "src": "8037:11:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        }
                      },
                      {
                        "id": 12819,
                        "name": "tokenDecimals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12258,
                        "src": "8050:13:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 12820,
                        "name": "TOKEN_VERSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12263,
                        "src": "8065:13:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "id": 12821,
                        "name": "tokenOnchainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12260,
                        "src": "8080:14:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        },
                        {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 12816,
                      "name": "UpdatedTokenInformation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11922,
                      "src": "8002:23:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint8_$_t_string_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (string memory,string memory,uint8,string memory,address)"
                      }
                    },
                    "id": 12822,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8002:93:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12823,
                  "nodeType": "EmitStatement",
                  "src": "7997:98:53"
                }
              ]
            },
            "documentation": {
              "id": 12804,
              "nodeType": "StructuredDocumentation",
              "src": "7831:48:53",
              "text": "  @dev See {IToken-setSymbol}."
            },
            "functionSelector": "b84c8246",
            "id": 12825,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 12810,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 12809,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "7946:9:53"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 1870,
                  "src": "7946:9:53"
                },
                "nodeType": "ModifierInvocation",
                "src": "7946:9:53"
              }
            ],
            "name": "setSymbol",
            "nameLocation": "7893:9:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12808,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7937:8:53"
            },
            "parameters": {
              "id": 12807,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12806,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nameLocation": "7919:7:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12825,
                  "src": "7903:23:53",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_calldata_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 12805,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "7903:6:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7902:25:53"
            },
            "returnParameters": {
              "id": 12811,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7956:0:53"
            },
            "scope": 13849,
            "src": "7884:218:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12058
            ],
            "body": {
              "id": 12846,
              "nodeType": "Block",
              "src": "8234:152:53",
              "statements": [
                {
                  "expression": {
                    "id": 12836,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12834,
                      "name": "tokenOnchainID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12260,
                      "src": "8244:14:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 12835,
                      "name": "_onchainID",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12828,
                      "src": "8261:10:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "8244:27:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 12837,
                  "nodeType": "ExpressionStatement",
                  "src": "8244:27:53"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 12839,
                        "name": "tokenName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12254,
                        "src": "8310:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        }
                      },
                      {
                        "id": 12840,
                        "name": "tokenSymbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12256,
                        "src": "8321:11:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        }
                      },
                      {
                        "id": 12841,
                        "name": "tokenDecimals",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12258,
                        "src": "8334:13:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "id": 12842,
                        "name": "TOKEN_VERSION",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12263,
                        "src": "8349:13:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "id": 12843,
                        "name": "tokenOnchainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12260,
                        "src": "8364:14:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        },
                        {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 12838,
                      "name": "UpdatedTokenInformation",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11922,
                      "src": "8286:23:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint8_$_t_string_memory_ptr_$_t_address_$returns$__$",
                        "typeString": "function (string memory,string memory,uint8,string memory,address)"
                      }
                    },
                    "id": 12844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8286:93:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12845,
                  "nodeType": "EmitStatement",
                  "src": "8281:98:53"
                }
              ]
            },
            "documentation": {
              "id": 12826,
              "nodeType": "StructuredDocumentation",
              "src": "8108:51:53",
              "text": "  @dev See {IToken-setOnchainID}."
            },
            "functionSelector": "3d1ddc5b",
            "id": 12847,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 12832,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 12831,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "8224:9:53"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 1870,
                  "src": "8224:9:53"
                },
                "nodeType": "ModifierInvocation",
                "src": "8224:9:53"
              }
            ],
            "name": "setOnchainID",
            "nameLocation": "8173:12:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12830,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8215:8:53"
            },
            "parameters": {
              "id": 12829,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12828,
                  "mutability": "mutable",
                  "name": "_onchainID",
                  "nameLocation": "8194:10:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12847,
                  "src": "8186:18:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12827,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8186:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8185:20:53"
            },
            "returnParameters": {
              "id": 12833,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8234:0:53"
            },
            "scope": 13849,
            "src": "8164:222:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12024
            ],
            "body": {
              "id": 12856,
              "nodeType": "Block",
              "src": "8498:35:53",
              "statements": [
                {
                  "expression": {
                    "id": 12854,
                    "name": "tokenPaused",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12275,
                    "src": "8515:11:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 12853,
                  "id": 12855,
                  "nodeType": "Return",
                  "src": "8508:18:53"
                }
              ]
            },
            "documentation": {
              "id": 12848,
              "nodeType": "StructuredDocumentation",
              "src": "8392:45:53",
              "text": "  @dev See {IToken-paused}."
            },
            "functionSelector": "5c975abb",
            "id": 12857,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "paused",
            "nameLocation": "8451:6:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12850,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8474:8:53"
            },
            "parameters": {
              "id": 12849,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8457:2:53"
            },
            "returnParameters": {
              "id": 12853,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12852,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 12857,
                  "src": "8492:4:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12851,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8492:4:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8491:6:53"
            },
            "scope": 13849,
            "src": "8442:91:53",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12032
            ],
            "body": {
              "id": 12870,
              "nodeType": "Block",
              "src": "8669:44:53",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 12866,
                      "name": "frozen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12268,
                      "src": "8686:6:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 12868,
                    "indexExpression": {
                      "id": 12867,
                      "name": "_userAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12860,
                      "src": "8693:12:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8686:20:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 12865,
                  "id": 12869,
                  "nodeType": "Return",
                  "src": "8679:27:53"
                }
              ]
            },
            "documentation": {
              "id": 12858,
              "nodeType": "StructuredDocumentation",
              "src": "8539:47:53",
              "text": "  @dev See {IToken-isFrozen}."
            },
            "functionSelector": "e5839836",
            "id": 12871,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isFrozen",
            "nameLocation": "8600:8:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12862,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8645:8:53"
            },
            "parameters": {
              "id": 12861,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12860,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "8617:12:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12871,
                  "src": "8609:20:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12859,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8609:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8608:22:53"
            },
            "returnParameters": {
              "id": 12865,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12864,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 12871,
                  "src": "8663:4:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12863,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8663:4:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8662:6:53"
            },
            "scope": 13849,
            "src": "8591:122:53",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12040
            ],
            "body": {
              "id": 12884,
              "nodeType": "Block",
              "src": "8866:50:53",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 12880,
                      "name": "frozenTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12272,
                      "src": "8883:12:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 12882,
                    "indexExpression": {
                      "id": 12881,
                      "name": "_userAddress",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12874,
                      "src": "8896:12:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "8883:26:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 12879,
                  "id": 12883,
                  "nodeType": "Return",
                  "src": "8876:33:53"
                }
              ]
            },
            "documentation": {
              "id": 12872,
              "nodeType": "StructuredDocumentation",
              "src": "8719:54:53",
              "text": "  @dev See {IToken-getFrozenTokens}."
            },
            "functionSelector": "158b1a57",
            "id": 12885,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getFrozenTokens",
            "nameLocation": "8787:15:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12876,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8839:8:53"
            },
            "parameters": {
              "id": 12875,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12874,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "8811:12:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12885,
                  "src": "8803:20:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12873,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8803:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8802:22:53"
            },
            "returnParameters": {
              "id": 12879,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12878,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 12885,
                  "src": "8857:7:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12877,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8857:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8856:9:53"
            },
            "scope": 13849,
            "src": "8778:138:53",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              3284
            ],
            "body": {
              "id": 12964,
              "nodeType": "Block",
              "src": "9485:487:53",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 12908,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 12902,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "9503:12:53",
                          "subExpression": {
                            "baseExpression": {
                              "id": 12899,
                              "name": "frozen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12268,
                              "src": "9504:6:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 12901,
                            "indexExpression": {
                              "id": 12900,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12888,
                              "src": "9511:3:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9504:11:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "id": 12907,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "9519:19:53",
                          "subExpression": {
                            "baseExpression": {
                              "id": 12903,
                              "name": "frozen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12268,
                              "src": "9520:6:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 12906,
                            "indexExpression": {
                              "expression": {
                                "id": 12904,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967281,
                                "src": "9527:3:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 12905,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "9531:6:53",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "9527:10:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9520:18:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "9503:35:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "77616c6c65742069732066726f7a656e",
                        "id": 12909,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9540:18:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6fdeb49fa8dca802b99c2a57b8d3c6989632cc684eeb0ba36d157473853eb95f",
                          "typeString": "literal_string \"wallet is frozen\""
                        },
                        "value": "wallet is frozen"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6fdeb49fa8dca802b99c2a57b8d3c6989632cc684eeb0ba36d157473853eb95f",
                          "typeString": "literal_string \"wallet is frozen\""
                        }
                      ],
                      "id": 12898,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "9495:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12910,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9495:64:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12911,
                  "nodeType": "ExpressionStatement",
                  "src": "9495:64:53"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 12924,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 12913,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12890,
                          "src": "9577:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 12923,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "expression": {
                                  "id": 12915,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 4294967281,
                                  "src": "9598:3:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 12916,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "9602:6:53",
                                "memberName": "sender",
                                "nodeType": "MemberAccess",
                                "src": "9598:10:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 12914,
                              "name": "balanceOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12412,
                              "src": "9588:9:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view returns (uint256)"
                              }
                            },
                            "id": 12917,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9588:21:53",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "components": [
                              {
                                "baseExpression": {
                                  "id": 12918,
                                  "name": "frozenTokens",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12272,
                                  "src": "9613:12:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 12921,
                                "indexExpression": {
                                  "expression": {
                                    "id": 12919,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967281,
                                    "src": "9626:3:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 12920,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "9630:6:53",
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "9626:10:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "9613:24:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 12922,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "9612:26:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9588:50:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9577:61:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "496e73756666696369656e742042616c616e6365",
                        "id": 12925,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9640:22:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b80e76e4c9dd95c0a6a7ab97569124291f4757bb9e5ff42d1e95905b42144c82",
                          "typeString": "literal_string \"Insufficient Balance\""
                        },
                        "value": "Insufficient Balance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b80e76e4c9dd95c0a6a7ab97569124291f4757bb9e5ff42d1e95905b42144c82",
                          "typeString": "literal_string \"Insufficient Balance\""
                        }
                      ],
                      "id": 12912,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "9569:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 12926,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9569:94:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12927,
                  "nodeType": "ExpressionStatement",
                  "src": "9569:94:53"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 12939,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 12930,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12888,
                          "src": "9710:3:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "id": 12928,
                          "name": "tokenIdentityRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12279,
                          "src": "9677:21:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                            "typeString": "contract IIdentityRegistry"
                          }
                        },
                        "id": 12929,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "9699:10:53",
                        "memberName": "isVerified",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6580,
                        "src": "9677:32:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view external returns (bool)"
                        }
                      },
                      "id": 12931,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9677:37:53",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 12934,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967281,
                            "src": "9746:3:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 12935,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "9750:6:53",
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "9746:10:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 12936,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12888,
                          "src": "9758:3:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 12937,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12890,
                          "src": "9763:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 12932,
                          "name": "tokenCompliance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12283,
                          "src": "9718:15:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ICompliance_$5596",
                            "typeString": "contract ICompliance"
                          }
                        },
                        "id": 12933,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "9734:11:53",
                        "memberName": "canTransfer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5563,
                        "src": "9718:27:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                          "typeString": "function (address,address,uint256) view external returns (bool)"
                        }
                      },
                      "id": 12938,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9718:53:53",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "9677:94:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12959,
                  "nodeType": "IfStatement",
                  "src": "9673:252:53",
                  "trueBody": {
                    "id": 12958,
                    "nodeType": "Block",
                    "src": "9773:152:53",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 12943,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967281,
                                "src": "9815:3:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 12944,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "9819:6:53",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "9815:10:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 12945,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12888,
                              "src": "9827:3:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 12946,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12890,
                              "src": "9832:7:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 12940,
                              "name": "tokenCompliance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12283,
                              "src": "9787:15:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ICompliance_$5596",
                                "typeString": "contract ICompliance"
                              }
                            },
                            "id": 12942,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "9803:11:53",
                            "memberName": "transferred",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5573,
                            "src": "9787:27:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256) external"
                            }
                          },
                          "id": 12947,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9787:53:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 12948,
                        "nodeType": "ExpressionStatement",
                        "src": "9787:53:53"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "expression": {
                                "id": 12950,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967281,
                                "src": "9864:3:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 12951,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "9868:6:53",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "9864:10:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 12952,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12888,
                              "src": "9876:3:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 12953,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12890,
                              "src": "9881:7:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 12949,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12569,
                            "src": "9854:9:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 12954,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9854:35:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 12955,
                        "nodeType": "ExpressionStatement",
                        "src": "9854:35:53"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 12956,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9910:4:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 12897,
                        "id": 12957,
                        "nodeType": "Return",
                        "src": "9903:11:53"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "5472616e73666572206e6f7420706f737369626c65",
                        "id": 12961,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9941:23:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_965de3177b9ab9d8ebf7092e1d4b11b84b3f5ec94a07ac1a7dcc6c263a2b34af",
                          "typeString": "literal_string \"Transfer not possible\""
                        },
                        "value": "Transfer not possible"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_965de3177b9ab9d8ebf7092e1d4b11b84b3f5ec94a07ac1a7dcc6c263a2b34af",
                          "typeString": "literal_string \"Transfer not possible\""
                        }
                      ],
                      "id": 12960,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967277,
                        4294967277
                      ],
                      "referencedDeclaration": 4294967277,
                      "src": "9934:6:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 12962,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9934:31:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12963,
                  "nodeType": "ExpressionStatement",
                  "src": "9934:31:53"
                }
              ]
            },
            "documentation": {
              "id": 12886,
              "nodeType": "StructuredDocumentation",
              "src": "8922:465:53",
              "text": "  @notice ERC-20 overridden function that include logic to check for trade validity.\n  Require that the msg.sender and to addresses are not frozen.\n  Require that the value should not exceed available balance .\n  Require that the to address is a verified address\n  @param _to The address of the receiver\n  @param _amount The number of tokens to transfer\n  @return `true` if successful and revert if unsuccessful"
            },
            "functionSelector": "a9059cbb",
            "id": 12965,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 12894,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 12893,
                  "name": "whenNotPaused",
                  "nameLocations": [
                    "9456:13:53"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 12378,
                  "src": "9456:13:53"
                },
                "nodeType": "ModifierInvocation",
                "src": "9456:13:53"
              }
            ],
            "name": "transfer",
            "nameLocation": "9401:8:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12892,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "9447:8:53"
            },
            "parameters": {
              "id": 12891,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12888,
                  "mutability": "mutable",
                  "name": "_to",
                  "nameLocation": "9418:3:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12965,
                  "src": "9410:11:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 12887,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9410:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 12890,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "9431:7:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 12965,
                  "src": "9423:15:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 12889,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9423:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9409:30:53"
            },
            "returnParameters": {
              "id": 12897,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 12896,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 12965,
                  "src": "9479:4:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 12895,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9479:4:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9478:6:53"
            },
            "scope": 13849,
            "src": "9392:580:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              12062
            ],
            "body": {
              "id": 12983,
              "nodeType": "Block",
              "src": "10086:68:53",
              "statements": [
                {
                  "expression": {
                    "id": 12976,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12974,
                      "name": "tokenPaused",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12275,
                      "src": "10096:11:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 12975,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10110:4:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "10096:18:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12977,
                  "nodeType": "ExpressionStatement",
                  "src": "10096:18:53"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 12979,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "10136:3:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 12980,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "10140:6:53",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "10136:10:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 12978,
                      "name": "Paused",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11969,
                      "src": "10129:6:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 12981,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10129:18:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 12982,
                  "nodeType": "EmitStatement",
                  "src": "10124:23:53"
                }
              ]
            },
            "documentation": {
              "id": 12966,
              "nodeType": "StructuredDocumentation",
              "src": "9978:44:53",
              "text": "  @dev See {IToken-pause}."
            },
            "functionSelector": "8456cb59",
            "id": 12984,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 12970,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 12969,
                  "name": "onlyAgent",
                  "nameLocations": [
                    "10062:9:53"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9153,
                  "src": "10062:9:53"
                },
                "nodeType": "ModifierInvocation",
                "src": "10062:9:53"
              },
              {
                "id": 12972,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 12971,
                  "name": "whenNotPaused",
                  "nameLocations": [
                    "10072:13:53"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 12378,
                  "src": "10072:13:53"
                },
                "nodeType": "ModifierInvocation",
                "src": "10072:13:53"
              }
            ],
            "name": "pause",
            "nameLocation": "10036:5:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12968,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10053:8:53"
            },
            "parameters": {
              "id": 12967,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10041:2:53"
            },
            "returnParameters": {
              "id": 12973,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10086:0:53"
            },
            "scope": 13849,
            "src": "10027:127:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12066
            ],
            "body": {
              "id": 13002,
              "nodeType": "Block",
              "src": "10269:71:53",
              "statements": [
                {
                  "expression": {
                    "id": 12995,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 12993,
                      "name": "tokenPaused",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12275,
                      "src": "10279:11:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "66616c7365",
                      "id": 12994,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10293:5:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "10279:19:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 12996,
                  "nodeType": "ExpressionStatement",
                  "src": "10279:19:53"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 12998,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "10322:3:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 12999,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "10326:6:53",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "10322:10:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 12997,
                      "name": "Unpaused",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11974,
                      "src": "10313:8:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 13000,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10313:20:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13001,
                  "nodeType": "EmitStatement",
                  "src": "10308:25:53"
                }
              ]
            },
            "documentation": {
              "id": 12985,
              "nodeType": "StructuredDocumentation",
              "src": "10160:46:53",
              "text": "  @dev See {IToken-unpause}."
            },
            "functionSelector": "3f4ba83a",
            "id": 13003,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 12989,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 12988,
                  "name": "onlyAgent",
                  "nameLocations": [
                    "10248:9:53"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9153,
                  "src": "10248:9:53"
                },
                "nodeType": "ModifierInvocation",
                "src": "10248:9:53"
              },
              {
                "id": 12991,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 12990,
                  "name": "whenPaused",
                  "nameLocations": [
                    "10258:10:53"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 12388,
                  "src": "10258:10:53"
                },
                "nodeType": "ModifierInvocation",
                "src": "10258:10:53"
              }
            ],
            "name": "unpause",
            "nameLocation": "10220:7:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 12987,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10239:8:53"
            },
            "parameters": {
              "id": 12986,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10227:2:53"
            },
            "returnParameters": {
              "id": 12992,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10269:0:53"
            },
            "scope": 13849,
            "src": "10211:129:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12011
            ],
            "body": {
              "id": 13013,
              "nodeType": "Block",
              "src": "10485:45:53",
              "statements": [
                {
                  "expression": {
                    "id": 13011,
                    "name": "tokenIdentityRegistry",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12279,
                    "src": "10502:21:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                      "typeString": "contract IIdentityRegistry"
                    }
                  },
                  "functionReturnParameters": 13010,
                  "id": 13012,
                  "nodeType": "Return",
                  "src": "10495:28:53"
                }
              ]
            },
            "documentation": {
              "id": 13004,
              "nodeType": "StructuredDocumentation",
              "src": "10346:55:53",
              "text": "  @dev See {IToken-identityRegistry}."
            },
            "functionSelector": "134e18f4",
            "id": 13014,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "identityRegistry",
            "nameLocation": "10415:16:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13006,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10448:8:53"
            },
            "parameters": {
              "id": 13005,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10431:2:53"
            },
            "returnParameters": {
              "id": 13010,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13009,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 13014,
                  "src": "10466:17:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                    "typeString": "contract IIdentityRegistry"
                  },
                  "typeName": {
                    "id": 13008,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 13007,
                      "name": "IIdentityRegistry",
                      "nameLocations": [
                        "10466:17:53"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 6637,
                      "src": "10466:17:53"
                    },
                    "referencedDeclaration": 6637,
                    "src": "10466:17:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                      "typeString": "contract IIdentityRegistry"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10465:19:53"
            },
            "scope": 13849,
            "src": "10406:124:53",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12018
            ],
            "body": {
              "id": 13024,
              "nodeType": "Block",
              "src": "10657:39:53",
              "statements": [
                {
                  "expression": {
                    "id": 13022,
                    "name": "tokenCompliance",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 12283,
                    "src": "10674:15:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICompliance_$5596",
                      "typeString": "contract ICompliance"
                    }
                  },
                  "functionReturnParameters": 13021,
                  "id": 13023,
                  "nodeType": "Return",
                  "src": "10667:22:53"
                }
              ]
            },
            "documentation": {
              "id": 13015,
              "nodeType": "StructuredDocumentation",
              "src": "10536:49:53",
              "text": "  @dev See {IToken-compliance}."
            },
            "functionSelector": "6290865d",
            "id": 13025,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "compliance",
            "nameLocation": "10599:10:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13017,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10626:8:53"
            },
            "parameters": {
              "id": 13016,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10609:2:53"
            },
            "returnParameters": {
              "id": 13021,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13020,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 13025,
                  "src": "10644:11:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ICompliance_$5596",
                    "typeString": "contract ICompliance"
                  },
                  "typeName": {
                    "id": 13019,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 13018,
                      "name": "ICompliance",
                      "nameLocations": [
                        "10644:11:53"
                      ],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 5596,
                      "src": "10644:11:53"
                    },
                    "referencedDeclaration": 5596,
                    "src": "10644:11:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICompliance_$5596",
                      "typeString": "contract ICompliance"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10643:13:53"
            },
            "scope": 13849,
            "src": "10590:106:53",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12152
            ],
            "body": {
              "id": 13058,
              "nodeType": "Block",
              "src": "10857:119:53",
              "statements": [
                {
                  "body": {
                    "id": 13056,
                    "nodeType": "Block",
                    "src": "10912:58:53",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 13048,
                                "name": "_toList",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13029,
                                "src": "10935:7:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 13050,
                              "indexExpression": {
                                "id": 13049,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13037,
                                "src": "10943:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10935:10:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 13051,
                                "name": "_amounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13032,
                                "src": "10947:8:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 13053,
                              "indexExpression": {
                                "id": 13052,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13037,
                                "src": "10956:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10947:11:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 13047,
                            "name": "transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12965,
                            "src": "10926:8:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) returns (bool)"
                            }
                          },
                          "id": 13054,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10926:33:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 13055,
                        "nodeType": "ExpressionStatement",
                        "src": "10926:33:53"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13043,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 13040,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13037,
                      "src": "10887:1:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 13041,
                        "name": "_toList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13029,
                        "src": "10891:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 13042,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "10899:6:53",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "10891:14:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10887:18:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13057,
                  "initializationExpression": {
                    "assignments": [
                      13037
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 13037,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "10880:1:53",
                        "nodeType": "VariableDeclaration",
                        "scope": 13057,
                        "src": "10872:9:53",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13036,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10872:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 13039,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 13038,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10884:1:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "10872:13:53"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 13045,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "10907:3:53",
                      "subExpression": {
                        "id": 13044,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13037,
                        "src": "10907:1:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13046,
                    "nodeType": "ExpressionStatement",
                    "src": "10907:3:53"
                  },
                  "nodeType": "ForStatement",
                  "src": "10867:103:53"
                }
              ]
            },
            "documentation": {
              "id": 13026,
              "nodeType": "StructuredDocumentation",
              "src": "10702:52:53",
              "text": "  @dev See {IToken-batchTransfer}."
            },
            "functionSelector": "88d695b2",
            "id": 13059,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "batchTransfer",
            "nameLocation": "10768:13:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13034,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "10848:8:53"
            },
            "parameters": {
              "id": 13033,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13029,
                  "mutability": "mutable",
                  "name": "_toList",
                  "nameLocation": "10801:7:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13059,
                  "src": "10782:26:53",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13027,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "10782:7:53",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 13028,
                    "nodeType": "ArrayTypeName",
                    "src": "10782:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13032,
                  "mutability": "mutable",
                  "name": "_amounts",
                  "nameLocation": "10829:8:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13059,
                  "src": "10810:27:53",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13030,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "10810:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13031,
                    "nodeType": "ArrayTypeName",
                    "src": "10810:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10781:57:53"
            },
            "returnParameters": {
              "id": 13035,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10857:0:53"
            },
            "scope": 13849,
            "src": "10759:217:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              3316
            ],
            "body": {
              "id": 13149,
              "nodeType": "Block",
              "src": "11637:543:53",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 13083,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 13078,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "11655:12:53",
                          "subExpression": {
                            "baseExpression": {
                              "id": 13075,
                              "name": "frozen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12268,
                              "src": "11656:6:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 13077,
                            "indexExpression": {
                              "id": 13076,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13064,
                              "src": "11663:3:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11656:11:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "id": 13082,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "11671:14:53",
                          "subExpression": {
                            "baseExpression": {
                              "id": 13079,
                              "name": "frozen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12268,
                              "src": "11672:6:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 13081,
                            "indexExpression": {
                              "id": 13080,
                              "name": "_from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13062,
                              "src": "11679:5:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11672:13:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "11655:30:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "77616c6c65742069732066726f7a656e",
                        "id": 13084,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11687:18:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6fdeb49fa8dca802b99c2a57b8d3c6989632cc684eeb0ba36d157473853eb95f",
                          "typeString": "literal_string \"wallet is frozen\""
                        },
                        "value": "wallet is frozen"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6fdeb49fa8dca802b99c2a57b8d3c6989632cc684eeb0ba36d157473853eb95f",
                          "typeString": "literal_string \"wallet is frozen\""
                        }
                      ],
                      "id": 13074,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "11647:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13085,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11647:59:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13086,
                  "nodeType": "ExpressionStatement",
                  "src": "11647:59:53"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 13097,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 13088,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13066,
                          "src": "11724:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13096,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 13090,
                                "name": "_from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13062,
                                "src": "11745:5:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 13089,
                              "name": "balanceOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12412,
                              "src": "11735:9:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view returns (uint256)"
                              }
                            },
                            "id": 13091,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "nameLocations": [],
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11735:16:53",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "components": [
                              {
                                "baseExpression": {
                                  "id": 13092,
                                  "name": "frozenTokens",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12272,
                                  "src": "11755:12:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 13094,
                                "indexExpression": {
                                  "id": 13093,
                                  "name": "_from",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13062,
                                  "src": "11768:5:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "11755:19:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 13095,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "11754:21:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11735:40:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "11724:51:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "496e73756666696369656e742042616c616e6365",
                        "id": 13098,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11777:22:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b80e76e4c9dd95c0a6a7ab97569124291f4757bb9e5ff42d1e95905b42144c82",
                          "typeString": "literal_string \"Insufficient Balance\""
                        },
                        "value": "Insufficient Balance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b80e76e4c9dd95c0a6a7ab97569124291f4757bb9e5ff42d1e95905b42144c82",
                          "typeString": "literal_string \"Insufficient Balance\""
                        }
                      ],
                      "id": 13087,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "11716:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13099,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11716:84:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13100,
                  "nodeType": "ExpressionStatement",
                  "src": "11716:84:53"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 13111,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 13103,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13064,
                          "src": "11847:3:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "expression": {
                          "id": 13101,
                          "name": "tokenIdentityRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12279,
                          "src": "11814:21:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                            "typeString": "contract IIdentityRegistry"
                          }
                        },
                        "id": 13102,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "11836:10:53",
                        "memberName": "isVerified",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 6580,
                        "src": "11814:32:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) view external returns (bool)"
                        }
                      },
                      "id": 13104,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11814:37:53",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "arguments": [
                        {
                          "id": 13107,
                          "name": "_from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13062,
                          "src": "11883:5:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 13108,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13064,
                          "src": "11890:3:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        {
                          "id": 13109,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13066,
                          "src": "11895:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "id": 13105,
                          "name": "tokenCompliance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12283,
                          "src": "11855:15:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ICompliance_$5596",
                            "typeString": "contract ICompliance"
                          }
                        },
                        "id": 13106,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "11871:11:53",
                        "memberName": "canTransfer",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 5563,
                        "src": "11855:27:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                          "typeString": "function (address,address,uint256) view external returns (bool)"
                        }
                      },
                      "id": 13110,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "11855:48:53",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "11814:89:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13144,
                  "nodeType": "IfStatement",
                  "src": "11810:322:53",
                  "trueBody": {
                    "id": 13143,
                    "nodeType": "Block",
                    "src": "11905:227:53",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 13115,
                              "name": "_from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13062,
                              "src": "11947:5:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 13116,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13064,
                              "src": "11954:3:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 13117,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13066,
                              "src": "11959:7:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 13112,
                              "name": "tokenCompliance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12283,
                              "src": "11919:15:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ICompliance_$5596",
                                "typeString": "contract ICompliance"
                              }
                            },
                            "id": 13114,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "11935:11:53",
                            "memberName": "transferred",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5573,
                            "src": "11919:27:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256) external"
                            }
                          },
                          "id": 13118,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11919:48:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13119,
                        "nodeType": "ExpressionStatement",
                        "src": "11919:48:53"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 13121,
                              "name": "_from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13062,
                              "src": "11991:5:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 13122,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13064,
                              "src": "11998:3:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 13123,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13066,
                              "src": "12003:7:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 13120,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12569,
                            "src": "11981:9:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 13124,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "11981:30:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13125,
                        "nodeType": "ExpressionStatement",
                        "src": "11981:30:53"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 13127,
                              "name": "_from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13062,
                              "src": "12034:5:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "expression": {
                                "id": 13128,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 4294967281,
                                "src": "12041:3:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 13129,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "12045:6:53",
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "src": "12041:10:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 13138,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "baseExpression": {
                                  "baseExpression": {
                                    "id": 13130,
                                    "name": "_allowances",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 12249,
                                    "src": "12053:11:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                                      "typeString": "mapping(address => mapping(address => uint256))"
                                    }
                                  },
                                  "id": 13132,
                                  "indexExpression": {
                                    "id": 13131,
                                    "name": "_from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13062,
                                    "src": "12065:5:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "12053:18:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                    "typeString": "mapping(address => uint256)"
                                  }
                                },
                                "id": 13135,
                                "indexExpression": {
                                  "expression": {
                                    "id": 13133,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 4294967281,
                                    "src": "12072:3:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 13134,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberLocation": "12076:6:53",
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "src": "12072:10:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "12053:30:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "components": [
                                  {
                                    "id": 13136,
                                    "name": "_amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13066,
                                    "src": "12087:7:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "id": 13137,
                                "isConstant": false,
                                "isInlineArray": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "TupleExpression",
                                "src": "12086:9:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "12053:42:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 13126,
                            "name": "_approve",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12720,
                            "src": "12025:8:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 13139,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12025:71:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13140,
                        "nodeType": "ExpressionStatement",
                        "src": "12025:71:53"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 13141,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12117:4:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 13073,
                        "id": 13142,
                        "nodeType": "Return",
                        "src": "12110:11:53"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "5472616e73666572206e6f7420706f737369626c65",
                        "id": 13146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12149:23:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_965de3177b9ab9d8ebf7092e1d4b11b84b3f5ec94a07ac1a7dcc6c263a2b34af",
                          "typeString": "literal_string \"Transfer not possible\""
                        },
                        "value": "Transfer not possible"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_965de3177b9ab9d8ebf7092e1d4b11b84b3f5ec94a07ac1a7dcc6c263a2b34af",
                          "typeString": "literal_string \"Transfer not possible\""
                        }
                      ],
                      "id": 13145,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967277,
                        4294967277
                      ],
                      "referencedDeclaration": 4294967277,
                      "src": "12142:6:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 13147,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12142:31:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13148,
                  "nodeType": "ExpressionStatement",
                  "src": "12142:31:53"
                }
              ]
            },
            "documentation": {
              "id": 13060,
              "nodeType": "StructuredDocumentation",
              "src": "10982:506:53",
              "text": "  @notice ERC-20 overridden function that include logic to check for trade validity.\n  Require that the from and to addresses are not frozen.\n  Require that the value should not exceed available balance .\n  Require that the to address is a verified address\n  @param _from The address of the sender\n  @param _to The address of the receiver\n  @param _amount The number of tokens to transfer\n  @return `true` if successful and revert if unsuccessful"
            },
            "functionSelector": "23b872dd",
            "id": 13150,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 13070,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 13069,
                  "name": "whenNotPaused",
                  "nameLocations": [
                    "11608:13:53"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 12378,
                  "src": "11608:13:53"
                },
                "nodeType": "ModifierInvocation",
                "src": "11608:13:53"
              }
            ],
            "name": "transferFrom",
            "nameLocation": "11502:12:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13068,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11599:8:53"
            },
            "parameters": {
              "id": 13067,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13062,
                  "mutability": "mutable",
                  "name": "_from",
                  "nameLocation": "11532:5:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13150,
                  "src": "11524:13:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13061,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11524:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13064,
                  "mutability": "mutable",
                  "name": "_to",
                  "nameLocation": "11555:3:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13150,
                  "src": "11547:11:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13063,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11547:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13066,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "11576:7:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13150,
                  "src": "11568:15:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13065,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11568:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11514:75:53"
            },
            "returnParameters": {
              "id": 13073,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13072,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 13150,
                  "src": "11631:4:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13071,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "11631:4:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11630:6:53"
            },
            "scope": 13849,
            "src": "11493:687:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12114
            ],
            "body": {
              "id": 13230,
              "nodeType": "Block",
              "src": "12384:559:53",
              "statements": [
                {
                  "assignments": [
                    13166
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13166,
                      "mutability": "mutable",
                      "name": "freeBalance",
                      "nameLocation": "12402:11:53",
                      "nodeType": "VariableDeclaration",
                      "scope": 13230,
                      "src": "12394:19:53",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 13165,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12394:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 13175,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13174,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 13168,
                          "name": "_from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13153,
                          "src": "12426:5:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 13167,
                        "name": "balanceOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12412,
                        "src": "12416:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address) view returns (uint256)"
                        }
                      },
                      "id": 13169,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "12416:16:53",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "components": [
                        {
                          "baseExpression": {
                            "id": 13170,
                            "name": "frozenTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12272,
                            "src": "12436:12:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 13172,
                          "indexExpression": {
                            "id": 13171,
                            "name": "_from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13153,
                            "src": "12449:5:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12436:19:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 13173,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "12435:21:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12416:40:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12394:62:53"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 13176,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13157,
                      "src": "12470:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 13177,
                      "name": "freeBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13166,
                      "src": "12480:11:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12470:21:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13203,
                  "nodeType": "IfStatement",
                  "src": "12466:236:53",
                  "trueBody": {
                    "id": 13202,
                    "nodeType": "Block",
                    "src": "12493:209:53",
                    "statements": [
                      {
                        "assignments": [
                          13180
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 13180,
                            "mutability": "mutable",
                            "name": "tokensToUnfreeze",
                            "nameLocation": "12515:16:53",
                            "nodeType": "VariableDeclaration",
                            "scope": 13202,
                            "src": "12507:24:53",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 13179,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "12507:7:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 13185,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13184,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 13181,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13157,
                            "src": "12534:7:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "components": [
                              {
                                "id": 13182,
                                "name": "freeBalance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13166,
                                "src": "12545:11:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 13183,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "12544:13:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12534:23:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "12507:50:53"
                      },
                      {
                        "expression": {
                          "id": 13195,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 13186,
                              "name": "frozenTokens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12272,
                              "src": "12571:12:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 13188,
                            "indexExpression": {
                              "id": 13187,
                              "name": "_from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13153,
                              "src": "12584:5:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "12571:19:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 13194,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "baseExpression": {
                                "id": 13189,
                                "name": "frozenTokens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12272,
                                "src": "12593:12:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 13191,
                              "indexExpression": {
                                "id": 13190,
                                "name": "_from",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13153,
                                "src": "12606:5:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "12593:19:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "components": [
                                {
                                  "id": 13192,
                                  "name": "tokensToUnfreeze",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13180,
                                  "src": "12616:16:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 13193,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "12615:18:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "12593:40:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "12571:62:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 13196,
                        "nodeType": "ExpressionStatement",
                        "src": "12571:62:53"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 13198,
                              "name": "_from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13153,
                              "src": "12667:5:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 13199,
                              "name": "tokensToUnfreeze",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13180,
                              "src": "12674:16:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 13197,
                            "name": "TokensUnfrozen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11964,
                            "src": "12652:14:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 13200,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12652:39:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13201,
                        "nodeType": "EmitStatement",
                        "src": "12647:44:53"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 13206,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13155,
                        "src": "12748:3:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 13204,
                        "name": "tokenIdentityRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12279,
                        "src": "12715:21:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                          "typeString": "contract IIdentityRegistry"
                        }
                      },
                      "id": 13205,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "12737:10:53",
                      "memberName": "isVerified",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 6580,
                      "src": "12715:32:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) view external returns (bool)"
                      }
                    },
                    "id": 13207,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12715:37:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13225,
                  "nodeType": "IfStatement",
                  "src": "12711:185:53",
                  "trueBody": {
                    "id": 13224,
                    "nodeType": "Block",
                    "src": "12754:142:53",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 13211,
                              "name": "_from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13153,
                              "src": "12796:5:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 13212,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13155,
                              "src": "12803:3:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 13213,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13157,
                              "src": "12808:7:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 13208,
                              "name": "tokenCompliance",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12283,
                              "src": "12768:15:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ICompliance_$5596",
                                "typeString": "contract ICompliance"
                              }
                            },
                            "id": 13210,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "12784:11:53",
                            "memberName": "transferred",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 5573,
                            "src": "12768:27:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256) external"
                            }
                          },
                          "id": 13214,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12768:48:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13215,
                        "nodeType": "ExpressionStatement",
                        "src": "12768:48:53"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 13217,
                              "name": "_from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13153,
                              "src": "12840:5:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 13218,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13155,
                              "src": "12847:3:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 13219,
                              "name": "_amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13157,
                              "src": "12852:7:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 13216,
                            "name": "_transfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12569,
                            "src": "12830:9:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,address,uint256)"
                            }
                          },
                          "id": 13220,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12830:30:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13221,
                        "nodeType": "ExpressionStatement",
                        "src": "12830:30:53"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 13222,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12881:4:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 13164,
                        "id": 13223,
                        "nodeType": "Return",
                        "src": "12874:11:53"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "5472616e73666572206e6f7420706f737369626c65",
                        "id": 13227,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12912:23:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_965de3177b9ab9d8ebf7092e1d4b11b84b3f5ec94a07ac1a7dcc6c263a2b34af",
                          "typeString": "literal_string \"Transfer not possible\""
                        },
                        "value": "Transfer not possible"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_965de3177b9ab9d8ebf7092e1d4b11b84b3f5ec94a07ac1a7dcc6c263a2b34af",
                          "typeString": "literal_string \"Transfer not possible\""
                        }
                      ],
                      "id": 13226,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967277,
                        4294967277
                      ],
                      "referencedDeclaration": 4294967277,
                      "src": "12905:6:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 13228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12905:31:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13229,
                  "nodeType": "ExpressionStatement",
                  "src": "12905:31:53"
                }
              ]
            },
            "documentation": {
              "id": 13151,
              "nodeType": "StructuredDocumentation",
              "src": "12186:53:53",
              "text": "  @dev See {IToken-forcedTransfer}."
            },
            "functionSelector": "9fc1d0e7",
            "id": 13231,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 13161,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 13160,
                  "name": "onlyAgent",
                  "nameLocations": [
                    "12359:9:53"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9153,
                  "src": "12359:9:53"
                },
                "nodeType": "ModifierInvocation",
                "src": "12359:9:53"
              }
            ],
            "name": "forcedTransfer",
            "nameLocation": "12253:14:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13159,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "12350:8:53"
            },
            "parameters": {
              "id": 13158,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13153,
                  "mutability": "mutable",
                  "name": "_from",
                  "nameLocation": "12285:5:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13231,
                  "src": "12277:13:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13152,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12277:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13155,
                  "mutability": "mutable",
                  "name": "_to",
                  "nameLocation": "12308:3:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13231,
                  "src": "12300:11:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13154,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12300:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13157,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "12329:7:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13231,
                  "src": "12321:15:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13156,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12321:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12267:75:53"
            },
            "returnParameters": {
              "id": 13164,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13163,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 13231,
                  "src": "12378:4:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13162,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12378:4:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12377:6:53"
            },
            "scope": 13849,
            "src": "12244:699:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              12165
            ],
            "body": {
              "id": 13270,
              "nodeType": "Block",
              "src": "13176:141:53",
              "statements": [
                {
                  "body": {
                    "id": 13268,
                    "nodeType": "Block",
                    "src": "13233:78:53",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 13257,
                                "name": "_fromList",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13235,
                                "src": "13262:9:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 13259,
                              "indexExpression": {
                                "id": 13258,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13246,
                                "src": "13272:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13262:12:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 13260,
                                "name": "_toList",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13238,
                                "src": "13276:7:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 13262,
                              "indexExpression": {
                                "id": 13261,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13246,
                                "src": "13284:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13276:10:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 13263,
                                "name": "_amounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13241,
                                "src": "13288:8:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 13265,
                              "indexExpression": {
                                "id": 13264,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13246,
                                "src": "13297:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13288:11:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 13256,
                            "name": "forcedTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13231,
                            "src": "13247:14:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) returns (bool)"
                            }
                          },
                          "id": 13266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13247:53:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 13267,
                        "nodeType": "ExpressionStatement",
                        "src": "13247:53:53"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13252,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 13249,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13246,
                      "src": "13206:1:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 13250,
                        "name": "_fromList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13235,
                        "src": "13210:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 13251,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13220:6:53",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "13210:16:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13206:20:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13269,
                  "initializationExpression": {
                    "assignments": [
                      13246
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 13246,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "13199:1:53",
                        "nodeType": "VariableDeclaration",
                        "scope": 13269,
                        "src": "13191:9:53",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13245,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13191:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 13248,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 13247,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13203:1:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "13191:13:53"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 13254,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "13228:3:53",
                      "subExpression": {
                        "id": 13253,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13246,
                        "src": "13228:1:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13255,
                    "nodeType": "ExpressionStatement",
                    "src": "13228:3:53"
                  },
                  "nodeType": "ForStatement",
                  "src": "13186:125:53"
                }
              ]
            },
            "documentation": {
              "id": 13232,
              "nodeType": "StructuredDocumentation",
              "src": "12949:58:53",
              "text": "  @dev See {IToken-batchForcedTransfer}."
            },
            "functionSelector": "42a47abc",
            "id": 13271,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "batchForcedTransfer",
            "nameLocation": "13021:19:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13243,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "13167:8:53"
            },
            "parameters": {
              "id": 13242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13235,
                  "mutability": "mutable",
                  "name": "_fromList",
                  "nameLocation": "13069:9:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13271,
                  "src": "13050:28:53",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13233,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "13050:7:53",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 13234,
                    "nodeType": "ArrayTypeName",
                    "src": "13050:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13238,
                  "mutability": "mutable",
                  "name": "_toList",
                  "nameLocation": "13107:7:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13271,
                  "src": "13088:26:53",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13236,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "13088:7:53",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 13237,
                    "nodeType": "ArrayTypeName",
                    "src": "13088:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13241,
                  "mutability": "mutable",
                  "name": "_amounts",
                  "nameLocation": "13143:8:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13271,
                  "src": "13124:27:53",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13239,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "13124:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13240,
                    "nodeType": "ArrayTypeName",
                    "src": "13124:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13040:117:53"
            },
            "returnParameters": {
              "id": 13244,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13176:0:53"
            },
            "scope": 13849,
            "src": "13012:305:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12122
            ],
            "body": {
              "id": 13313,
              "nodeType": "Block",
              "src": "13441:267:53",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 13285,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13274,
                            "src": "13492:3:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 13283,
                            "name": "tokenIdentityRegistry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12279,
                            "src": "13459:21:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                              "typeString": "contract IIdentityRegistry"
                            }
                          },
                          "id": 13284,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "13481:10:53",
                          "memberName": "isVerified",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 6580,
                          "src": "13459:32:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view external returns (bool)"
                          }
                        },
                        "id": 13286,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13459:37:53",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4964656e74697479206973206e6f742076657269666965642e",
                        "id": 13287,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13498:27:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7885d1d076c7cb06968a199289d2d58ec4ab4a669ff082350b4910edd50058db",
                          "typeString": "literal_string \"Identity is not verified.\""
                        },
                        "value": "Identity is not verified."
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_7885d1d076c7cb06968a199289d2d58ec4ab4a669ff082350b4910edd50058db",
                          "typeString": "literal_string \"Identity is not verified.\""
                        }
                      ],
                      "id": 13282,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "13451:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13288,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13451:75:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13289,
                  "nodeType": "ExpressionStatement",
                  "src": "13451:75:53"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "id": 13293,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 4294967281,
                              "src": "13572:3:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 13294,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "13576:6:53",
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "src": "13572:10:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 13295,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13274,
                            "src": "13584:3:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 13296,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13276,
                            "src": "13589:7:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "id": 13291,
                            "name": "tokenCompliance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12283,
                            "src": "13544:15:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ICompliance_$5596",
                              "typeString": "contract ICompliance"
                            }
                          },
                          "id": 13292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberLocation": "13560:11:53",
                          "memberName": "canTransfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 5563,
                          "src": "13544:27:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) view external returns (bool)"
                          }
                        },
                        "id": 13297,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13544:53:53",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "436f6d706c69616e6365206e6f7420666f6c6c6f776564",
                        "id": 13298,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13599:25:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fadaaa2b439502f5d6528c916a36fb7325f021fb36a235fdabb96350c3d44dd8",
                          "typeString": "literal_string \"Compliance not followed\""
                        },
                        "value": "Compliance not followed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fadaaa2b439502f5d6528c916a36fb7325f021fb36a235fdabb96350c3d44dd8",
                          "typeString": "literal_string \"Compliance not followed\""
                        }
                      ],
                      "id": 13290,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "13536:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13299,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13536:89:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13300,
                  "nodeType": "ExpressionStatement",
                  "src": "13536:89:53"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 13302,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13274,
                        "src": "13641:3:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 13303,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13276,
                        "src": "13646:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13301,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12622,
                      "src": "13635:5:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 13304,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13635:19:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13305,
                  "nodeType": "ExpressionStatement",
                  "src": "13635:19:53"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 13309,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13274,
                        "src": "13688:3:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 13310,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13276,
                        "src": "13693:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 13306,
                        "name": "tokenCompliance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12283,
                        "src": "13664:15:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ICompliance_$5596",
                          "typeString": "contract ICompliance"
                        }
                      },
                      "id": 13308,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13680:7:53",
                      "memberName": "created",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5581,
                      "src": "13664:23:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 13311,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13664:37:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13312,
                  "nodeType": "ExpressionStatement",
                  "src": "13664:37:53"
                }
              ]
            },
            "documentation": {
              "id": 13272,
              "nodeType": "StructuredDocumentation",
              "src": "13323:43:53",
              "text": "  @dev See {IToken-mint}."
            },
            "functionSelector": "40c10f19",
            "id": 13314,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 13280,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 13279,
                  "name": "onlyAgent",
                  "nameLocations": [
                    "13431:9:53"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9153,
                  "src": "13431:9:53"
                },
                "nodeType": "ModifierInvocation",
                "src": "13431:9:53"
              }
            ],
            "name": "mint",
            "nameLocation": "13380:4:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13278,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "13422:8:53"
            },
            "parameters": {
              "id": 13277,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13274,
                  "mutability": "mutable",
                  "name": "_to",
                  "nameLocation": "13393:3:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13314,
                  "src": "13385:11:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13273,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13385:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13276,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "13406:7:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13314,
                  "src": "13398:15:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13275,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13398:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13384:30:53"
            },
            "returnParameters": {
              "id": 13281,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13441:0:53"
            },
            "scope": 13849,
            "src": "13371:337:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              12175
            ],
            "body": {
              "id": 13347,
              "nodeType": "Block",
              "src": "13861:115:53",
              "statements": [
                {
                  "body": {
                    "id": 13345,
                    "nodeType": "Block",
                    "src": "13916:54:53",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 13337,
                                "name": "_toList",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13318,
                                "src": "13935:7:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 13339,
                              "indexExpression": {
                                "id": 13338,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13326,
                                "src": "13943:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13935:10:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 13340,
                                "name": "_amounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13321,
                                "src": "13947:8:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 13342,
                              "indexExpression": {
                                "id": 13341,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13326,
                                "src": "13956:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "13947:11:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 13336,
                            "name": "mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13314,
                            "src": "13930:4:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 13343,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13930:29:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13344,
                        "nodeType": "ExpressionStatement",
                        "src": "13930:29:53"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13332,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 13329,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13326,
                      "src": "13891:1:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 13330,
                        "name": "_toList",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13318,
                        "src": "13895:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 13331,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "13903:6:53",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "13895:14:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13891:18:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13346,
                  "initializationExpression": {
                    "assignments": [
                      13326
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 13326,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "13884:1:53",
                        "nodeType": "VariableDeclaration",
                        "scope": 13346,
                        "src": "13876:9:53",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13325,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "13876:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 13328,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 13327,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13888:1:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "13876:13:53"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 13334,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "13911:3:53",
                      "subExpression": {
                        "id": 13333,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13326,
                        "src": "13911:1:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13335,
                    "nodeType": "ExpressionStatement",
                    "src": "13911:3:53"
                  },
                  "nodeType": "ForStatement",
                  "src": "13871:99:53"
                }
              ]
            },
            "documentation": {
              "id": 13315,
              "nodeType": "StructuredDocumentation",
              "src": "13714:48:53",
              "text": "  @dev See {IToken-batchMint}."
            },
            "functionSelector": "68573107",
            "id": 13348,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "batchMint",
            "nameLocation": "13776:9:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13323,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "13852:8:53"
            },
            "parameters": {
              "id": 13322,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13318,
                  "mutability": "mutable",
                  "name": "_toList",
                  "nameLocation": "13805:7:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13348,
                  "src": "13786:26:53",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13316,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "13786:7:53",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 13317,
                    "nodeType": "ArrayTypeName",
                    "src": "13786:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13321,
                  "mutability": "mutable",
                  "name": "_amounts",
                  "nameLocation": "13833:8:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13348,
                  "src": "13814:27:53",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13319,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "13814:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13320,
                    "nodeType": "ArrayTypeName",
                    "src": "13814:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13785:57:53"
            },
            "returnParameters": {
              "id": 13324,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13861:0:53"
            },
            "scope": 13849,
            "src": "13767:209:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12130
            ],
            "body": {
              "id": 13409,
              "nodeType": "Block",
              "src": "14109:453:53",
              "statements": [
                {
                  "assignments": [
                    13360
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13360,
                      "mutability": "mutable",
                      "name": "freeBalance",
                      "nameLocation": "14127:11:53",
                      "nodeType": "VariableDeclaration",
                      "scope": 13409,
                      "src": "14119:19:53",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 13359,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "14119:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 13368,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13367,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 13362,
                          "name": "_userAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13351,
                          "src": "14151:12:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 13361,
                        "name": "balanceOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12412,
                        "src": "14141:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address) view returns (uint256)"
                        }
                      },
                      "id": 13363,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14141:23:53",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "baseExpression": {
                        "id": 13364,
                        "name": "frozenTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12272,
                        "src": "14167:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 13366,
                      "indexExpression": {
                        "id": 13365,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13351,
                        "src": "14180:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "14167:26:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14141:52:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14119:74:53"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13371,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 13369,
                      "name": "_amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13353,
                      "src": "14207:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "id": 13370,
                      "name": "freeBalance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13360,
                      "src": "14217:11:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14207:21:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13396,
                  "nodeType": "IfStatement",
                  "src": "14203:257:53",
                  "trueBody": {
                    "id": 13395,
                    "nodeType": "Block",
                    "src": "14230:230:53",
                    "statements": [
                      {
                        "assignments": [
                          13373
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 13373,
                            "mutability": "mutable",
                            "name": "tokensToUnfreeze",
                            "nameLocation": "14252:16:53",
                            "nodeType": "VariableDeclaration",
                            "scope": 13395,
                            "src": "14244:24:53",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 13372,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "14244:7:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 13378,
                        "initialValue": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13377,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 13374,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13353,
                            "src": "14271:7:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "components": [
                              {
                                "id": 13375,
                                "name": "freeBalance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13360,
                                "src": "14282:11:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 13376,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "14281:13:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14271:23:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14244:50:53"
                      },
                      {
                        "expression": {
                          "id": 13388,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 13379,
                              "name": "frozenTokens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12272,
                              "src": "14308:12:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 13381,
                            "indexExpression": {
                              "id": 13380,
                              "name": "_userAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13351,
                              "src": "14321:12:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "14308:26:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 13387,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "baseExpression": {
                                "id": 13382,
                                "name": "frozenTokens",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 12272,
                                "src": "14337:12:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                  "typeString": "mapping(address => uint256)"
                                }
                              },
                              "id": 13384,
                              "indexExpression": {
                                "id": 13383,
                                "name": "_userAddress",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13351,
                                "src": "14350:12:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "14337:26:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "components": [
                                {
                                  "id": 13385,
                                  "name": "tokensToUnfreeze",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13373,
                                  "src": "14367:16:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 13386,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "14366:18:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "14337:47:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14308:76:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 13389,
                        "nodeType": "ExpressionStatement",
                        "src": "14308:76:53"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 13391,
                              "name": "_userAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13351,
                              "src": "14418:12:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 13392,
                              "name": "tokensToUnfreeze",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13373,
                              "src": "14432:16:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 13390,
                            "name": "TokensUnfrozen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11964,
                            "src": "14403:14:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 13393,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14403:46:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13394,
                        "nodeType": "EmitStatement",
                        "src": "14398:51:53"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 13398,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13351,
                        "src": "14475:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 13399,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13353,
                        "src": "14489:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13397,
                      "name": "_burn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12675,
                      "src": "14469:5:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 13400,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14469:28:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13401,
                  "nodeType": "ExpressionStatement",
                  "src": "14469:28:53"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 13405,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13351,
                        "src": "14533:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 13406,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13353,
                        "src": "14547:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "id": 13402,
                        "name": "tokenCompliance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12283,
                        "src": "14507:15:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ICompliance_$5596",
                          "typeString": "contract ICompliance"
                        }
                      },
                      "id": 13404,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14523:9:53",
                      "memberName": "destroyed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 5589,
                      "src": "14507:25:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) external"
                      }
                    },
                    "id": 13407,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14507:48:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13408,
                  "nodeType": "ExpressionStatement",
                  "src": "14507:48:53"
                }
              ]
            },
            "documentation": {
              "id": 13349,
              "nodeType": "StructuredDocumentation",
              "src": "13982:43:53",
              "text": "  @dev See {IToken-burn}."
            },
            "functionSelector": "9dc29fac",
            "id": 13410,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 13357,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 13356,
                  "name": "onlyAgent",
                  "nameLocations": [
                    "14099:9:53"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9153,
                  "src": "14099:9:53"
                },
                "nodeType": "ModifierInvocation",
                "src": "14099:9:53"
              }
            ],
            "name": "burn",
            "nameLocation": "14039:4:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13355,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "14090:8:53"
            },
            "parameters": {
              "id": 13354,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13351,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "14052:12:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13410,
                  "src": "14044:20:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13350,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14044:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13353,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "14074:7:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13410,
                  "src": "14066:15:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13352,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14066:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14043:39:53"
            },
            "returnParameters": {
              "id": 13358,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14109:0:53"
            },
            "scope": 13849,
            "src": "14030:532:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              12185
            ],
            "body": {
              "id": 13443,
              "nodeType": "Block",
              "src": "14722:129:53",
              "statements": [
                {
                  "body": {
                    "id": 13441,
                    "nodeType": "Block",
                    "src": "14784:61:53",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 13433,
                                "name": "_userAddresses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13414,
                                "src": "14803:14:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 13435,
                              "indexExpression": {
                                "id": 13434,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13422,
                                "src": "14818:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "14803:17:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 13436,
                                "name": "_amounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13417,
                                "src": "14822:8:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 13438,
                              "indexExpression": {
                                "id": 13437,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13422,
                                "src": "14831:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "14822:11:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 13432,
                            "name": "burn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13410,
                            "src": "14798:4:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 13439,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14798:36:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13440,
                        "nodeType": "ExpressionStatement",
                        "src": "14798:36:53"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13428,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 13425,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13422,
                      "src": "14752:1:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 13426,
                        "name": "_userAddresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13414,
                        "src": "14756:14:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 13427,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "14771:6:53",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "14756:21:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14752:25:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13442,
                  "initializationExpression": {
                    "assignments": [
                      13422
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 13422,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "14745:1:53",
                        "nodeType": "VariableDeclaration",
                        "scope": 13442,
                        "src": "14737:9:53",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13421,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14737:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 13424,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 13423,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14749:1:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "14737:13:53"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 13430,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "14779:3:53",
                      "subExpression": {
                        "id": 13429,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13422,
                        "src": "14779:1:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13431,
                    "nodeType": "ExpressionStatement",
                    "src": "14779:3:53"
                  },
                  "nodeType": "ForStatement",
                  "src": "14732:113:53"
                }
              ]
            },
            "documentation": {
              "id": 13411,
              "nodeType": "StructuredDocumentation",
              "src": "14568:48:53",
              "text": "  @dev See {IToken-batchBurn}."
            },
            "functionSelector": "4a6cc677",
            "id": 13444,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "batchBurn",
            "nameLocation": "14630:9:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13419,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "14713:8:53"
            },
            "parameters": {
              "id": 13418,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13414,
                  "mutability": "mutable",
                  "name": "_userAddresses",
                  "nameLocation": "14659:14:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13444,
                  "src": "14640:33:53",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13412,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "14640:7:53",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 13413,
                    "nodeType": "ArrayTypeName",
                    "src": "14640:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13417,
                  "mutability": "mutable",
                  "name": "_amounts",
                  "nameLocation": "14694:8:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13444,
                  "src": "14675:27:53",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13415,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "14675:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13416,
                    "nodeType": "ArrayTypeName",
                    "src": "14675:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14639:64:53"
            },
            "returnParameters": {
              "id": 13420,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14722:0:53"
            },
            "scope": 13849,
            "src": "14621:230:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12074
            ],
            "body": {
              "id": 13468,
              "nodeType": "Block",
              "src": "15005:111:53",
              "statements": [
                {
                  "expression": {
                    "id": 13459,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 13455,
                        "name": "frozen",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12268,
                        "src": "15015:6:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 13457,
                      "indexExpression": {
                        "id": 13456,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13447,
                        "src": "15022:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "15015:20:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 13458,
                      "name": "_freeze",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13449,
                      "src": "15038:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "15015:30:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13460,
                  "nodeType": "ExpressionStatement",
                  "src": "15015:30:53"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 13462,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13447,
                        "src": "15075:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 13463,
                        "name": "_freeze",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13449,
                        "src": "15089:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "expression": {
                          "id": 13464,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 4294967281,
                          "src": "15098:3:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13465,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "15102:6:53",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "15098:10:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13461,
                      "name": "AddressFrozen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11950,
                      "src": "15061:13:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bool_$_t_address_$returns$__$",
                        "typeString": "function (address,bool,address)"
                      }
                    },
                    "id": 13466,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15061:48:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13467,
                  "nodeType": "EmitStatement",
                  "src": "15056:53:53"
                }
              ]
            },
            "documentation": {
              "id": 13445,
              "nodeType": "StructuredDocumentation",
              "src": "14857:55:53",
              "text": "  @dev See {IToken-setAddressFrozen}."
            },
            "functionSelector": "c69c09cf",
            "id": 13469,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 13453,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 13452,
                  "name": "onlyAgent",
                  "nameLocations": [
                    "14995:9:53"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9153,
                  "src": "14995:9:53"
                },
                "nodeType": "ModifierInvocation",
                "src": "14995:9:53"
              }
            ],
            "name": "setAddressFrozen",
            "nameLocation": "14926:16:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13451,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "14986:8:53"
            },
            "parameters": {
              "id": 13450,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13447,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "14951:12:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13469,
                  "src": "14943:20:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13446,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14943:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13449,
                  "mutability": "mutable",
                  "name": "_freeze",
                  "nameLocation": "14970:7:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13469,
                  "src": "14965:12:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13448,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "14965:4:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14942:36:53"
            },
            "returnParameters": {
              "id": 13454,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15005:0:53"
            },
            "scope": 13849,
            "src": "14917:199:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              12195
            ],
            "body": {
              "id": 13502,
              "nodeType": "Block",
              "src": "15296:140:53",
              "statements": [
                {
                  "body": {
                    "id": 13500,
                    "nodeType": "Block",
                    "src": "15358:72:53",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 13492,
                                "name": "_userAddresses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13473,
                                "src": "15389:14:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 13494,
                              "indexExpression": {
                                "id": 13493,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13481,
                                "src": "15404:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "15389:17:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 13495,
                                "name": "_freeze",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13476,
                                "src": "15408:7:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bool_$dyn_calldata_ptr",
                                  "typeString": "bool[] calldata"
                                }
                              },
                              "id": 13497,
                              "indexExpression": {
                                "id": 13496,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13481,
                                "src": "15416:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "15408:10:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            ],
                            "id": 13491,
                            "name": "setAddressFrozen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13469,
                            "src": "15372:16:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$",
                              "typeString": "function (address,bool)"
                            }
                          },
                          "id": 13498,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15372:47:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13499,
                        "nodeType": "ExpressionStatement",
                        "src": "15372:47:53"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 13484,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13481,
                      "src": "15326:1:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 13485,
                        "name": "_userAddresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13473,
                        "src": "15330:14:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 13486,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "15345:6:53",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "15330:21:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15326:25:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13501,
                  "initializationExpression": {
                    "assignments": [
                      13481
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 13481,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "15319:1:53",
                        "nodeType": "VariableDeclaration",
                        "scope": 13501,
                        "src": "15311:9:53",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13480,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "15311:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 13483,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 13482,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15323:1:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "15311:13:53"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 13489,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "15353:3:53",
                      "subExpression": {
                        "id": 13488,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13481,
                        "src": "15353:1:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13490,
                    "nodeType": "ExpressionStatement",
                    "src": "15353:3:53"
                  },
                  "nodeType": "ForStatement",
                  "src": "15306:124:53"
                }
              ]
            },
            "documentation": {
              "id": 13470,
              "nodeType": "StructuredDocumentation",
              "src": "15122:60:53",
              "text": "  @dev See {IToken-batchSetAddressFrozen}."
            },
            "functionSelector": "1a7af379",
            "id": 13503,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "batchSetAddressFrozen",
            "nameLocation": "15196:21:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13478,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "15287:8:53"
            },
            "parameters": {
              "id": 13477,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13473,
                  "mutability": "mutable",
                  "name": "_userAddresses",
                  "nameLocation": "15237:14:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13503,
                  "src": "15218:33:53",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13471,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "15218:7:53",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 13472,
                    "nodeType": "ArrayTypeName",
                    "src": "15218:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13476,
                  "mutability": "mutable",
                  "name": "_freeze",
                  "nameLocation": "15269:7:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13503,
                  "src": "15253:23:53",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bool_$dyn_calldata_ptr",
                    "typeString": "bool[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13474,
                      "name": "bool",
                      "nodeType": "ElementaryTypeName",
                      "src": "15253:4:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "id": 13475,
                    "nodeType": "ArrayTypeName",
                    "src": "15253:6:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bool_$dyn_storage_ptr",
                      "typeString": "bool[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15217:60:53"
            },
            "returnParameters": {
              "id": 13479,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15296:0:53"
            },
            "scope": 13849,
            "src": "15187:249:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12082
            ],
            "body": {
              "id": 13547,
              "nodeType": "Block",
              "src": "15599:287:53",
              "statements": [
                {
                  "assignments": [
                    13515
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13515,
                      "mutability": "mutable",
                      "name": "balance",
                      "nameLocation": "15617:7:53",
                      "nodeType": "VariableDeclaration",
                      "scope": 13547,
                      "src": "15609:15:53",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 13514,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "15609:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 13519,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 13517,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13506,
                        "src": "15637:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13516,
                      "name": "balanceOf",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12412,
                      "src": "15627:9:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address) view returns (uint256)"
                      }
                    },
                    "id": 13518,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15627:23:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15609:41:53"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 13527,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 13521,
                          "name": "balance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13515,
                          "src": "15668:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13526,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 13522,
                              "name": "frozenTokens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12272,
                              "src": "15679:12:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                                "typeString": "mapping(address => uint256)"
                              }
                            },
                            "id": 13524,
                            "indexExpression": {
                              "id": 13523,
                              "name": "_userAddress",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13506,
                              "src": "15692:12:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "15679:26:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "+",
                          "rightExpression": {
                            "id": 13525,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13508,
                            "src": "15708:7:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "15679:36:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "15668:47:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "416d6f756e74206578636565647320617661696c61626c652062616c616e6365",
                        "id": 13528,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15717:34:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_744672dda3f1a4aac2686ca817a473825cd11c66522615fb58f852c757d084af",
                          "typeString": "literal_string \"Amount exceeds available balance\""
                        },
                        "value": "Amount exceeds available balance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_744672dda3f1a4aac2686ca817a473825cd11c66522615fb58f852c757d084af",
                          "typeString": "literal_string \"Amount exceeds available balance\""
                        }
                      ],
                      "id": 13520,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "15660:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13529,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15660:92:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13530,
                  "nodeType": "ExpressionStatement",
                  "src": "15660:92:53"
                },
                {
                  "expression": {
                    "id": 13540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 13531,
                        "name": "frozenTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12272,
                        "src": "15762:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 13533,
                      "indexExpression": {
                        "id": 13532,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13506,
                        "src": "15775:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "15762:26:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 13539,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "baseExpression": {
                          "id": 13534,
                          "name": "frozenTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12272,
                          "src": "15791:12:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 13536,
                        "indexExpression": {
                          "id": 13535,
                          "name": "_userAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13506,
                          "src": "15804:12:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "15791:26:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "components": [
                          {
                            "id": 13537,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13508,
                            "src": "15821:7:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 13538,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "15820:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "15791:38:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15762:67:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 13541,
                  "nodeType": "ExpressionStatement",
                  "src": "15762:67:53"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 13543,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13506,
                        "src": "15857:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 13544,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13508,
                        "src": "15871:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13542,
                      "name": "TokensFrozen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11957,
                      "src": "15844:12:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 13545,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15844:35:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13546,
                  "nodeType": "EmitStatement",
                  "src": "15839:40:53"
                }
              ]
            },
            "documentation": {
              "id": 13504,
              "nodeType": "StructuredDocumentation",
              "src": "15442:58:53",
              "text": "  @dev See {IToken-freezePartialTokens}."
            },
            "functionSelector": "125c4a33",
            "id": 13548,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 13512,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 13511,
                  "name": "onlyAgent",
                  "nameLocations": [
                    "15589:9:53"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9153,
                  "src": "15589:9:53"
                },
                "nodeType": "ModifierInvocation",
                "src": "15589:9:53"
              }
            ],
            "name": "freezePartialTokens",
            "nameLocation": "15514:19:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13510,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "15580:8:53"
            },
            "parameters": {
              "id": 13509,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13506,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "15542:12:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13548,
                  "src": "15534:20:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13505,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15534:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13508,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "15564:7:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13548,
                  "src": "15556:15:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13507,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15556:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15533:39:53"
            },
            "returnParameters": {
              "id": 13513,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15599:0:53"
            },
            "scope": 13849,
            "src": "15505:381:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              12205
            ],
            "body": {
              "id": 13581,
              "nodeType": "Block",
              "src": "16076:144:53",
              "statements": [
                {
                  "body": {
                    "id": 13579,
                    "nodeType": "Block",
                    "src": "16138:76:53",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 13571,
                                "name": "_userAddresses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13552,
                                "src": "16172:14:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 13573,
                              "indexExpression": {
                                "id": 13572,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13560,
                                "src": "16187:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16172:17:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 13574,
                                "name": "_amounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13555,
                                "src": "16191:8:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 13576,
                              "indexExpression": {
                                "id": 13575,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13560,
                                "src": "16200:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16191:11:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 13570,
                            "name": "freezePartialTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13548,
                            "src": "16152:19:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 13577,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16152:51:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13578,
                        "nodeType": "ExpressionStatement",
                        "src": "16152:51:53"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13566,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 13563,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13560,
                      "src": "16106:1:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 13564,
                        "name": "_userAddresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13552,
                        "src": "16110:14:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 13565,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "16125:6:53",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "16110:21:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16106:25:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13580,
                  "initializationExpression": {
                    "assignments": [
                      13560
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 13560,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "16099:1:53",
                        "nodeType": "VariableDeclaration",
                        "scope": 13580,
                        "src": "16091:9:53",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13559,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16091:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 13562,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 13561,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16103:1:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "16091:13:53"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 13568,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "16133:3:53",
                      "subExpression": {
                        "id": 13567,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13560,
                        "src": "16133:1:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13569,
                    "nodeType": "ExpressionStatement",
                    "src": "16133:3:53"
                  },
                  "nodeType": "ForStatement",
                  "src": "16086:128:53"
                }
              ]
            },
            "documentation": {
              "id": 13549,
              "nodeType": "StructuredDocumentation",
              "src": "15892:63:53",
              "text": "  @dev See {IToken-batchFreezePartialTokens}."
            },
            "functionSelector": "fc7e5fa8",
            "id": 13582,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "batchFreezePartialTokens",
            "nameLocation": "15969:24:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13557,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16067:8:53"
            },
            "parameters": {
              "id": 13556,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13552,
                  "mutability": "mutable",
                  "name": "_userAddresses",
                  "nameLocation": "16013:14:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13582,
                  "src": "15994:33:53",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13550,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "15994:7:53",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 13551,
                    "nodeType": "ArrayTypeName",
                    "src": "15994:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13555,
                  "mutability": "mutable",
                  "name": "_amounts",
                  "nameLocation": "16048:8:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13582,
                  "src": "16029:27:53",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13553,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "16029:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13554,
                    "nodeType": "ArrayTypeName",
                    "src": "16029:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15993:64:53"
            },
            "returnParameters": {
              "id": 13558,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16076:0:53"
            },
            "scope": 13849,
            "src": "15960:260:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12090
            ],
            "body": {
              "id": 13618,
              "nodeType": "Block",
              "src": "16387:248:53",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 13598,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 13594,
                            "name": "frozenTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12272,
                            "src": "16405:12:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 13596,
                          "indexExpression": {
                            "id": 13595,
                            "name": "_userAddress",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13585,
                            "src": "16418:12:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "16405:26:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 13597,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13587,
                          "src": "16435:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "16405:37:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "416d6f756e742073686f756c64206265206c657373207468616e206f7220657175616c20746f2066726f7a656e20746f6b656e73",
                        "id": 13599,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "16444:54:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_58c49b1d6a87eb553a18b11a7e5e086b34d54efe7947565e8c8e9340bcac49f6",
                          "typeString": "literal_string \"Amount should be less than or equal to frozen tokens\""
                        },
                        "value": "Amount should be less than or equal to frozen tokens"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_58c49b1d6a87eb553a18b11a7e5e086b34d54efe7947565e8c8e9340bcac49f6",
                          "typeString": "literal_string \"Amount should be less than or equal to frozen tokens\""
                        }
                      ],
                      "id": 13593,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "16397:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13600,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16397:102:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13601,
                  "nodeType": "ExpressionStatement",
                  "src": "16397:102:53"
                },
                {
                  "expression": {
                    "id": 13611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 13602,
                        "name": "frozenTokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 12272,
                        "src": "16509:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 13604,
                      "indexExpression": {
                        "id": 13603,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13585,
                        "src": "16522:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "16509:26:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 13610,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "baseExpression": {
                          "id": 13605,
                          "name": "frozenTokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 12272,
                          "src": "16538:12:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                            "typeString": "mapping(address => uint256)"
                          }
                        },
                        "id": 13607,
                        "indexExpression": {
                          "id": 13606,
                          "name": "_userAddress",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13585,
                          "src": "16551:12:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16538:26:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "components": [
                          {
                            "id": 13608,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13587,
                            "src": "16568:7:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 13609,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "16567:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "16538:38:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16509:67:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 13612,
                  "nodeType": "ExpressionStatement",
                  "src": "16509:67:53"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 13614,
                        "name": "_userAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13585,
                        "src": "16606:12:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 13615,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13587,
                        "src": "16620:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13613,
                      "name": "TokensUnfrozen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11964,
                      "src": "16591:14:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 13616,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16591:37:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13617,
                  "nodeType": "EmitStatement",
                  "src": "16586:42:53"
                }
              ]
            },
            "documentation": {
              "id": 13583,
              "nodeType": "StructuredDocumentation",
              "src": "16226:60:53",
              "text": "  @dev See {IToken-unfreezePartialTokens}."
            },
            "functionSelector": "1fe56f7d",
            "id": 13619,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 13591,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 13590,
                  "name": "onlyAgent",
                  "nameLocations": [
                    "16377:9:53"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9153,
                  "src": "16377:9:53"
                },
                "nodeType": "ModifierInvocation",
                "src": "16377:9:53"
              }
            ],
            "name": "unfreezePartialTokens",
            "nameLocation": "16300:21:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13589,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16368:8:53"
            },
            "parameters": {
              "id": 13588,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13585,
                  "mutability": "mutable",
                  "name": "_userAddress",
                  "nameLocation": "16330:12:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13619,
                  "src": "16322:20:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13584,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16322:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13587,
                  "mutability": "mutable",
                  "name": "_amount",
                  "nameLocation": "16352:7:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13619,
                  "src": "16344:15:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13586,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16344:7:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16321:39:53"
            },
            "returnParameters": {
              "id": 13592,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16387:0:53"
            },
            "scope": 13849,
            "src": "16291:344:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              12215
            ],
            "body": {
              "id": 13652,
              "nodeType": "Block",
              "src": "16829:146:53",
              "statements": [
                {
                  "body": {
                    "id": 13650,
                    "nodeType": "Block",
                    "src": "16891:78:53",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "baseExpression": {
                                "id": 13642,
                                "name": "_userAddresses",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13623,
                                "src": "16927:14:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                                  "typeString": "address[] calldata"
                                }
                              },
                              "id": 13644,
                              "indexExpression": {
                                "id": 13643,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13631,
                                "src": "16942:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16927:17:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "baseExpression": {
                                "id": 13645,
                                "name": "_amounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13626,
                                "src": "16946:8:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                                  "typeString": "uint256[] calldata"
                                }
                              },
                              "id": 13647,
                              "indexExpression": {
                                "id": 13646,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13631,
                                "src": "16955:1:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "16946:11:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 13641,
                            "name": "unfreezePartialTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13619,
                            "src": "16905:21:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256)"
                            }
                          },
                          "id": 13648,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16905:53:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13649,
                        "nodeType": "ExpressionStatement",
                        "src": "16905:53:53"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 13634,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13631,
                      "src": "16859:1:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 13635,
                        "name": "_userAddresses",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13623,
                        "src": "16863:14:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                          "typeString": "address[] calldata"
                        }
                      },
                      "id": 13636,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "16878:6:53",
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "16863:21:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16859:25:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13651,
                  "initializationExpression": {
                    "assignments": [
                      13631
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 13631,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "16852:1:53",
                        "nodeType": "VariableDeclaration",
                        "scope": 13651,
                        "src": "16844:9:53",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 13630,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "16844:7:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 13633,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 13632,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16856:1:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "16844:13:53"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 13639,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "16886:3:53",
                      "subExpression": {
                        "id": 13638,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13631,
                        "src": "16886:1:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13640,
                    "nodeType": "ExpressionStatement",
                    "src": "16886:3:53"
                  },
                  "nodeType": "ForStatement",
                  "src": "16839:130:53"
                }
              ]
            },
            "documentation": {
              "id": 13620,
              "nodeType": "StructuredDocumentation",
              "src": "16641:65:53",
              "text": "  @dev See {IToken-batchUnfreezePartialTokens}."
            },
            "functionSelector": "4710362d",
            "id": 13653,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "batchUnfreezePartialTokens",
            "nameLocation": "16720:26:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13628,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "16820:8:53"
            },
            "parameters": {
              "id": 13627,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13623,
                  "mutability": "mutable",
                  "name": "_userAddresses",
                  "nameLocation": "16766:14:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13653,
                  "src": "16747:33:53",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13621,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "16747:7:53",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 13622,
                    "nodeType": "ArrayTypeName",
                    "src": "16747:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13626,
                  "mutability": "mutable",
                  "name": "_amounts",
                  "nameLocation": "16801:8:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13653,
                  "src": "16782:27:53",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_calldata_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13624,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "16782:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 13625,
                    "nodeType": "ArrayTypeName",
                    "src": "16782:9:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16746:64:53"
            },
            "returnParameters": {
              "id": 13629,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16829:0:53"
            },
            "scope": 13849,
            "src": "16711:264:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12096
            ],
            "body": {
              "id": 13672,
              "nodeType": "Block",
              "src": "17128:132:53",
              "statements": [
                {
                  "expression": {
                    "id": 13666,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 13662,
                      "name": "tokenIdentityRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12279,
                      "src": "17138:21:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                        "typeString": "contract IIdentityRegistry"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 13664,
                          "name": "_identityRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13656,
                          "src": "17180:17:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 13663,
                        "name": "IIdentityRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 6637,
                        "src": "17162:17:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IIdentityRegistry_$6637_$",
                          "typeString": "type(contract IIdentityRegistry)"
                        }
                      },
                      "id": 13665,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17162:36:53",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                        "typeString": "contract IIdentityRegistry"
                      }
                    },
                    "src": "17138:60:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                      "typeString": "contract IIdentityRegistry"
                    }
                  },
                  "id": 13667,
                  "nodeType": "ExpressionStatement",
                  "src": "17138:60:53"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 13669,
                        "name": "_identityRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13656,
                        "src": "17235:17:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13668,
                      "name": "IdentityRegistryAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11927,
                      "src": "17213:21:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 13670,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17213:40:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13671,
                  "nodeType": "EmitStatement",
                  "src": "17208:45:53"
                }
              ]
            },
            "documentation": {
              "id": 13654,
              "nodeType": "StructuredDocumentation",
              "src": "16981:58:53",
              "text": "  @dev See {IToken-setIdentityRegistry}."
            },
            "functionSelector": "cbf3f861",
            "id": 13673,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 13660,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 13659,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "17118:9:53"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 1870,
                  "src": "17118:9:53"
                },
                "nodeType": "ModifierInvocation",
                "src": "17118:9:53"
              }
            ],
            "name": "setIdentityRegistry",
            "nameLocation": "17053:19:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13658,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "17109:8:53"
            },
            "parameters": {
              "id": 13657,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13656,
                  "mutability": "mutable",
                  "name": "_identityRegistry",
                  "nameLocation": "17081:17:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13673,
                  "src": "17073:25:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13655,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17073:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17072:27:53"
            },
            "returnParameters": {
              "id": 13661,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17128:0:53"
            },
            "scope": 13849,
            "src": "17044:216:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12102
            ],
            "body": {
              "id": 13692,
              "nodeType": "Block",
              "src": "17395:102:53",
              "statements": [
                {
                  "expression": {
                    "id": 13686,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 13682,
                      "name": "tokenCompliance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12283,
                      "src": "17405:15:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ICompliance_$5596",
                        "typeString": "contract ICompliance"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 13684,
                          "name": "_compliance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13676,
                          "src": "17435:11:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 13683,
                        "name": "ICompliance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 5596,
                        "src": "17423:11:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ICompliance_$5596_$",
                          "typeString": "type(contract ICompliance)"
                        }
                      },
                      "id": 13685,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "17423:24:53",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ICompliance_$5596",
                        "typeString": "contract ICompliance"
                      }
                    },
                    "src": "17405:42:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICompliance_$5596",
                      "typeString": "contract ICompliance"
                    }
                  },
                  "id": 13687,
                  "nodeType": "ExpressionStatement",
                  "src": "17405:42:53"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 13689,
                        "name": "_compliance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13676,
                        "src": "17478:11:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13688,
                      "name": "ComplianceAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11932,
                      "src": "17462:15:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 13690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17462:28:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13691,
                  "nodeType": "EmitStatement",
                  "src": "17457:33:53"
                }
              ]
            },
            "documentation": {
              "id": 13674,
              "nodeType": "StructuredDocumentation",
              "src": "17266:52:53",
              "text": "  @dev See {IToken-setCompliance}."
            },
            "functionSelector": "f8981789",
            "id": 13693,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 13680,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 13679,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "17385:9:53"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 1870,
                  "src": "17385:9:53"
                },
                "nodeType": "ModifierInvocation",
                "src": "17385:9:53"
              }
            ],
            "name": "setCompliance",
            "nameLocation": "17332:13:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13678,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "17376:8:53"
            },
            "parameters": {
              "id": 13677,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13676,
                  "mutability": "mutable",
                  "name": "_compliance",
                  "nameLocation": "17354:11:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13693,
                  "src": "17346:19:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13675,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17346:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17345:21:53"
            },
            "returnParameters": {
              "id": 13681,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17395:0:53"
            },
            "scope": 13849,
            "src": "17323:174:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12142
            ],
            "body": {
              "id": 13809,
              "nodeType": "Block",
              "src": "17729:1013:53",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 13713,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [
                            {
                              "id": 13710,
                              "name": "_lostWallet",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13696,
                              "src": "17757:11:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 13709,
                            "name": "balanceOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12412,
                            "src": "17747:9:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view returns (uint256)"
                            }
                          },
                          "id": 13711,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17747:22:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "hexValue": "30",
                          "id": 13712,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "17773:1:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "17747:27:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6e6f20746f6b656e7320746f207265636f766572",
                        "id": 13714,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17776:22:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_79f07542aa3c1495c3697dc03cda6d93f53c96c4590f84c59ebcb420f5f0ee98",
                          "typeString": "literal_string \"no tokens to recover\""
                        },
                        "value": "no tokens to recover"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_79f07542aa3c1495c3697dc03cda6d93f53c96c4590f84c59ebcb420f5f0ee98",
                          "typeString": "literal_string \"no tokens to recover\""
                        }
                      ],
                      "id": 13708,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967278,
                        4294967278
                      ],
                      "referencedDeclaration": 4294967278,
                      "src": "17739:7:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13715,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17739:60:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13716,
                  "nodeType": "ExpressionStatement",
                  "src": "17739:60:53"
                },
                {
                  "assignments": [
                    13719
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13719,
                      "mutability": "mutable",
                      "name": "_onchainID",
                      "nameLocation": "17819:10:53",
                      "nodeType": "VariableDeclaration",
                      "scope": 13809,
                      "src": "17809:20:53",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IIdentity_$1743",
                        "typeString": "contract IIdentity"
                      },
                      "typeName": {
                        "id": 13718,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 13717,
                          "name": "IIdentity",
                          "nameLocations": [
                            "17809:9:53"
                          ],
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 1743,
                          "src": "17809:9:53"
                        },
                        "referencedDeclaration": 1743,
                        "src": "17809:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IIdentity_$1743",
                          "typeString": "contract IIdentity"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 13723,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 13721,
                        "name": "_investorOnchainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13700,
                        "src": "17842:18:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13720,
                      "name": "IIdentity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1743,
                      "src": "17832:9:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IIdentity_$1743_$",
                        "typeString": "type(contract IIdentity)"
                      }
                    },
                    "id": 13722,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17832:29:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IIdentity_$1743",
                      "typeString": "contract IIdentity"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17809:52:53"
                },
                {
                  "assignments": [
                    13725
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13725,
                      "mutability": "mutable",
                      "name": "_key",
                      "nameLocation": "17879:4:53",
                      "nodeType": "VariableDeclaration",
                      "scope": 13809,
                      "src": "17871:12:53",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 13724,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "17871:7:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 13732,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 13729,
                            "name": "_newWallet",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13698,
                            "src": "17907:10:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 13727,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 4294967295,
                            "src": "17896:3:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 13728,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberLocation": "17900:6:53",
                          "memberName": "encode",
                          "nodeType": "MemberAccess",
                          "src": "17896:10:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 13730,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17896:22:53",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 13726,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4294967288,
                      "src": "17886:9:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 13731,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17886:33:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17871:48:53"
                },
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 13735,
                        "name": "_key",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13725,
                        "src": "17958:4:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "hexValue": "31",
                        "id": 13736,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17964:1:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "expression": {
                        "id": 13733,
                        "name": "_onchainID",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13719,
                        "src": "17933:10:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IIdentity_$1743",
                          "typeString": "contract IIdentity"
                        }
                      },
                      "id": 13734,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "17944:13:53",
                      "memberName": "keyHasPurpose",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1598,
                      "src": "17933:24:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (bytes32,uint256) view external returns (bool)"
                      }
                    },
                    "id": 13737,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17933:33:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13804,
                  "nodeType": "IfStatement",
                  "src": "17929:766:53",
                  "trueBody": {
                    "id": 13803,
                    "nodeType": "Block",
                    "src": "17968:727:53",
                    "statements": [
                      {
                        "assignments": [
                          13739
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 13739,
                            "mutability": "mutable",
                            "name": "investorTokens",
                            "nameLocation": "17990:14:53",
                            "nodeType": "VariableDeclaration",
                            "scope": 13803,
                            "src": "17982:22:53",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 13738,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "17982:7:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 13743,
                        "initialValue": {
                          "arguments": [
                            {
                              "id": 13741,
                              "name": "_lostWallet",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13696,
                              "src": "18017:11:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 13740,
                            "name": "balanceOf",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12412,
                            "src": "18007:9:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) view returns (uint256)"
                            }
                          },
                          "id": 13742,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18007:22:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "17982:47:53"
                      },
                      {
                        "assignments": [
                          13745
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 13745,
                            "mutability": "mutable",
                            "name": "_frozenTokens",
                            "nameLocation": "18051:13:53",
                            "nodeType": "VariableDeclaration",
                            "scope": 13803,
                            "src": "18043:21:53",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 13744,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "18043:7:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 13749,
                        "initialValue": {
                          "baseExpression": {
                            "id": 13746,
                            "name": "frozenTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 12272,
                            "src": "18067:12:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 13748,
                          "indexExpression": {
                            "id": 13747,
                            "name": "_lostWallet",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13696,
                            "src": "18080:11:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "18067:25:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "18043:49:53"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 13753,
                              "name": "_newWallet",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13698,
                              "src": "18145:10:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 13754,
                              "name": "_onchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13719,
                              "src": "18157:10:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "id": 13757,
                                  "name": "_lostWallet",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13696,
                                  "src": "18207:11:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "id": 13755,
                                  "name": "tokenIdentityRegistry",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 12279,
                                  "src": "18169:21:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                                    "typeString": "contract IIdentityRegistry"
                                  }
                                },
                                "id": 13756,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "18191:15:53",
                                "memberName": "investorCountry",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 6597,
                                "src": "18169:37:53",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint16_$",
                                  "typeString": "function (address) view external returns (uint16)"
                                }
                              },
                              "id": 13758,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18169:50:53",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_contract$_IIdentity_$1743",
                                "typeString": "contract IIdentity"
                              },
                              {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            ],
                            "expression": {
                              "id": 13750,
                              "name": "tokenIdentityRegistry",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12279,
                              "src": "18106:21:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                                "typeString": "contract IIdentityRegistry"
                              }
                            },
                            "id": 13752,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "18128:16:53",
                            "memberName": "registerIdentity",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6509,
                            "src": "18106:38:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_contract$_IIdentity_$1743_$_t_uint16_$returns$__$",
                              "typeString": "function (address,contract IIdentity,uint16) external"
                            }
                          },
                          "id": 13759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18106:114:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13760,
                        "nodeType": "ExpressionStatement",
                        "src": "18106:114:53"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 13764,
                              "name": "_lostWallet",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13696,
                              "src": "18271:11:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "id": 13761,
                              "name": "tokenIdentityRegistry",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12279,
                              "src": "18234:21:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IIdentityRegistry_$6637",
                                "typeString": "contract IIdentityRegistry"
                              }
                            },
                            "id": 13763,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "18256:14:53",
                            "memberName": "deleteIdentity",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 6515,
                            "src": "18234:36:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                              "typeString": "function (address) external"
                            }
                          },
                          "id": 13765,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18234:49:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13766,
                        "nodeType": "ExpressionStatement",
                        "src": "18234:49:53"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 13768,
                              "name": "_lostWallet",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13696,
                              "src": "18312:11:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 13769,
                              "name": "_newWallet",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13698,
                              "src": "18325:10:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 13770,
                              "name": "investorTokens",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13739,
                              "src": "18337:14:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 13767,
                            "name": "forcedTransfer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13231,
                            "src": "18297:14:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,address,uint256) returns (bool)"
                            }
                          },
                          "id": 13771,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18297:55:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 13772,
                        "nodeType": "ExpressionStatement",
                        "src": "18297:55:53"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13775,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 13773,
                            "name": "_frozenTokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13745,
                            "src": "18370:13:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "hexValue": "30",
                            "id": 13774,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "18386:1:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "18370:17:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 13782,
                        "nodeType": "IfStatement",
                        "src": "18366:102:53",
                        "trueBody": {
                          "id": 13781,
                          "nodeType": "Block",
                          "src": "18389:79:53",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 13777,
                                    "name": "_newWallet",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13698,
                                    "src": "18427:10:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "id": 13778,
                                    "name": "_frozenTokens",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13745,
                                    "src": "18439:13:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 13776,
                                  "name": "freezePartialTokens",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13548,
                                  "src": "18407:19:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,uint256)"
                                  }
                                },
                                "id": 13779,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18407:46:53",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 13780,
                              "nodeType": "ExpressionStatement",
                              "src": "18407:46:53"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 13787,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "baseExpression": {
                              "id": 13783,
                              "name": "frozen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 12268,
                              "src": "18485:6:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 13785,
                            "indexExpression": {
                              "id": 13784,
                              "name": "_lostWallet",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13696,
                              "src": "18492:11:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "18485:19:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "hexValue": "74727565",
                            "id": 13786,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "18508:4:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "18485:27:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 13794,
                        "nodeType": "IfStatement",
                        "src": "18481:100:53",
                        "trueBody": {
                          "id": 13793,
                          "nodeType": "Block",
                          "src": "18514:67:53",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 13789,
                                    "name": "_newWallet",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 13698,
                                    "src": "18549:10:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "hexValue": "74727565",
                                    "id": 13790,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "bool",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "18561:4:53",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    "value": "true"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "id": 13788,
                                  "name": "setAddressFrozen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13469,
                                  "src": "18532:16:53",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$",
                                    "typeString": "function (address,bool)"
                                  }
                                },
                                "id": 13791,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "18532:34:53",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 13792,
                              "nodeType": "ExpressionStatement",
                              "src": "18532:34:53"
                            }
                          ]
                        }
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 13796,
                              "name": "_lostWallet",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13696,
                              "src": "18615:11:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 13797,
                              "name": "_newWallet",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13698,
                              "src": "18628:10:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 13798,
                              "name": "_investorOnchainID",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13700,
                              "src": "18640:18:53",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 13795,
                            "name": "RecoverySuccess",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11941,
                            "src": "18599:15:53",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$returns$__$",
                              "typeString": "function (address,address,address)"
                            }
                          },
                          "id": 13799,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18599:60:53",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13800,
                        "nodeType": "EmitStatement",
                        "src": "18594:65:53"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 13801,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "18680:4:53",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 13707,
                        "id": 13802,
                        "nodeType": "Return",
                        "src": "18673:11:53"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "hexValue": "5265636f76657279206e6f7420706f737369626c65",
                        "id": 13806,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18711:23:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_7fa31a753f0812c7ef0f752524a300c5cddee17825e6c8ff6ef207e358e92664",
                          "typeString": "literal_string \"Recovery not possible\""
                        },
                        "value": "Recovery not possible"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_7fa31a753f0812c7ef0f752524a300c5cddee17825e6c8ff6ef207e358e92664",
                          "typeString": "literal_string \"Recovery not possible\""
                        }
                      ],
                      "id": 13805,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        4294967277,
                        4294967277
                      ],
                      "referencedDeclaration": 4294967277,
                      "src": "18704:6:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 13807,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18704:31:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13808,
                  "nodeType": "ExpressionStatement",
                  "src": "18704:31:53"
                }
              ]
            },
            "documentation": {
              "id": 13694,
              "nodeType": "StructuredDocumentation",
              "src": "17503:54:53",
              "text": "  @dev See {IToken-recoveryAddress}."
            },
            "functionSelector": "9285948a",
            "id": 13810,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 13704,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 13703,
                  "name": "onlyAgent",
                  "nameLocations": [
                    "17704:9:53"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 9153,
                  "src": "17704:9:53"
                },
                "nodeType": "ModifierInvocation",
                "src": "17704:9:53"
              }
            ],
            "name": "recoveryAddress",
            "nameLocation": "17571:15:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13702,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "17695:8:53"
            },
            "parameters": {
              "id": 13701,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13696,
                  "mutability": "mutable",
                  "name": "_lostWallet",
                  "nameLocation": "17604:11:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13810,
                  "src": "17596:19:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13695,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17596:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13698,
                  "mutability": "mutable",
                  "name": "_newWallet",
                  "nameLocation": "17633:10:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13810,
                  "src": "17625:18:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13697,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17625:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13700,
                  "mutability": "mutable",
                  "name": "_investorOnchainID",
                  "nameLocation": "17661:18:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13810,
                  "src": "17653:26:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13699,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17653:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17586:99:53"
            },
            "returnParameters": {
              "id": 13707,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13706,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 13810,
                  "src": "17723:4:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13705,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17723:4:53",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17722:6:53"
            },
            "scope": 13849,
            "src": "17562:1180:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12221
            ],
            "body": {
              "id": 13823,
              "nodeType": "Block",
              "src": "18913:45:53",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 13820,
                        "name": "_newOwner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13813,
                        "src": "18941:9:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13819,
                      "name": "transferOwnership",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1930,
                      "src": "18923:17:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 13821,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18923:28:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13822,
                  "nodeType": "ExpressionStatement",
                  "src": "18923:28:53"
                }
              ]
            },
            "documentation": {
              "id": 13811,
              "nodeType": "StructuredDocumentation",
              "src": "18748:71:53",
              "text": "  @dev See {IToken-transferOwnershipOnTokenContract}."
            },
            "functionSelector": "51411b33",
            "id": 13824,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 13817,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 13816,
                  "name": "onlyOwner",
                  "nameLocations": [
                    "18903:9:53"
                  ],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 1870,
                  "src": "18903:9:53"
                },
                "nodeType": "ModifierInvocation",
                "src": "18903:9:53"
              }
            ],
            "name": "transferOwnershipOnTokenContract",
            "nameLocation": "18833:32:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13815,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "18894:8:53"
            },
            "parameters": {
              "id": 13814,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13813,
                  "mutability": "mutable",
                  "name": "_newOwner",
                  "nameLocation": "18874:9:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13824,
                  "src": "18866:17:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13812,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18866:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18865:19:53"
            },
            "returnParameters": {
              "id": 13818,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18913:0:53"
            },
            "scope": 13849,
            "src": "18824:134:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12227
            ],
            "body": {
              "id": 13835,
              "nodeType": "Block",
              "src": "19098:33:53",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 13832,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13827,
                        "src": "19117:6:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13831,
                      "name": "addAgent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9184,
                      "src": "19108:8:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 13833,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19108:16:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13834,
                  "nodeType": "ExpressionStatement",
                  "src": "19108:16:53"
                }
              ]
            },
            "documentation": {
              "id": 13825,
              "nodeType": "StructuredDocumentation",
              "src": "18964:62:53",
              "text": "  @dev See {IToken-addAgentOnTokenContract}."
            },
            "functionSelector": "b422d830",
            "id": 13836,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "addAgentOnTokenContract",
            "nameLocation": "19040:23:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13829,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "19089:8:53"
            },
            "parameters": {
              "id": 13828,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13827,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "19072:6:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13836,
                  "src": "19064:14:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13826,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19064:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19063:16:53"
            },
            "returnParameters": {
              "id": 13830,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19098:0:53"
            },
            "scope": 13849,
            "src": "19031:100:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              12233
            ],
            "body": {
              "id": 13847,
              "nodeType": "Block",
              "src": "19277:36:53",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 13844,
                        "name": "_agent",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13839,
                        "src": "19299:6:53",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13843,
                      "name": "removeAgent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9202,
                      "src": "19287:11:53",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 13845,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19287:19:53",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13846,
                  "nodeType": "ExpressionStatement",
                  "src": "19287:19:53"
                }
              ]
            },
            "documentation": {
              "id": 13837,
              "nodeType": "StructuredDocumentation",
              "src": "19137:65:53",
              "text": "  @dev See {IToken-removeAgentOnTokenContract}."
            },
            "functionSelector": "5dc7a3cb",
            "id": 13848,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "removeAgentOnTokenContract",
            "nameLocation": "19216:26:53",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 13841,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "19268:8:53"
            },
            "parameters": {
              "id": 13840,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13839,
                  "mutability": "mutable",
                  "name": "_agent",
                  "nameLocation": "19251:6:53",
                  "nodeType": "VariableDeclaration",
                  "scope": 13848,
                  "src": "19243:14:53",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13838,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19243:7:53",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19242:16:53"
            },
            "returnParameters": {
              "id": 13842,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19277:0:53"
            },
            "scope": 13849,
            "src": "19207:106:53",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 13850,
        "src": "1532:17783:53",
        "usedErrors": []
      }
    ],
    "src": "1093:18223:53"
  },
  "compiler": {
    "name": "solc",
    "version": "0.8.17+commit.8df45f5f.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.4.8",
  "updatedAt": "2022-12-08T12:51:01.408Z",
  "devdoc": {
    "kind": "dev",
    "methods": {
      "addAgentOnTokenContract(address)": {
        "details": "See {IToken-addAgentOnTokenContract}."
      },
      "allowance(address,address)": {
        "details": "See {IERC20-allowance}."
      },
      "approve(address,uint256)": {
        "details": "See {IERC20-approve}."
      },
      "balanceOf(address)": {
        "details": "See {IERC20-balanceOf}."
      },
      "batchBurn(address[],uint256[])": {
        "details": "See {IToken-batchBurn}."
      },
      "batchForcedTransfer(address[],address[],uint256[])": {
        "details": "See {IToken-batchForcedTransfer}."
      },
      "batchFreezePartialTokens(address[],uint256[])": {
        "details": "See {IToken-batchFreezePartialTokens}."
      },
      "batchMint(address[],uint256[])": {
        "details": "See {IToken-batchMint}."
      },
      "batchSetAddressFrozen(address[],bool[])": {
        "details": "See {IToken-batchSetAddressFrozen}."
      },
      "batchTransfer(address[],uint256[])": {
        "details": "See {IToken-batchTransfer}."
      },
      "batchUnfreezePartialTokens(address[],uint256[])": {
        "details": "See {IToken-batchUnfreezePartialTokens}."
      },
      "burn(address,uint256)": {
        "details": "See {IToken-burn}."
      },
      "compliance()": {
        "details": "See {IToken-compliance}."
      },
      "decimals()": {
        "details": "See {IToken-decimals}."
      },
      "decreaseAllowance(address,uint256)": {
        "details": "See {ERC20-decreaseAllowance}."
      },
      "forcedTransfer(address,address,uint256)": {
        "details": "See {IToken-forcedTransfer}."
      },
      "freezePartialTokens(address,uint256)": {
        "details": "See {IToken-freezePartialTokens}."
      },
      "getFrozenTokens(address)": {
        "details": "See {IToken-getFrozenTokens}."
      },
      "identityRegistry()": {
        "details": "See {IToken-identityRegistry}."
      },
      "increaseAllowance(address,uint256)": {
        "details": "See {ERC20-increaseAllowance}."
      },
      "init(address,address,string,string,uint8,address)": {
        "details": "the constructor initiates the token contract  msg.sender is set automatically as the owner of the smart contract",
        "params": {
          "_compliance": "the address of the compliance contract linked to the token",
          "_decimals": "the decimals of the token",
          "_identityRegistry": "the address of the Identity registry linked to the token",
          "_name": "the name of the token",
          "_onchainID": "the address of the onchainID of the token  emits an `UpdatedTokenInformation` event  emits an `IdentityRegistryAdded` event  emits a `ComplianceAdded` event",
          "_symbol": "the symbol of the token"
        }
      },
      "isFrozen(address)": {
        "details": "See {IToken-isFrozen}."
      },
      "mint(address,uint256)": {
        "details": "See {IToken-mint}."
      },
      "name()": {
        "details": "See {IToken-name}."
      },
      "onchainID()": {
        "details": "See {IToken-onchainID}."
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "pause()": {
        "details": "See {IToken-pause}."
      },
      "paused()": {
        "details": "See {IToken-paused}."
      },
      "recoveryAddress(address,address,address)": {
        "details": "See {IToken-recoveryAddress}."
      },
      "removeAgentOnTokenContract(address)": {
        "details": "See {IToken-removeAgentOnTokenContract}."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "setAddressFrozen(address,bool)": {
        "details": "See {IToken-setAddressFrozen}."
      },
      "setCompliance(address)": {
        "details": "See {IToken-setCompliance}."
      },
      "setIdentityRegistry(address)": {
        "details": "See {IToken-setIdentityRegistry}."
      },
      "setName(string)": {
        "details": "See {IToken-setName}."
      },
      "setOnchainID(address)": {
        "details": "See {IToken-setOnchainID}."
      },
      "setSymbol(string)": {
        "details": "See {IToken-setSymbol}."
      },
      "symbol()": {
        "details": "See {IToken-symbol}."
      },
      "totalSupply()": {
        "details": "See {IERC20-totalSupply}."
      },
      "transfer(address,uint256)": {
        "params": {
          "_amount": "The number of tokens to transfer",
          "_to": "The address of the receiver"
        },
        "returns": {
          "_0": "`true` if successful and revert if unsuccessful"
        }
      },
      "transferFrom(address,address,uint256)": {
        "params": {
          "_amount": "The number of tokens to transfer",
          "_from": "The address of the sender",
          "_to": "The address of the receiver"
        },
        "returns": {
          "_0": "`true` if successful and revert if unsuccessful"
        }
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      },
      "transferOwnershipOnTokenContract(address)": {
        "details": "See {IToken-transferOwnershipOnTokenContract}."
      },
      "unfreezePartialTokens(address,uint256)": {
        "details": "See {IToken-unfreezePartialTokens}."
      },
      "unpause()": {
        "details": "See {IToken-unpause}."
      },
      "version()": {
        "details": "See {IToken-version}."
      }
    },
    "version": 1
  },
  "userdoc": {
    "events": {
      "AddressFrozen(address,bool,address)": {
        "notice": "this event is emitted when the wallet of an investor is frozen or unfrozen  the event is emitted by setAddressFrozen and batchSetAddressFrozen functions  `_userAddress` is the wallet of the investor that is concerned by the freezing status  `_isFrozen` is the freezing status of the wallet  if `_isFrozen` equals `true` the wallet is frozen after emission of the event  if `_isFrozen` equals `false` the wallet is unfrozen after emission of the event  `_owner` is the address of the agent who called the function to freeze the wallet"
      },
      "ComplianceAdded(address)": {
        "notice": "this event is emitted when the Compliance has been set for the token  the event is emitted by the token constructor and by the setCompliance function  `_compliance` is the address of the Compliance contract of the token"
      },
      "IdentityRegistryAdded(address)": {
        "notice": "this event is emitted when the IdentityRegistry has been set for the token  the event is emitted by the token constructor and by the setIdentityRegistry function  `_identityRegistry` is the address of the Identity Registry of the token"
      },
      "Paused(address)": {
        "notice": "this event is emitted when the token is paused  the event is emitted by the pause function  `_userAddress` is the address of the wallet that called the pause function"
      },
      "RecoverySuccess(address,address,address)": {
        "notice": "this event is emitted when an investor successfully recovers his tokens  the event is emitted by the recoveryAddress function  `_lostWallet` is the address of the wallet that the investor lost access to  `_newWallet` is the address of the wallet that the investor provided for the recovery  `_investorOnchainID` is the address of the onchainID of the investor who asked for a recovery"
      },
      "TokensFrozen(address,uint256)": {
        "notice": "this event is emitted when a certain amount of tokens is frozen on a wallet  the event is emitted by freezePartialTokens and batchFreezePartialTokens functions  `_userAddress` is the wallet of the investor that is concerned by the freezing status  `_amount` is the amount of tokens that are frozen"
      },
      "TokensUnfrozen(address,uint256)": {
        "notice": "this event is emitted when a certain amount of tokens is unfrozen on a wallet  the event is emitted by unfreezePartialTokens and batchUnfreezePartialTokens functions  `_userAddress` is the wallet of the investor that is concerned by the freezing status  `_amount` is the amount of tokens that are unfrozen"
      },
      "Unpaused(address)": {
        "notice": "this event is emitted when the token is unpaused  the event is emitted by the unpause function  `_userAddress` is the address of the wallet that called the unpause function"
      },
      "UpdatedTokenInformation(string,string,uint8,string,address)": {
        "notice": "this event is emitted when the token information is updated.  the event is emitted by the token constructor and by the setTokenInformation function  `_newName` is the name of the token  `_newSymbol` is the symbol of the token  `_newDecimals` is the decimals of the token  `_newVersion` is the version of the token, current version is 3.0  `_newOnchainID` is the address of the onchainID of the token"
      }
    },
    "kind": "user",
    "methods": {
      "transfer(address,uint256)": {
        "notice": "ERC-20 overridden function that include logic to check for trade validity.  Require that the msg.sender and to addresses are not frozen.  Require that the value should not exceed available balance .  Require that the to address is a verified address"
      },
      "transferFrom(address,address,uint256)": {
        "notice": "ERC-20 overridden function that include logic to check for trade validity.  Require that the from and to addresses are not frozen.  Require that the value should not exceed available balance .  Require that the to address is a verified address"
      }
    },
    "version": 1
  }
}