{
  "contractName": "SecurityToken",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_spender",
          "type": "address"
        },
        {
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "investorListed",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "finishedSTOMinting",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tokenBurner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tickerRegistry",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "securityTokenVersion",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "investors",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "currentCheckpointId",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "granularity",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "MAX_MODULES",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "freeze",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "STO_KEY",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_spender",
          "type": "address"
        },
        {
          "name": "_subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseApproval",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "polyToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "uint8"
        },
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "modules",
      "outputs": [
        {
          "name": "name",
          "type": "bytes32"
        },
        {
          "name": "moduleAddress",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "polymathRegistry",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "checkpointTotalSupply",
      "outputs": [
        {
          "name": "checkpointId",
          "type": "uint256"
        },
        {
          "name": "value",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "TRANSFERMANAGER_KEY",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "finishedIssuerMinting",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "PERMISSIONMANAGER_KEY",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "moduleRegistry",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "CHECKPOINT_KEY",
      "outputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "securityTokenRegistry",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tokenDetails",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_spender",
          "type": "address"
        },
        {
          "name": "_addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseApproval",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "investorCount",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_owner",
          "type": "address"
        },
        {
          "name": "_spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "updateFromRegistry",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        },
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "checkpointBalances",
      "outputs": [
        {
          "name": "checkpointId",
          "type": "uint256"
        },
        {
          "name": "value",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_name",
          "type": "string"
        },
        {
          "name": "_symbol",
          "type": "string"
        },
        {
          "name": "_decimals",
          "type": "uint8"
        },
        {
          "name": "_granularity",
          "type": "uint256"
        },
        {
          "name": "_tokenDetails",
          "type": "string"
        },
        {
          "name": "_polymathRegistry",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_type",
          "type": "uint8"
        },
        {
          "indexed": false,
          "name": "_name",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "name": "_moduleFactory",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_module",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_moduleCost",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_budget",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_timestamp",
          "type": "uint256"
        }
      ],
      "name": "LogModuleAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldDetails",
          "type": "string"
        },
        {
          "indexed": false,
          "name": "_newDetails",
          "type": "string"
        }
      ],
      "name": "LogUpdateTokenDetails",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_oldGranularity",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_newGranularity",
          "type": "uint256"
        }
      ],
      "name": "LogGranularityChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_type",
          "type": "uint8"
        },
        {
          "indexed": false,
          "name": "_module",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_timestamp",
          "type": "uint256"
        }
      ],
      "name": "LogModuleRemoved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_moduleType",
          "type": "uint8"
        },
        {
          "indexed": false,
          "name": "_module",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_budget",
          "type": "uint256"
        }
      ],
      "name": "LogModuleBudgetChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_freeze",
          "type": "bool"
        },
        {
          "indexed": false,
          "name": "_timestamp",
          "type": "uint256"
        }
      ],
      "name": "LogFreezeTransfers",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_checkpointId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_timestamp",
          "type": "uint256"
        }
      ],
      "name": "LogCheckpointCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_timestamp",
          "type": "uint256"
        }
      ],
      "name": "LogFinishMintingIssuer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_timestamp",
          "type": "uint256"
        }
      ],
      "name": "LogFinishMintingSTO",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_oldAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "_newAddress",
          "type": "address"
        }
      ],
      "name": "LogChangeSTRAddress",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipRenounced",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Minted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_burner",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "Burnt",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_moduleFactory",
          "type": "address"
        },
        {
          "name": "_data",
          "type": "bytes"
        },
        {
          "name": "_maxCost",
          "type": "uint256"
        },
        {
          "name": "_budget",
          "type": "uint256"
        }
      ],
      "name": "addModule",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_moduleType",
          "type": "uint8"
        },
        {
          "name": "_moduleIndex",
          "type": "uint8"
        }
      ],
      "name": "removeModule",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_moduleType",
          "type": "uint8"
        },
        {
          "name": "_moduleIndex",
          "type": "uint256"
        }
      ],
      "name": "getModule",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_moduleType",
          "type": "uint8"
        },
        {
          "name": "_name",
          "type": "bytes32"
        }
      ],
      "name": "getModuleByName",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        },
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "withdrawPoly",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_moduleType",
          "type": "uint8"
        },
        {
          "name": "_moduleIndex",
          "type": "uint8"
        },
        {
          "name": "_budget",
          "type": "uint256"
        }
      ],
      "name": "changeModuleBudget",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_newTokenDetails",
          "type": "string"
        }
      ],
      "name": "updateTokenDetails",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_granularity",
          "type": "uint256"
        }
      ],
      "name": "changeGranularity",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_start",
          "type": "uint256"
        },
        {
          "name": "_iters",
          "type": "uint256"
        }
      ],
      "name": "pruneInvestors",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getInvestorsLength",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "freezeTransfers",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "unfreezeTransfers",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_to",
          "type": "address"
        },
        {
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "name": "success",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_from",
          "type": "address"
        },
        {
          "name": "_to",
          "type": "address"
        },
        {
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "name": "success",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_from",
          "type": "address"
        },
        {
          "name": "_to",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "verifyTransfer",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "finishMintingIssuer",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "finishMintingSTO",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_investor",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "name": "success",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_investors",
          "type": "address[]"
        },
        {
          "name": "_amounts",
          "type": "uint256[]"
        }
      ],
      "name": "mintMulti",
      "outputs": [
        {
          "name": "success",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_delegate",
          "type": "address"
        },
        {
          "name": "_module",
          "type": "address"
        },
        {
          "name": "_perm",
          "type": "bytes32"
        }
      ],
      "name": "checkPermission",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_tokenBurner",
          "type": "address"
        }
      ],
      "name": "setTokenBurner",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "createCheckpoint",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_checkpointId",
          "type": "uint256"
        }
      ],
      "name": "totalSupplyAt",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_investor",
          "type": "address"
        },
        {
          "name": "_checkpointId",
          "type": "uint256"
        }
      ],
      "name": "balanceOfAt",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6080604052600c805460ff191690556011805460a060020a60ff02191690556014805461ffff191690553480156200003657600080fd5b5060405162004ee538038062004ee58339810160409081528151602080840151928401516060850151608086015160a08701519487018051909796870196939592949190930192829188918891889162000097916003919086019062000635565b508151620000ad90600490602085019062000635565b506005805460ff90921660ff19909216919091179055505060078054600160a060020a03191633179055600160a060020a0381161515620000ed57600080fd5b600c8054600160a060020a039092166101000261010060a860020a031990921691909117905562000126640100000000620002a6810204565b81516200013b90600690602085019062000635565b5050506008555050604080517f7472616e7366657228616464726573732c75696e743235362900000000000000815281519081900360190181207fffffffff00000000000000000000000000000000000000000000000000000000908116600090815260156020818152858320805460ff1990811660019081179092557f7472616e7366657246726f6d28616464726573732c616464726573732c75696e87527f74323536290000000000000000000000000000000000000000000000000000008388015287519687900360250187208616855283835287852080548216831790557f6d696e7428616464726573732c75696e743235362900000000000000000000008752875196879003840187208616855283835287852080548216831790557f6275726e2875696e7432353629000000000000000000000000000000000000008752875196879003600d01909620909416835252929092208054909116909117905550620006da565b600754600160a060020a03163314620002be57600080fd5b600c54604080517fbf40fac1000000000000000000000000000000000000000000000000000000008152602060048201819052600e60248301527f4d6f64756c65526567697374727900000000000000000000000000000000000060448301529151610100909304600160a060020a03169263bf40fac1926064808401939192918290030181600087803b1580156200035657600080fd5b505af11580156200036b573d6000803e3d6000fd5b505050506040513d60208110156200038257600080fd5b5051600d8054600160a060020a031916600160a060020a03928316179055600c54604080517fbf40fac1000000000000000000000000000000000000000000000000000000008152602060048201819052601560248301527f5365637572697479546f6b656e52656769737472790000000000000000000000604483015291516101009093049093169263bf40fac192606480830193928290030181600087803b1580156200043057600080fd5b505af115801562000445573d6000803e3d6000fd5b505050506040513d60208110156200045c57600080fd5b5051600e8054600160a060020a031916600160a060020a03928316178155600c54604080517fbf40fac100000000000000000000000000000000000000000000000000000000815260206004820181905260248201949094527f5469636b65725265676973747279000000000000000000000000000000000000604482015290516101009092049093169263bf40fac19260648083019391928290030181600087803b1580156200050c57600080fd5b505af115801562000521573d6000803e3d6000fd5b505050506040513d60208110156200053857600080fd5b5051600f8054600160a060020a031916600160a060020a03928316179055600c54604080517fbf40fac1000000000000000000000000000000000000000000000000000000008152602060048201819052600960248301527f506f6c79546f6b656e0000000000000000000000000000000000000000000000604483015291516101009093049093169263bf40fac192606480830193928290030181600087803b158015620005e657600080fd5b505af1158015620005fb573d6000803e3d6000fd5b505050506040513d60208110156200061257600080fd5b505160108054600160a060020a031916600160a060020a03909216919091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200067857805160ff1916838001178555620006a8565b82800160010185558215620006a8579182015b82811115620006a85782518255916020019190600101906200068b565b50620006b6929150620006ba565b5090565b620006d791905b80821115620006b65760008155600101620006c1565b90565b6147fb80620006ea6000396000f3006080604052600436106102c65763ffffffff60e060020a6000350416630150246081146102cb57806306fdde03146102e2578063095ea7b31461036c5780630c72a835146103a457806318160ddd146103c55780631b2ae899146103ec5780631bc125f31461040d578063210a8d0e14610422578063219371921461043a57806323b872dd1461044f5780632996f972146104795780632a858126146104aa578063313ce567146104bf57806331c420d4146104ea5780633876e6d3146104ff5780633feb5f2b1461051457806340c10f191461052c57806342966c681461055057806346b65ffd1461056857806346e4959d146105a75780634ee2cd7e146106355780635488cc8014610659578063556f0dc71461066e5780635f1e8c1b146106835780635fcc62771461069857806362a5af3b146106bc5780636604ca6b146106d157806366188463146106e65780636faa22a51461070a57806370a082311461071f578063715018a614610740578063729d20e21461075557806373826a931461077357806377282b70146107cc5780637e8937d9146107e15780638658b8b9146108125780638da5cb5b1461083c57806391415ce91461085157806395d89b4114610866578063981b24d01461087b5780639a4b1d5c146108935780639c3fe721146108bd5780639f45b45c146108d2578063a3f7e26d146108f0578063a8ef4b6614610905578063a9059cbb1461091a578063b0af768b1461093e578063b95459e41461095f578063bcddd64e14610974578063c5bac42114610989578063ce4dbdff146109a4578063d6abe110146109b9578063d73dd623146109ce578063d7e64c00146109f2578063dd62ed3e14610a07578063e3cc65e214610a2e578063f2fde38b14610a43578063f433262f14610a64578063f5efbd2d14610a79578063f8a4cc3314610aac578063fbaa401914610ac4578063ff0b9c9014610ae8575b600080fd5b3480156102d757600080fd5b506102e0610afd565b005b3480156102ee57600080fd5b506102f7610b97565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610331578181015183820152602001610319565b50505050905090810190601f16801561035e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561037857600080fd5b50610390600160a060020a0360043516602435610c25565b604080519115158252519081900360200190f35b3480156103b057600080fd5b50610390600160a060020a0360043516610c8b565b3480156103d157600080fd5b506103da610ca0565b60408051918252519081900360200190f35b3480156103f857600080fd5b506102e060ff60043581169060243516610ca7565b34801561041957600080fd5b506102e0610f47565b34801561042e57600080fd5b506102e0600435610fa2565b34801561044657600080fd5b50610390611052565b34801561045b57600080fd5b50610390600160a060020a0360043581169060243516604435611060565b34801561048557600080fd5b5061048e6110ee565b60408051600160a060020a039092168252519081900360200190f35b3480156104b657600080fd5b5061048e6110fd565b3480156104cb57600080fd5b506104d461110c565b6040805160ff9092168252519081900360200190f35b3480156104f657600080fd5b506102e0611115565b34801561050b57600080fd5b506103da6111ab565b34801561052057600080fd5b5061048e6004356111cf565b34801561053857600080fd5b50610390600160a060020a03600435166024356111f7565b34801561055c57600080fd5b506102e0600435611736565b34801561057457600080fd5b5061058660ff60043516602435611afc565b60408051928352600160a060020a0390911660208301528051918290030190f35b3480156105b357600080fd5b506040805160206004803580820135838102808601850190965280855261039095369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750949750611b9a9650505050505050565b34801561064157600080fd5b506103da600160a060020a0360043516602435611e9d565b34801561066557600080fd5b506103da611ecf565b34801561067a57600080fd5b506103da611ed5565b34801561068f57600080fd5b506104d4611edb565b3480156106a457600080fd5b506102e060ff60043581169060243516604435611ee0565b3480156106c857600080fd5b506103906123d2565b3480156106dd57600080fd5b506104d46123e2565b3480156106f257600080fd5b50610390600160a060020a03600435166024356123e7565b34801561071657600080fd5b5061048e6124d7565b34801561072b57600080fd5b506103da600160a060020a03600435166124e6565b34801561074c57600080fd5b506102e0612501565b34801561076157600080fd5b5061058660ff60043516602435612562565b34801561077f57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102e09436949293602493928401919081908401838280828437509497506125a69650505050505050565b3480156107d857600080fd5b5061048e6126e9565b3480156107ed57600080fd5b506107f96004356126fd565b6040805192835260208301919091528051918290030190f35b34801561081e57600080fd5b50610390600160a060020a0360043581169060243516604435612729565b34801561084857600080fd5b5061048e6128b0565b34801561085d57600080fd5b506104d46128bf565b34801561087257600080fd5b506102f76128c4565b34801561088757600080fd5b506103da60043561291f565b34801561089f57600080fd5b50610390600160a060020a0360043581169060243516604435612935565b3480156108c957600080fd5b50610390612c81565b3480156108de57600080fd5b5061058660ff60043516602435612c8a565b3480156108fc57600080fd5b506102e0612d8a565b34801561091157600080fd5b506104d4612de3565b34801561092657600080fd5b50610390600160a060020a0360043516602435612de8565b34801561094a57600080fd5b506102e0600160a060020a0360043516612e74565b34801561096b57600080fd5b5061048e612ead565b34801561098057600080fd5b506104d4612ebc565b34801561099557600080fd5b506102e0600435602435612ec1565b3480156109b057600080fd5b5061048e613006565b3480156109c557600080fd5b506102f7613015565b3480156109da57600080fd5b50610390600160a060020a0360043516602435613070565b3480156109fe57600080fd5b506103da613109565b348015610a1357600080fd5b506103da600160a060020a036004358116906024351661310f565b348015610a3a57600080fd5b506103da61313a565b348015610a4f57600080fd5b506102e0600160a060020a0360043516613140565b348015610a7057600080fd5b506102e0613163565b348015610a8557600080fd5b506102e060048035600160a060020a0316906024803590810191013560443560643561348d565b348015610ab857600080fd5b506102e0600435613510565b348015610ad057600080fd5b506107f9600160a060020a036004351660243561361b565b348015610af457600080fd5b506103da613656565b600754600160a060020a03163314610b1457600080fd5b60115460a060020a900460ff1615610b2b57600080fd5b6011805474ff0000000000000000000000000000000000000000191660a060020a90811791829055604080519190920460ff161515815242602082015281517fd057913b88ba41d6281d1ee94831a8a6166afd6b478ea9babb2c02b413f172b3929181900390910190a1565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610c1d5780601f10610bf257610100808354040283529160200191610c1d565b820191906000526020600020905b815481529060010190602001808311610c0057829003601f168201915b505050505081565b336000818152600260209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60176020526000908152604090205460ff1681565b6001545b90565b600754600160a060020a03163314610cbe57600080fd5b60ff80831660009081526016602052604090205490821610610d50576040805160e560020a62461bcd02815260206004820152603960248201527f4d6f64756c6520696e64657820646f65736e277420657869737420617320706560448201527f72207468652063686f6f73656e206d6f64756c65207479706500000000000000606482015290519081900360840190fd5b60ff8083166000908152601660205260408120805491929091908416908110610d7557fe5b6000918252602090912060016002909202010154600160a060020a03161415610e0e576040805160e560020a62461bcd02815260206004820152602860248201527f4d6f64756c6520636f6e747261637420616464726573732073686f756c64206e60448201527f6f74206265203078000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60ff8083166000818152601660205260409020805491927fe69a96f148bcf365cf82241853ecbeb32c5b01500d98bf3d93ee870cd951162c92908516908110610e5357fe5b60009182526020918290206001600290920201015460408051600160a060020a039092168252429282019290925281519081900390910190a260ff8216600090815260166020526040902080546000198101908110610eae57fe5b9060005260206000209060020201601660008460ff1660ff1681526020019081526020016000208260ff16815481101515610ee557fe5b600091825260208083208454600290930201918255600193840154939091018054600160a060020a031916600160a060020a039094169390931790925560ff8416815260169091526040902080546000190190610f42908261467b565b505050565b600754600160a060020a03163314610f5e57600080fd5b6014805461ff0019166101001790556040805142815290517fc3f76bdabdaf2a3983623e5efddd4deb49a4acdca62642d61969164d2a4441259181900360200190a1565b600754600160a060020a03163314610fb957600080fd5b801515611010576040805160e560020a62461bcd02815260206004820152601860248201527f4772616e756c61726974792063616e206e6f7420626520300000000000000000604482015290519081900360640190fd5b600854604080519182526020820183905280517fd13c95c3e8cd875fc20a3da70637bcd9e053e0414035532577769470649507dc9281900390910190a1600855565b601454610100900460ff1681565b600061106d8484846138d3565b611078848484612935565b15156110bc576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614790833981519152604482015290519081900360640190fd5b6110c5846139fd565b6110ce836139fd565b6110d9848484613a27565b15156110e457600080fd5b5060019392505050565b601154600160a060020a031681565b600f54600160a060020a031681565b60055460ff1681565b600754600160a060020a0316331461112c57600080fd5b60115460a060020a900460ff16151561114457600080fd5b6011805474ff00000000000000000000000000000000000000001916908190556040805160a060020a90920460ff161515825242602083015280517fd057913b88ba41d6281d1ee94831a8a6166afd6b478ea9babb2c02b413f172b39281900390910190a1565b7f302e302e3100000000000000000000000000000000000000000000000000000081565b600b8054829081106111dd57fe5b600091825260209091200154600160a060020a0316905081565b60006003600182805b60ff808516600090815260166020526040902054908216101561126f578180611265575060ff808516600090815260166020526040902080543392841690811061124657fe5b6000918252602090912060016002909202010154600160a060020a0316145b9150600101611200565b82801561127a575081155b1561139d5760ff8416600314156113365760ff84166000908152601660205260409020541580156112b55750600754600160a060020a031633145b1515611331576040805160e560020a62461bcd02815260206004820152602d60248201527f53656e646572206973206e6f74206f776e6572206f722053544f206d6f64756c60448201527f6520697320617474616368656400000000000000000000000000000000000000606482015290519081900360840190fd5b611398565b600754600160a060020a03163314611398576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b61141a565b81151561141a576040805160e560020a62461bcd02815260206004820152602160248201527f53656e646572206973206e6f7420636f7272656374206d6f64756c652074797060448201527f6500000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b856008548181151561142857fe5b06156114a4576040805160e560020a62461bcd02815260206004820152603360248201527f556e61626c6520746f206d6f6469667920746f6b656e2062616c616e6365732060448201527f61742074686973206772616e756c617269747900000000000000000000000000606482015290519081900360840190fd5b600754600160a060020a03163314156115175760145460ff1615611512576040805160e560020a62461bcd02815260206004820152601e60248201527f4d696e74696e672069732066696e697368656420666f72204973737565720000604482015290519081900360640190fd5b611577565b601454610100900460ff1615611577576040805160e560020a62461bcd02815260206004820152601c60248201527f4d696e74696e672069732066696e697368656420666f722053544f7300000000604482015290519081900360640190fd5b600160a060020a03881615156115fd576040805160e560020a62461bcd02815260206004820152602160248201527f496e766573746f7220616464726573732073686f756c64206e6f74206265203060448201527f7800000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b611609600089896138d3565b61161560008989612935565b1515611659576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614790833981519152604482015290519081900360640190fd5b611662886139fd565b61166a613b8c565b60015461167d908863ffffffff613b9b16565b600155600160a060020a0388166000908152602081905260409020546116a9908863ffffffff613b9b16565b600160a060020a038916600081815260208181526040918290209390935580518a8152905191927f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe92918290030190a2604080518881529051600160a060020a038a16916000916000805160206147b08339815191529181900360200190a3506001979650505050505050565b806008548181151561174457fe5b06156117c0576040805160e560020a62461bcd02815260206004820152603360248201527f556e61626c6520746f206d6f6469667920746f6b656e2062616c616e6365732060448201527f61742074686973206772616e756c617269747900000000000000000000000000606482015290519081900360840190fd5b6117cc336000846138d3565b601154600160a060020a03161515611854576040805160e560020a62461bcd02815260206004820152602c60248201527f546f6b656e204275726e657220636f6e7472616374206164647265737320697360448201527f206e6f7420736574207965740000000000000000000000000000000000000000606482015290519081900360840190fd5b61186033600084612935565b15156118a4576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614790833981519152604482015290519081900360640190fd5b33600090815260208190526040902054821115611931576040805160e560020a62461bcd02815260206004820152603960248201527f56616c75652073686f756c64206e6f2062652067726561746572207468616e2060448201527f7468652062616c616e6365206f66206d73672e73656e64657200000000000000606482015290519081900360840190fd5b61193a336139fd565b611942613b8c565b33600090815260208190526040902054611962908363ffffffff613ba816565b336000818152602081815260408083209490945560115484517f9dc29fac0000000000000000000000000000000000000000000000000000000081526004810194909452602484018790529351600160a060020a0390941693639dc29fac93604480820194918390030190829087803b1580156119de57600080fd5b505af11580156119f2573d6000803e3d6000fd5b505050506040513d6020811015611a0857600080fd5b50511515611a86576040805160e560020a62461bcd02815260206004820152602560248201527f546f6b656e206275726e65722070726f63657373206973206e6f742076616c6960448201527f6461746564000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600154611a99908363ffffffff613ba816565b60015560408051838152905133917f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b1919081900360200190a260408051838152905160009133916000805160206147b08339815191529181900360200190a35050565b60ff82166000908152601660205260408120548190811015611b8c5760ff84166000908152601660205260409020805484908110611b3657fe5b6000918252602080832060029092029091015460ff8716835260169091526040909120805485908110611b6557fe5b6000918252602090912060016002909202010154909250600160a060020a03169050611b93565b5060009050805b9250929050565b6000806003600182805b60ff8085166000908152601660205260409020549082161015611c13578180611c09575060ff8085166000908152601660205260409020805433928416908110611bea57fe5b6000918252602090912060016002909202010154600160a060020a0316145b9150600101611ba4565b828015611c1e575081155b15611d415760ff841660031415611cda5760ff8416600090815260166020526040902054158015611c595750600754600160a060020a031633145b1515611cd5576040805160e560020a62461bcd02815260206004820152602d60248201527f53656e646572206973206e6f74206f776e6572206f722053544f206d6f64756c60448201527f6520697320617474616368656400000000000000000000000000000000000000606482015290519081900360840190fd5b611d3c565b600754600160a060020a03163314611d3c576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b611dbe565b811515611dbe576040805160e560020a62461bcd02815260206004820152602160248201527f53656e646572206973206e6f7420636f7272656374206d6f64756c652074797060448201527f6500000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8651885114611e3d576040805160e560020a62461bcd02815260206004820152602560248201527f4d69732d6d6174636820696e20746865206c656e677468206f6620746865206160448201527f7272617973000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600094505b8751851015611e8f57611e838886815181101515611e5c57fe5b906020019060200201518887815181101515611e7457fe5b906020019060200201516111f7565b50600190940193611e42565b506001979650505050505050565b600160a060020a0382166000908152601260205260408120611ec89083611ec3866124e6565b613bba565b9392505050565b60095481565b60085481565b601481565b600754600090600160a060020a03163314611efa57600080fd5b60ff84161515611f54576040805160e560020a62461bcd02815260206004820152601a60248201527f4d6f64756c6520747970652063616e6e6f74206265207a65726f000000000000604482015290519081900360640190fd5b60ff80851660009081526016602052604090205490841610611fc0576040805160e560020a62461bcd02815260206004820152601760248201527f496e636f727272656374206d6f64756c6520696e646578000000000000000000604482015290519081900360640190fd5b60105460ff80861660009081526016602052604090208054600160a060020a039093169263dd62ed3e92309291908816908110611ff957fe5b60009182526020808320600160029093020191909101546040805160e060020a63ffffffff8816028152600160a060020a03958616600482015294909116602485015251604480850194929391928390030190829087803b15801561205d57600080fd5b505af1158015612071573d6000803e3d6000fd5b505050506040513d602081101561208757600080fd5b50519050808210156121f45760105460ff80861660009081526016602052604090208054600160a060020a039093169263661884639287169081106120c857fe5b6000918252602090912060016002909202010154600160a060020a03166120f5848663ffffffff613ba816565b6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561214757600080fd5b505af115801561215b573d6000803e3d6000fd5b505050506040513d602081101561217157600080fd5b505115156121ef576040805160e560020a62461bcd02815260206004820152602860248201527f496e73756666696369656e742062616c616e636520746f20646563726561736560448201527f417070726f76616c000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b612350565b60105460ff80861660009081526016602052604090208054600160a060020a039093169263d73dd62392871690811061222957fe5b6000918252602090912060016002909202010154600160a060020a0316612256858563ffffffff613ba816565b6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156122a857600080fd5b505af11580156122bc573d6000803e3d6000fd5b505050506040513d60208110156122d257600080fd5b50511515612350576040805160e560020a62461bcd02815260206004820152602860248201527f496e73756666696369656e742062616c616e636520746f20696e63726561736560448201527f417070726f76616c000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60ff8085166000818152601660205260409020805491927f56e65530d356ea53a7cecc9a37666884b4fe9f05a65df888abd3898548bc15f49290871690811061239557fe5b60009182526020918290206001600290920201015460408051600160a060020a03909216825291810186905281519081900390910190a250505050565b60115460a060020a900460ff1681565b600381565b336000908152600260209081526040808320600160a060020a03861684529091528120548083111561243c57336000908152600260209081526040808320600160a060020a0388168452909152812055612471565b61244c818463ffffffff613ba816565b336000908152600260209081526040808320600160a060020a03891684529091529020555b336000818152600260209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b601054600160a060020a031681565b600160a060020a031660009081526020819052604090205490565b600754600160a060020a0316331461251857600080fd5b600754604051600160a060020a03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260078054600160a060020a0319169055565b60166020528160005260406000208181548110151561257d57fe5b600091825260209091206002909102018054600190910154909250600160a060020a0316905082565b600754600160a060020a031633146125bd57600080fd5b6040805181815260068054600260001961010060018416150201909116049282018390527fcef6c04f6d4bada4c1a1fcbb22cadbe4d4fb609cea3788e920628a6186e587659290918491819060208201906060830190869080156126625780601f1061263757610100808354040283529160200191612662565b820191906000526020600020905b81548152906001019060200180831161264557829003601f168201915b5050838103825284518152845160209182019186019080838360005b8381101561269657818101518382015260200161267e565b50505050905090810190601f1680156126c35780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a180516126e59060069060208401906146a7565b5050565b600c546101009004600160a060020a031681565b601380548290811061270b57fe5b60009182526020909120600290910201805460019091015490915082565b6001600090815260166020527f4c4dc693d7db52f85fe052106f4b4b920e78e8ef37dee82878a60ab8585faf49548190151561276857600091506128a8565b5060005b600160005260166020527f4c4dc693d7db52f85fe052106f4b4b920e78e8ef37dee82878a60ab8585faf495460ff821610156128a857600160005260166020527f4c4dc693d7db52f85fe052106f4b4b920e78e8ef37dee82878a60ab8585faf49805460ff83169081106127dc57fe5b6000918252602080832060016002909302019190910154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152600160a060020a038a8116600483015289811660248301526044820189905291519190921693638658b8b993606480850194919392918390030190829087803b15801561286657600080fd5b505af115801561287a573d6000803e3d6000fd5b505050506040513d602081101561289057600080fd5b5051156128a057600191506128a8565b60010161276c565b509392505050565b600754600160a060020a031681565b600281565b6004805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610c1d5780601f10610bf257610100808354040283529160200191610c1d565b600061292f601383611ec3610ca0565b92915050565b6000806000806000806000876008548181151561294e57fe5b06156129ca576040805160e560020a62461bcd02815260206004820152603360248201527f556e61626c6520746f206d6f6469667920746f6b656e2062616c616e6365732060448201527f61742074686973206772616e756c617269747900000000000000000000000000606482015290519081900360840190fd5b60115460a060020a900460ff161515612c6e576000965060156000612a1f6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843750613d65945050505050565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260208101919091526040016000205460ff1615612a5f57600196505b600260005260166020527fcaff291fe014adc6b72a172705750b4cabe8f8667664d2924a166caab2885648541515612a9a5760019750612c73565b600095506000945060009350600092505b600260005260166020527fcaff291fe014adc6b72a172705750b4cabe8f8667664d2924a166caab28856485460ff84161015612c4c57600260005260166020527fcaff291fe014adc6b72a172705750b4cabe8f8667664d2924a166caab2885648805460ff8516908110612b1b57fe5b906000526020600020906002020160010160009054906101000a9004600160a060020a0316600160a060020a0316637915c9e08c8c8c8b6040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184600160a060020a0316600160a060020a0316815260200183815260200182151515158152602001945050505050602060405180830381600087803b158015612bc857600080fd5b505af1158015612bdc573d6000803e3d6000fd5b505050506040513d6020811015612bf257600080fd5b505191506000826003811115612c0457fe5b1415612c0f57600195505b6002826003811115612c1d57fe5b1415612c2857600194505b6003826003811115612c3657fe5b1415612c4157600193505b600190920191612aab565b83612c645785612c5c5784612c5f565b60005b612c67565b60015b9750612c73565b600097505b505050505050509392505050565b60145460ff1681565b60ff821660009081526016602052604081205481908190811015612d7a575060005b60ff8516600090815260166020526040902054811015612d7a5760ff85166000908152601660205260409020805485919083908110612ce757fe5b60009182526020909120600290910201541415612d725760ff85166000908152601660205260409020805482908110612d1c57fe5b6000918252602080832060029092029091015460ff8816835260169091526040909120805483908110612d4b57fe5b6000918252602090912060016002909202010154909350600160a060020a03169150612d82565b600101612cac565b600092508291505b509250929050565b600754600160a060020a03163314612da157600080fd5b6014805460ff191660011790556040805142815290517f10216e36c4b6dff3d74179d50b938f0f96afc610f073894ca04b4239299165679181900360200190a1565b600181565b6000612df53384846138d3565b612e00338484612935565b1515612e44576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614790833981519152604482015290519081900360640190fd5b612e4d336139fd565b612e56836139fd565b612e608383613de6565b1515612e6b57600080fd5b50600192915050565b600754600160a060020a03163314612e8b57600080fd5b60118054600160a060020a031916600160a060020a0392909216919091179055565b600d54600160a060020a031681565b600481565b600754600090600160a060020a03163314612edb57600080fd5b50815b612ef9612ef1848463ffffffff613b9b16565b600b54613eb5565b811015610f4257600b5481108015612f3a5750612f38600b82815481101515612f1e57fe5b600091825260209091200154600160a060020a03166124e6565b155b15612ffe57600060176000600b84815481101515612f5457fe5b600091825260208083209190910154600160a060020a031683528201929092526040019020805460ff1916911515919091179055600b80546000198101908110612f9a57fe5b600091825260209091200154600b8054600160a060020a039092169183908110612fc057fe5b60009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055600b805490612ffc906000198301614725565b505b600101612ede565b600e54600160a060020a031681565b6006805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610c1d5780601f10610bf257610100808354040283529160200191610c1d565b336000908152600260209081526040808320600160a060020a03861684529091528120546130a4908363ffffffff613b9b16565b336000818152600260209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600a5481565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b600b5490565b600754600160a060020a0316331461315757600080fd5b61316081613ecb565b50565b600754600160a060020a0316331461317a57600080fd5b600c546040805160e060020a63bf40fac1028152602060048201819052600e60248301527f4d6f64756c65526567697374727900000000000000000000000000000000000060448301529151610100909304600160a060020a03169263bf40fac1926064808401939192918290030181600087803b1580156131fb57600080fd5b505af115801561320f573d6000803e3d6000fd5b505050506040513d602081101561322557600080fd5b5051600d8054600160a060020a031916600160a060020a03928316179055600c546040805160e060020a63bf40fac1028152602060048201819052601560248301527f5365637572697479546f6b656e52656769737472790000000000000000000000604483015291516101009093049093169263bf40fac192606480830193928290030181600087803b1580156132bc57600080fd5b505af11580156132d0573d6000803e3d6000fd5b505050506040513d60208110156132e657600080fd5b5051600e8054600160a060020a031916600160a060020a03928316178155600c546040805160e060020a63bf40fac102815260206004820181905260248201949094527f5469636b65725265676973747279000000000000000000000000000000000000604482015290516101009092049093169263bf40fac19260648083019391928290030181600087803b15801561337f57600080fd5b505af1158015613393573d6000803e3d6000fd5b505050506040513d60208110156133a957600080fd5b5051600f8054600160a060020a031916600160a060020a03928316179055600c546040805160e060020a63bf40fac1028152602060048201819052600960248301527f506f6c79546f6b656e0000000000000000000000000000000000000000000000604483015291516101009093049093169263bf40fac192606480830193928290030181600087803b15801561344057600080fd5b505af1158015613454573d6000803e3d6000fd5b505050506040513d602081101561346a57600080fd5b505160108054600160a060020a031916600160a060020a03909216919091179055565b600754600160a060020a031633146134a457600080fd5b600c5460ff16156134b457600080fd5b600c805460ff19166001179055604080516020601f86018190048102820181019092528481526134ff9187919087908790819084018382808284378201915050505050508484613f3c565b5050600c805460ff19169055505050565b600754600160a060020a0316331461352757600080fd5b601054600754604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561359957600080fd5b505af11580156135ad573d6000803e3d6000fd5b505050506040513d60208110156135c357600080fd5b50511515613160576040805160e560020a62461bcd02815260206004820152601560248201527f496e2d73756666696369656e742062616c616e63650000000000000000000000604482015290519081900360640190fd5b60126020528160005260406000208181548110151561363657fe5b600091825260209091206002909102018054600190910154909250905082565b60006004600182805b60ff80851660009081526016602052604090205490821610156136ce5781806136c4575060ff80851660009081526016602052604090208054339284169081106136a557fe5b6000918252602090912060016002909202010154600160a060020a0316145b915060010161365f565b8280156136d9575081155b156137fc5760ff8416600314156137955760ff84166000908152601660205260409020541580156137145750600754600160a060020a031633145b1515613790576040805160e560020a62461bcd02815260206004820152602d60248201527f53656e646572206973206e6f74206f776e6572206f722053544f206d6f64756c60448201527f6520697320617474616368656400000000000000000000000000000000000000606482015290519081900360840190fd5b6137f7565b600754600160a060020a031633146137f7576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b613879565b811515613879576040805160e560020a62461bcd02815260206004820152602160248201527f53656e646572206973206e6f7420636f7272656374206d6f64756c652074797060448201527f6500000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6009546000191161388957600080fd5b60098054600101908190556040805142815290517feb3befa36ea6638fc3379fe62edc59509b81aeca57cfbb0f444b1e72b8ac93fe9181900360200190a260095494505050505090565b8015806138f1575081600160a060020a031683600160a060020a0316145b156138fb57610f42565b613904826124e6565b1580156139195750600160a060020a03821615155b1561393657600a5461393290600163ffffffff613b9b16565b600a555b61393f836124e6565b81141561395e57600a5461395a90600163ffffffff613ba816565b600a555b600160a060020a03821660009081526017602052604090205460ff1615801561398f5750600160a060020a03821615155b15610f4257600b805460018181019092557f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9018054600160a060020a038516600160a060020a031990911681179091556000908152601760205260409020805460ff19169091179055505050565b600160a060020a038116600090815260126020526040902061316090613a22836124e6565b6145b7565b6000600160a060020a0383161515613a3e57600080fd5b600160a060020a038416600090815260208190526040902054821115613a6357600080fd5b600160a060020a0384166000908152600260209081526040808320338452909152902054821115613a9357600080fd5b600160a060020a038416600090815260208190526040902054613abc908363ffffffff613ba816565b600160a060020a038086166000908152602081905260408082209390935590851681522054613af1908363ffffffff613b9b16565b600160a060020a03808516600090815260208181526040808320949094559187168152600282528281203382529091522054613b33908363ffffffff613ba816565b600160a060020a03808616600081815260026020908152604080832033845282529182902094909455805186815290519287169391926000805160206147b0833981519152929181900390910190a35060019392505050565b613b996013613a22610ca0565b565b8181018281101561292f57fe5b600082821115613bb457fe5b50900390565b6000806000806009548611151515613bd157600080fd5b851515613be15760009350613d5b565b86541515613bf157849350613d5b565b85876000815481101515613c0157fe5b600091825260209091206002909102015410613c3f57866000815481101515613c2657fe5b9060005260206000209060020201600101549350613d5b565b8654869088906000198101908110613c5357fe5b9060005260206000209060020201600001541015613c7357849350613d5b565b8654869088906000198101908110613c8757fe5b9060005260206000209060020201600001541415613cb157865487906000198101908110613c2657fe5b8654600093506000190191505b82821115613d38576002828401049050858782815481101515613cdd57fe5b9060005260206000209060020201600001541415613cfd57809150613d38565b858782815481101515613d0c57fe5b9060005260206000209060020201600001541015613d2f57806001019250613d33565b8091505b613cbe565b8682815481101515613d4657fe5b90600052602060002090600202016001015493505b5050509392505050565b60008060006004845110613d7a576004613d7d565b83515b9150600090505b81811015613ddf5780600183030360080260020a8482815181101515613da657fe5b90602001015160f860020a900460f860020a0260f860020a9004028360e060020a90040160e060020a0292508080600101915050613d84565b5050919050565b6000600160a060020a0383161515613dfd57600080fd5b33600090815260208190526040902054821115613e1957600080fd5b33600090815260208190526040902054613e39908363ffffffff613ba816565b3360009081526020819052604080822092909255600160a060020a03851681522054613e6b908363ffffffff613b9b16565b600160a060020a038416600081815260208181526040918290209390935580518581529051919233926000805160206147b08339815191529281900390910190a350600192915050565b6000818310613ec45781611ec8565b5090919050565b600160a060020a0381161515613ee057600080fd5b600754604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360078054600160a060020a031916600160a060020a0392909216919091179055565b600d54604080517fdc659907000000000000000000000000000000000000000000000000000000008152600160a060020a03878116600483015291516000938493849384938493929092169163dc65990791602480820192869290919082900301818387803b158015613fae57600080fd5b505af1158015613fc2573d6000803e3d6000fd5b5050505088945084600160a060020a03166315dae03e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561400757600080fd5b505af115801561401b573d6000803e3d6000fd5b505050506040513d602081101561403157600080fd5b505160ff81166000908152601660205260409020549094506014116140a0576040805160e560020a62461bcd02815260206004820152601f60248201527f4c696d6974206f66204d4158204d4f44554c4553206973207265616368656400604482015290519081900360640190fd5b84600160a060020a0316637e363ffa6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156140de57600080fd5b505af11580156140f2573d6000803e3d6000fd5b505050506040513d602081101561410857600080fd5b505192508683111561418a576040805160e560020a62461bcd02815260206004820152602e60248201527f4d617820436f737420697320616c77617973206265206772656174657220746860448201527f616e206d6f64756c6520636f7374000000000000000000000000000000000000606482015290519081900360840190fd5b601054604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a038c81166004830152602482018790529151919092169163095ea7b39160448083019260209291908290030181600087803b1580156141f957600080fd5b505af115801561420d573d6000803e3d6000fd5b505050506040513d602081101561422357600080fd5b505115156142a1576040805160e560020a62461bcd02815260206004820152602360248201527f4e6f742061626c6520746f20617070726f766520746865206d6f64756c65206360448201527f6f73740000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6040517e7743600000000000000000000000000000000000000000000000000000000081526020600482018181528a5160248401528a51600160a060020a0389169362774360938d939283926044019185019080838360005b838110156143125781810151838201526020016142fa565b50505050905090810190601f16801561433f5780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15801561435e57600080fd5b505af1158015614372573d6000803e3d6000fd5b505050506040513d602081101561438857600080fd5b5051601054604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a038085166004830152602482018b9052915193955091169163095ea7b3916044808201926020929091908290030181600087803b1580156143fb57600080fd5b505af115801561440f573d6000803e3d6000fd5b505050506040513d602081101561442557600080fd5b5051151561447d576040805160e560020a62461bcd02815260206004820152601e60248201527f4e6f742061626c6520746f20617070726f766520746865206275646765740000604482015290519081900360640190fd5b84600160a060020a03166317d7de7c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156144bb57600080fd5b505af11580156144cf573d6000803e3d6000fd5b505050506040513d60208110156144e557600080fd5b505160ff8516600081815260166020908152604080832081518083018352868152600160a060020a0389811682860181815284546001808201875595895297879020935160029098029093019687559151959092018054600160a060020a031916958316959095179094558151868152908f16928101929092528181019290925260608101879052608081018a90524260a0820152905192935090917fc6c63fb8912a7f464252e66132ad69604864e7520f1bcf0dd77c8d51d810a6519160c0908290030190a2505050505050505050565b60095415156145c5576126e5565b8154151561460c57604080518082019091526009548152602080820183815284546001818101875560008781529390932093516002909102909301928355519101556126e5565b60095482548390600019810190811061462157fe5b906000526020600020906002020160000154141561463e576126e5565b6040805180820190915260095481526020808201928352835460018082018655600095865291909420915160029094029091019283559051910155565b815481835581811115610f4257600202816002028360005260206000209182019101610f429190614749565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106146e857805160ff1916838001178555614715565b82800160010185558215614715579182015b828111156147155782518255916020019190600101906146fa565b50614721929150614775565b5090565b815481835581811115610f4257600083815260209020610f42918101908301614775565b610ca491905b808211156147215760008155600181018054600160a060020a031916905560020161474f565b610ca491905b80821115614721576000815560010161477b56005472616e73666572206973206e6f742076616c69640000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820603a316cc286fd62602ad8dbe767c2562b25743a005ad5627152316e1dc57a080029",
  "deployedBytecode": "0x6080604052600436106102c65763ffffffff60e060020a6000350416630150246081146102cb57806306fdde03146102e2578063095ea7b31461036c5780630c72a835146103a457806318160ddd146103c55780631b2ae899146103ec5780631bc125f31461040d578063210a8d0e14610422578063219371921461043a57806323b872dd1461044f5780632996f972146104795780632a858126146104aa578063313ce567146104bf57806331c420d4146104ea5780633876e6d3146104ff5780633feb5f2b1461051457806340c10f191461052c57806342966c681461055057806346b65ffd1461056857806346e4959d146105a75780634ee2cd7e146106355780635488cc8014610659578063556f0dc71461066e5780635f1e8c1b146106835780635fcc62771461069857806362a5af3b146106bc5780636604ca6b146106d157806366188463146106e65780636faa22a51461070a57806370a082311461071f578063715018a614610740578063729d20e21461075557806373826a931461077357806377282b70146107cc5780637e8937d9146107e15780638658b8b9146108125780638da5cb5b1461083c57806391415ce91461085157806395d89b4114610866578063981b24d01461087b5780639a4b1d5c146108935780639c3fe721146108bd5780639f45b45c146108d2578063a3f7e26d146108f0578063a8ef4b6614610905578063a9059cbb1461091a578063b0af768b1461093e578063b95459e41461095f578063bcddd64e14610974578063c5bac42114610989578063ce4dbdff146109a4578063d6abe110146109b9578063d73dd623146109ce578063d7e64c00146109f2578063dd62ed3e14610a07578063e3cc65e214610a2e578063f2fde38b14610a43578063f433262f14610a64578063f5efbd2d14610a79578063f8a4cc3314610aac578063fbaa401914610ac4578063ff0b9c9014610ae8575b600080fd5b3480156102d757600080fd5b506102e0610afd565b005b3480156102ee57600080fd5b506102f7610b97565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610331578181015183820152602001610319565b50505050905090810190601f16801561035e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561037857600080fd5b50610390600160a060020a0360043516602435610c25565b604080519115158252519081900360200190f35b3480156103b057600080fd5b50610390600160a060020a0360043516610c8b565b3480156103d157600080fd5b506103da610ca0565b60408051918252519081900360200190f35b3480156103f857600080fd5b506102e060ff60043581169060243516610ca7565b34801561041957600080fd5b506102e0610f47565b34801561042e57600080fd5b506102e0600435610fa2565b34801561044657600080fd5b50610390611052565b34801561045b57600080fd5b50610390600160a060020a0360043581169060243516604435611060565b34801561048557600080fd5b5061048e6110ee565b60408051600160a060020a039092168252519081900360200190f35b3480156104b657600080fd5b5061048e6110fd565b3480156104cb57600080fd5b506104d461110c565b6040805160ff9092168252519081900360200190f35b3480156104f657600080fd5b506102e0611115565b34801561050b57600080fd5b506103da6111ab565b34801561052057600080fd5b5061048e6004356111cf565b34801561053857600080fd5b50610390600160a060020a03600435166024356111f7565b34801561055c57600080fd5b506102e0600435611736565b34801561057457600080fd5b5061058660ff60043516602435611afc565b60408051928352600160a060020a0390911660208301528051918290030190f35b3480156105b357600080fd5b506040805160206004803580820135838102808601850190965280855261039095369593946024949385019291829185019084908082843750506040805187358901803560208181028481018201909552818452989b9a998901989297509082019550935083925085019084908082843750949750611b9a9650505050505050565b34801561064157600080fd5b506103da600160a060020a0360043516602435611e9d565b34801561066557600080fd5b506103da611ecf565b34801561067a57600080fd5b506103da611ed5565b34801561068f57600080fd5b506104d4611edb565b3480156106a457600080fd5b506102e060ff60043581169060243516604435611ee0565b3480156106c857600080fd5b506103906123d2565b3480156106dd57600080fd5b506104d46123e2565b3480156106f257600080fd5b50610390600160a060020a03600435166024356123e7565b34801561071657600080fd5b5061048e6124d7565b34801561072b57600080fd5b506103da600160a060020a03600435166124e6565b34801561074c57600080fd5b506102e0612501565b34801561076157600080fd5b5061058660ff60043516602435612562565b34801561077f57600080fd5b506040805160206004803580820135601f81018490048402850184019095528484526102e09436949293602493928401919081908401838280828437509497506125a69650505050505050565b3480156107d857600080fd5b5061048e6126e9565b3480156107ed57600080fd5b506107f96004356126fd565b6040805192835260208301919091528051918290030190f35b34801561081e57600080fd5b50610390600160a060020a0360043581169060243516604435612729565b34801561084857600080fd5b5061048e6128b0565b34801561085d57600080fd5b506104d46128bf565b34801561087257600080fd5b506102f76128c4565b34801561088757600080fd5b506103da60043561291f565b34801561089f57600080fd5b50610390600160a060020a0360043581169060243516604435612935565b3480156108c957600080fd5b50610390612c81565b3480156108de57600080fd5b5061058660ff60043516602435612c8a565b3480156108fc57600080fd5b506102e0612d8a565b34801561091157600080fd5b506104d4612de3565b34801561092657600080fd5b50610390600160a060020a0360043516602435612de8565b34801561094a57600080fd5b506102e0600160a060020a0360043516612e74565b34801561096b57600080fd5b5061048e612ead565b34801561098057600080fd5b506104d4612ebc565b34801561099557600080fd5b506102e0600435602435612ec1565b3480156109b057600080fd5b5061048e613006565b3480156109c557600080fd5b506102f7613015565b3480156109da57600080fd5b50610390600160a060020a0360043516602435613070565b3480156109fe57600080fd5b506103da613109565b348015610a1357600080fd5b506103da600160a060020a036004358116906024351661310f565b348015610a3a57600080fd5b506103da61313a565b348015610a4f57600080fd5b506102e0600160a060020a0360043516613140565b348015610a7057600080fd5b506102e0613163565b348015610a8557600080fd5b506102e060048035600160a060020a0316906024803590810191013560443560643561348d565b348015610ab857600080fd5b506102e0600435613510565b348015610ad057600080fd5b506107f9600160a060020a036004351660243561361b565b348015610af457600080fd5b506103da613656565b600754600160a060020a03163314610b1457600080fd5b60115460a060020a900460ff1615610b2b57600080fd5b6011805474ff0000000000000000000000000000000000000000191660a060020a90811791829055604080519190920460ff161515815242602082015281517fd057913b88ba41d6281d1ee94831a8a6166afd6b478ea9babb2c02b413f172b3929181900390910190a1565b6003805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610c1d5780601f10610bf257610100808354040283529160200191610c1d565b820191906000526020600020905b815481529060010190602001808311610c0057829003601f168201915b505050505081565b336000818152600260209081526040808320600160a060020a038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a350600192915050565b60176020526000908152604090205460ff1681565b6001545b90565b600754600160a060020a03163314610cbe57600080fd5b60ff80831660009081526016602052604090205490821610610d50576040805160e560020a62461bcd02815260206004820152603960248201527f4d6f64756c6520696e64657820646f65736e277420657869737420617320706560448201527f72207468652063686f6f73656e206d6f64756c65207479706500000000000000606482015290519081900360840190fd5b60ff8083166000908152601660205260408120805491929091908416908110610d7557fe5b6000918252602090912060016002909202010154600160a060020a03161415610e0e576040805160e560020a62461bcd02815260206004820152602860248201527f4d6f64756c6520636f6e747261637420616464726573732073686f756c64206e60448201527f6f74206265203078000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60ff8083166000818152601660205260409020805491927fe69a96f148bcf365cf82241853ecbeb32c5b01500d98bf3d93ee870cd951162c92908516908110610e5357fe5b60009182526020918290206001600290920201015460408051600160a060020a039092168252429282019290925281519081900390910190a260ff8216600090815260166020526040902080546000198101908110610eae57fe5b9060005260206000209060020201601660008460ff1660ff1681526020019081526020016000208260ff16815481101515610ee557fe5b600091825260208083208454600290930201918255600193840154939091018054600160a060020a031916600160a060020a039094169390931790925560ff8416815260169091526040902080546000190190610f42908261467b565b505050565b600754600160a060020a03163314610f5e57600080fd5b6014805461ff0019166101001790556040805142815290517fc3f76bdabdaf2a3983623e5efddd4deb49a4acdca62642d61969164d2a4441259181900360200190a1565b600754600160a060020a03163314610fb957600080fd5b801515611010576040805160e560020a62461bcd02815260206004820152601860248201527f4772616e756c61726974792063616e206e6f7420626520300000000000000000604482015290519081900360640190fd5b600854604080519182526020820183905280517fd13c95c3e8cd875fc20a3da70637bcd9e053e0414035532577769470649507dc9281900390910190a1600855565b601454610100900460ff1681565b600061106d8484846138d3565b611078848484612935565b15156110bc576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614790833981519152604482015290519081900360640190fd5b6110c5846139fd565b6110ce836139fd565b6110d9848484613a27565b15156110e457600080fd5b5060019392505050565b601154600160a060020a031681565b600f54600160a060020a031681565b60055460ff1681565b600754600160a060020a0316331461112c57600080fd5b60115460a060020a900460ff16151561114457600080fd5b6011805474ff00000000000000000000000000000000000000001916908190556040805160a060020a90920460ff161515825242602083015280517fd057913b88ba41d6281d1ee94831a8a6166afd6b478ea9babb2c02b413f172b39281900390910190a1565b7f302e302e3100000000000000000000000000000000000000000000000000000081565b600b8054829081106111dd57fe5b600091825260209091200154600160a060020a0316905081565b60006003600182805b60ff808516600090815260166020526040902054908216101561126f578180611265575060ff808516600090815260166020526040902080543392841690811061124657fe5b6000918252602090912060016002909202010154600160a060020a0316145b9150600101611200565b82801561127a575081155b1561139d5760ff8416600314156113365760ff84166000908152601660205260409020541580156112b55750600754600160a060020a031633145b1515611331576040805160e560020a62461bcd02815260206004820152602d60248201527f53656e646572206973206e6f74206f776e6572206f722053544f206d6f64756c60448201527f6520697320617474616368656400000000000000000000000000000000000000606482015290519081900360840190fd5b611398565b600754600160a060020a03163314611398576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b61141a565b81151561141a576040805160e560020a62461bcd02815260206004820152602160248201527f53656e646572206973206e6f7420636f7272656374206d6f64756c652074797060448201527f6500000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b856008548181151561142857fe5b06156114a4576040805160e560020a62461bcd02815260206004820152603360248201527f556e61626c6520746f206d6f6469667920746f6b656e2062616c616e6365732060448201527f61742074686973206772616e756c617269747900000000000000000000000000606482015290519081900360840190fd5b600754600160a060020a03163314156115175760145460ff1615611512576040805160e560020a62461bcd02815260206004820152601e60248201527f4d696e74696e672069732066696e697368656420666f72204973737565720000604482015290519081900360640190fd5b611577565b601454610100900460ff1615611577576040805160e560020a62461bcd02815260206004820152601c60248201527f4d696e74696e672069732066696e697368656420666f722053544f7300000000604482015290519081900360640190fd5b600160a060020a03881615156115fd576040805160e560020a62461bcd02815260206004820152602160248201527f496e766573746f7220616464726573732073686f756c64206e6f74206265203060448201527f7800000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b611609600089896138d3565b61161560008989612935565b1515611659576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614790833981519152604482015290519081900360640190fd5b611662886139fd565b61166a613b8c565b60015461167d908863ffffffff613b9b16565b600155600160a060020a0388166000908152602081905260409020546116a9908863ffffffff613b9b16565b600160a060020a038916600081815260208181526040918290209390935580518a8152905191927f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe92918290030190a2604080518881529051600160a060020a038a16916000916000805160206147b08339815191529181900360200190a3506001979650505050505050565b806008548181151561174457fe5b06156117c0576040805160e560020a62461bcd02815260206004820152603360248201527f556e61626c6520746f206d6f6469667920746f6b656e2062616c616e6365732060448201527f61742074686973206772616e756c617269747900000000000000000000000000606482015290519081900360840190fd5b6117cc336000846138d3565b601154600160a060020a03161515611854576040805160e560020a62461bcd02815260206004820152602c60248201527f546f6b656e204275726e657220636f6e7472616374206164647265737320697360448201527f206e6f7420736574207965740000000000000000000000000000000000000000606482015290519081900360840190fd5b61186033600084612935565b15156118a4576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614790833981519152604482015290519081900360640190fd5b33600090815260208190526040902054821115611931576040805160e560020a62461bcd02815260206004820152603960248201527f56616c75652073686f756c64206e6f2062652067726561746572207468616e2060448201527f7468652062616c616e6365206f66206d73672e73656e64657200000000000000606482015290519081900360840190fd5b61193a336139fd565b611942613b8c565b33600090815260208190526040902054611962908363ffffffff613ba816565b336000818152602081815260408083209490945560115484517f9dc29fac0000000000000000000000000000000000000000000000000000000081526004810194909452602484018790529351600160a060020a0390941693639dc29fac93604480820194918390030190829087803b1580156119de57600080fd5b505af11580156119f2573d6000803e3d6000fd5b505050506040513d6020811015611a0857600080fd5b50511515611a86576040805160e560020a62461bcd02815260206004820152602560248201527f546f6b656e206275726e65722070726f63657373206973206e6f742076616c6960448201527f6461746564000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600154611a99908363ffffffff613ba816565b60015560408051838152905133917f919f7e2092ffcc9d09f599be18d8152860b0c054df788a33bc549cdd9d0f15b1919081900360200190a260408051838152905160009133916000805160206147b08339815191529181900360200190a35050565b60ff82166000908152601660205260408120548190811015611b8c5760ff84166000908152601660205260409020805484908110611b3657fe5b6000918252602080832060029092029091015460ff8716835260169091526040909120805485908110611b6557fe5b6000918252602090912060016002909202010154909250600160a060020a03169050611b93565b5060009050805b9250929050565b6000806003600182805b60ff8085166000908152601660205260409020549082161015611c13578180611c09575060ff8085166000908152601660205260409020805433928416908110611bea57fe5b6000918252602090912060016002909202010154600160a060020a0316145b9150600101611ba4565b828015611c1e575081155b15611d415760ff841660031415611cda5760ff8416600090815260166020526040902054158015611c595750600754600160a060020a031633145b1515611cd5576040805160e560020a62461bcd02815260206004820152602d60248201527f53656e646572206973206e6f74206f776e6572206f722053544f206d6f64756c60448201527f6520697320617474616368656400000000000000000000000000000000000000606482015290519081900360840190fd5b611d3c565b600754600160a060020a03163314611d3c576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b611dbe565b811515611dbe576040805160e560020a62461bcd02815260206004820152602160248201527f53656e646572206973206e6f7420636f7272656374206d6f64756c652074797060448201527f6500000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b8651885114611e3d576040805160e560020a62461bcd02815260206004820152602560248201527f4d69732d6d6174636820696e20746865206c656e677468206f6620746865206160448201527f7272617973000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600094505b8751851015611e8f57611e838886815181101515611e5c57fe5b906020019060200201518887815181101515611e7457fe5b906020019060200201516111f7565b50600190940193611e42565b506001979650505050505050565b600160a060020a0382166000908152601260205260408120611ec89083611ec3866124e6565b613bba565b9392505050565b60095481565b60085481565b601481565b600754600090600160a060020a03163314611efa57600080fd5b60ff84161515611f54576040805160e560020a62461bcd02815260206004820152601a60248201527f4d6f64756c6520747970652063616e6e6f74206265207a65726f000000000000604482015290519081900360640190fd5b60ff80851660009081526016602052604090205490841610611fc0576040805160e560020a62461bcd02815260206004820152601760248201527f496e636f727272656374206d6f64756c6520696e646578000000000000000000604482015290519081900360640190fd5b60105460ff80861660009081526016602052604090208054600160a060020a039093169263dd62ed3e92309291908816908110611ff957fe5b60009182526020808320600160029093020191909101546040805160e060020a63ffffffff8816028152600160a060020a03958616600482015294909116602485015251604480850194929391928390030190829087803b15801561205d57600080fd5b505af1158015612071573d6000803e3d6000fd5b505050506040513d602081101561208757600080fd5b50519050808210156121f45760105460ff80861660009081526016602052604090208054600160a060020a039093169263661884639287169081106120c857fe5b6000918252602090912060016002909202010154600160a060020a03166120f5848663ffffffff613ba816565b6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b15801561214757600080fd5b505af115801561215b573d6000803e3d6000fd5b505050506040513d602081101561217157600080fd5b505115156121ef576040805160e560020a62461bcd02815260206004820152602860248201527f496e73756666696369656e742062616c616e636520746f20646563726561736560448201527f417070726f76616c000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b612350565b60105460ff80861660009081526016602052604090208054600160a060020a039093169263d73dd62392871690811061222957fe5b6000918252602090912060016002909202010154600160a060020a0316612256858563ffffffff613ba816565b6040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b1580156122a857600080fd5b505af11580156122bc573d6000803e3d6000fd5b505050506040513d60208110156122d257600080fd5b50511515612350576040805160e560020a62461bcd02815260206004820152602860248201527f496e73756666696369656e742062616c616e636520746f20696e63726561736560448201527f417070726f76616c000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60ff8085166000818152601660205260409020805491927f56e65530d356ea53a7cecc9a37666884b4fe9f05a65df888abd3898548bc15f49290871690811061239557fe5b60009182526020918290206001600290920201015460408051600160a060020a03909216825291810186905281519081900390910190a250505050565b60115460a060020a900460ff1681565b600381565b336000908152600260209081526040808320600160a060020a03861684529091528120548083111561243c57336000908152600260209081526040808320600160a060020a0388168452909152812055612471565b61244c818463ffffffff613ba816565b336000908152600260209081526040808320600160a060020a03891684529091529020555b336000818152600260209081526040808320600160a060020a0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b601054600160a060020a031681565b600160a060020a031660009081526020819052604090205490565b600754600160a060020a0316331461251857600080fd5b600754604051600160a060020a03909116907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260078054600160a060020a0319169055565b60166020528160005260406000208181548110151561257d57fe5b600091825260209091206002909102018054600190910154909250600160a060020a0316905082565b600754600160a060020a031633146125bd57600080fd5b6040805181815260068054600260001961010060018416150201909116049282018390527fcef6c04f6d4bada4c1a1fcbb22cadbe4d4fb609cea3788e920628a6186e587659290918491819060208201906060830190869080156126625780601f1061263757610100808354040283529160200191612662565b820191906000526020600020905b81548152906001019060200180831161264557829003601f168201915b5050838103825284518152845160209182019186019080838360005b8381101561269657818101518382015260200161267e565b50505050905090810190601f1680156126c35780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a180516126e59060069060208401906146a7565b5050565b600c546101009004600160a060020a031681565b601380548290811061270b57fe5b60009182526020909120600290910201805460019091015490915082565b6001600090815260166020527f4c4dc693d7db52f85fe052106f4b4b920e78e8ef37dee82878a60ab8585faf49548190151561276857600091506128a8565b5060005b600160005260166020527f4c4dc693d7db52f85fe052106f4b4b920e78e8ef37dee82878a60ab8585faf495460ff821610156128a857600160005260166020527f4c4dc693d7db52f85fe052106f4b4b920e78e8ef37dee82878a60ab8585faf49805460ff83169081106127dc57fe5b6000918252602080832060016002909302019190910154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152600160a060020a038a8116600483015289811660248301526044820189905291519190921693638658b8b993606480850194919392918390030190829087803b15801561286657600080fd5b505af115801561287a573d6000803e3d6000fd5b505050506040513d602081101561289057600080fd5b5051156128a057600191506128a8565b60010161276c565b509392505050565b600754600160a060020a031681565b600281565b6004805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610c1d5780601f10610bf257610100808354040283529160200191610c1d565b600061292f601383611ec3610ca0565b92915050565b6000806000806000806000876008548181151561294e57fe5b06156129ca576040805160e560020a62461bcd02815260206004820152603360248201527f556e61626c6520746f206d6f6469667920746f6b656e2062616c616e6365732060448201527f61742074686973206772616e756c617269747900000000000000000000000000606482015290519081900360840190fd5b60115460a060020a900460ff161515612c6e576000965060156000612a1f6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843750613d65945050505050565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260208101919091526040016000205460ff1615612a5f57600196505b600260005260166020527fcaff291fe014adc6b72a172705750b4cabe8f8667664d2924a166caab2885648541515612a9a5760019750612c73565b600095506000945060009350600092505b600260005260166020527fcaff291fe014adc6b72a172705750b4cabe8f8667664d2924a166caab28856485460ff84161015612c4c57600260005260166020527fcaff291fe014adc6b72a172705750b4cabe8f8667664d2924a166caab2885648805460ff8516908110612b1b57fe5b906000526020600020906002020160010160009054906101000a9004600160a060020a0316600160a060020a0316637915c9e08c8c8c8b6040518563ffffffff1660e060020a0281526004018085600160a060020a0316600160a060020a0316815260200184600160a060020a0316600160a060020a0316815260200183815260200182151515158152602001945050505050602060405180830381600087803b158015612bc857600080fd5b505af1158015612bdc573d6000803e3d6000fd5b505050506040513d6020811015612bf257600080fd5b505191506000826003811115612c0457fe5b1415612c0f57600195505b6002826003811115612c1d57fe5b1415612c2857600194505b6003826003811115612c3657fe5b1415612c4157600193505b600190920191612aab565b83612c645785612c5c5784612c5f565b60005b612c67565b60015b9750612c73565b600097505b505050505050509392505050565b60145460ff1681565b60ff821660009081526016602052604081205481908190811015612d7a575060005b60ff8516600090815260166020526040902054811015612d7a5760ff85166000908152601660205260409020805485919083908110612ce757fe5b60009182526020909120600290910201541415612d725760ff85166000908152601660205260409020805482908110612d1c57fe5b6000918252602080832060029092029091015460ff8816835260169091526040909120805483908110612d4b57fe5b6000918252602090912060016002909202010154909350600160a060020a03169150612d82565b600101612cac565b600092508291505b509250929050565b600754600160a060020a03163314612da157600080fd5b6014805460ff191660011790556040805142815290517f10216e36c4b6dff3d74179d50b938f0f96afc610f073894ca04b4239299165679181900360200190a1565b600181565b6000612df53384846138d3565b612e00338484612935565b1515612e44576040805160e560020a62461bcd0281526020600482015260156024820152600080516020614790833981519152604482015290519081900360640190fd5b612e4d336139fd565b612e56836139fd565b612e608383613de6565b1515612e6b57600080fd5b50600192915050565b600754600160a060020a03163314612e8b57600080fd5b60118054600160a060020a031916600160a060020a0392909216919091179055565b600d54600160a060020a031681565b600481565b600754600090600160a060020a03163314612edb57600080fd5b50815b612ef9612ef1848463ffffffff613b9b16565b600b54613eb5565b811015610f4257600b5481108015612f3a5750612f38600b82815481101515612f1e57fe5b600091825260209091200154600160a060020a03166124e6565b155b15612ffe57600060176000600b84815481101515612f5457fe5b600091825260208083209190910154600160a060020a031683528201929092526040019020805460ff1916911515919091179055600b80546000198101908110612f9a57fe5b600091825260209091200154600b8054600160a060020a039092169183908110612fc057fe5b60009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055600b805490612ffc906000198301614725565b505b600101612ede565b600e54600160a060020a031681565b6006805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610c1d5780601f10610bf257610100808354040283529160200191610c1d565b336000908152600260209081526040808320600160a060020a03861684529091528120546130a4908363ffffffff613b9b16565b336000818152600260209081526040808320600160a060020a0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b600a5481565b600160a060020a03918216600090815260026020908152604080832093909416825291909152205490565b600b5490565b600754600160a060020a0316331461315757600080fd5b61316081613ecb565b50565b600754600160a060020a0316331461317a57600080fd5b600c546040805160e060020a63bf40fac1028152602060048201819052600e60248301527f4d6f64756c65526567697374727900000000000000000000000000000000000060448301529151610100909304600160a060020a03169263bf40fac1926064808401939192918290030181600087803b1580156131fb57600080fd5b505af115801561320f573d6000803e3d6000fd5b505050506040513d602081101561322557600080fd5b5051600d8054600160a060020a031916600160a060020a03928316179055600c546040805160e060020a63bf40fac1028152602060048201819052601560248301527f5365637572697479546f6b656e52656769737472790000000000000000000000604483015291516101009093049093169263bf40fac192606480830193928290030181600087803b1580156132bc57600080fd5b505af11580156132d0573d6000803e3d6000fd5b505050506040513d60208110156132e657600080fd5b5051600e8054600160a060020a031916600160a060020a03928316178155600c546040805160e060020a63bf40fac102815260206004820181905260248201949094527f5469636b65725265676973747279000000000000000000000000000000000000604482015290516101009092049093169263bf40fac19260648083019391928290030181600087803b15801561337f57600080fd5b505af1158015613393573d6000803e3d6000fd5b505050506040513d60208110156133a957600080fd5b5051600f8054600160a060020a031916600160a060020a03928316179055600c546040805160e060020a63bf40fac1028152602060048201819052600960248301527f506f6c79546f6b656e0000000000000000000000000000000000000000000000604483015291516101009093049093169263bf40fac192606480830193928290030181600087803b15801561344057600080fd5b505af1158015613454573d6000803e3d6000fd5b505050506040513d602081101561346a57600080fd5b505160108054600160a060020a031916600160a060020a03909216919091179055565b600754600160a060020a031633146134a457600080fd5b600c5460ff16156134b457600080fd5b600c805460ff19166001179055604080516020601f86018190048102820181019092528481526134ff9187919087908790819084018382808284378201915050505050508484613f3c565b5050600c805460ff19169055505050565b600754600160a060020a0316331461352757600080fd5b601054600754604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561359957600080fd5b505af11580156135ad573d6000803e3d6000fd5b505050506040513d60208110156135c357600080fd5b50511515613160576040805160e560020a62461bcd02815260206004820152601560248201527f496e2d73756666696369656e742062616c616e63650000000000000000000000604482015290519081900360640190fd5b60126020528160005260406000208181548110151561363657fe5b600091825260209091206002909102018054600190910154909250905082565b60006004600182805b60ff80851660009081526016602052604090205490821610156136ce5781806136c4575060ff80851660009081526016602052604090208054339284169081106136a557fe5b6000918252602090912060016002909202010154600160a060020a0316145b915060010161365f565b8280156136d9575081155b156137fc5760ff8416600314156137955760ff84166000908152601660205260409020541580156137145750600754600160a060020a031633145b1515613790576040805160e560020a62461bcd02815260206004820152602d60248201527f53656e646572206973206e6f74206f776e6572206f722053544f206d6f64756c60448201527f6520697320617474616368656400000000000000000000000000000000000000606482015290519081900360840190fd5b6137f7565b600754600160a060020a031633146137f7576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b613879565b811515613879576040805160e560020a62461bcd02815260206004820152602160248201527f53656e646572206973206e6f7420636f7272656374206d6f64756c652074797060448201527f6500000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6009546000191161388957600080fd5b60098054600101908190556040805142815290517feb3befa36ea6638fc3379fe62edc59509b81aeca57cfbb0f444b1e72b8ac93fe9181900360200190a260095494505050505090565b8015806138f1575081600160a060020a031683600160a060020a0316145b156138fb57610f42565b613904826124e6565b1580156139195750600160a060020a03821615155b1561393657600a5461393290600163ffffffff613b9b16565b600a555b61393f836124e6565b81141561395e57600a5461395a90600163ffffffff613ba816565b600a555b600160a060020a03821660009081526017602052604090205460ff1615801561398f5750600160a060020a03821615155b15610f4257600b805460018181019092557f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9018054600160a060020a038516600160a060020a031990911681179091556000908152601760205260409020805460ff19169091179055505050565b600160a060020a038116600090815260126020526040902061316090613a22836124e6565b6145b7565b6000600160a060020a0383161515613a3e57600080fd5b600160a060020a038416600090815260208190526040902054821115613a6357600080fd5b600160a060020a0384166000908152600260209081526040808320338452909152902054821115613a9357600080fd5b600160a060020a038416600090815260208190526040902054613abc908363ffffffff613ba816565b600160a060020a038086166000908152602081905260408082209390935590851681522054613af1908363ffffffff613b9b16565b600160a060020a03808516600090815260208181526040808320949094559187168152600282528281203382529091522054613b33908363ffffffff613ba816565b600160a060020a03808616600081815260026020908152604080832033845282529182902094909455805186815290519287169391926000805160206147b0833981519152929181900390910190a35060019392505050565b613b996013613a22610ca0565b565b8181018281101561292f57fe5b600082821115613bb457fe5b50900390565b6000806000806009548611151515613bd157600080fd5b851515613be15760009350613d5b565b86541515613bf157849350613d5b565b85876000815481101515613c0157fe5b600091825260209091206002909102015410613c3f57866000815481101515613c2657fe5b9060005260206000209060020201600101549350613d5b565b8654869088906000198101908110613c5357fe5b9060005260206000209060020201600001541015613c7357849350613d5b565b8654869088906000198101908110613c8757fe5b9060005260206000209060020201600001541415613cb157865487906000198101908110613c2657fe5b8654600093506000190191505b82821115613d38576002828401049050858782815481101515613cdd57fe5b9060005260206000209060020201600001541415613cfd57809150613d38565b858782815481101515613d0c57fe5b9060005260206000209060020201600001541015613d2f57806001019250613d33565b8091505b613cbe565b8682815481101515613d4657fe5b90600052602060002090600202016001015493505b5050509392505050565b60008060006004845110613d7a576004613d7d565b83515b9150600090505b81811015613ddf5780600183030360080260020a8482815181101515613da657fe5b90602001015160f860020a900460f860020a0260f860020a9004028360e060020a90040160e060020a0292508080600101915050613d84565b5050919050565b6000600160a060020a0383161515613dfd57600080fd5b33600090815260208190526040902054821115613e1957600080fd5b33600090815260208190526040902054613e39908363ffffffff613ba816565b3360009081526020819052604080822092909255600160a060020a03851681522054613e6b908363ffffffff613b9b16565b600160a060020a038416600081815260208181526040918290209390935580518581529051919233926000805160206147b08339815191529281900390910190a350600192915050565b6000818310613ec45781611ec8565b5090919050565b600160a060020a0381161515613ee057600080fd5b600754604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360078054600160a060020a031916600160a060020a0392909216919091179055565b600d54604080517fdc659907000000000000000000000000000000000000000000000000000000008152600160a060020a03878116600483015291516000938493849384938493929092169163dc65990791602480820192869290919082900301818387803b158015613fae57600080fd5b505af1158015613fc2573d6000803e3d6000fd5b5050505088945084600160a060020a03166315dae03e6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561400757600080fd5b505af115801561401b573d6000803e3d6000fd5b505050506040513d602081101561403157600080fd5b505160ff81166000908152601660205260409020549094506014116140a0576040805160e560020a62461bcd02815260206004820152601f60248201527f4c696d6974206f66204d4158204d4f44554c4553206973207265616368656400604482015290519081900360640190fd5b84600160a060020a0316637e363ffa6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156140de57600080fd5b505af11580156140f2573d6000803e3d6000fd5b505050506040513d602081101561410857600080fd5b505192508683111561418a576040805160e560020a62461bcd02815260206004820152602e60248201527f4d617820436f737420697320616c77617973206265206772656174657220746860448201527f616e206d6f64756c6520636f7374000000000000000000000000000000000000606482015290519081900360840190fd5b601054604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a038c81166004830152602482018790529151919092169163095ea7b39160448083019260209291908290030181600087803b1580156141f957600080fd5b505af115801561420d573d6000803e3d6000fd5b505050506040513d602081101561422357600080fd5b505115156142a1576040805160e560020a62461bcd02815260206004820152602360248201527f4e6f742061626c6520746f20617070726f766520746865206d6f64756c65206360448201527f6f73740000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6040517e7743600000000000000000000000000000000000000000000000000000000081526020600482018181528a5160248401528a51600160a060020a0389169362774360938d939283926044019185019080838360005b838110156143125781810151838201526020016142fa565b50505050905090810190601f16801561433f5780820380516001836020036101000a031916815260200191505b5092505050602060405180830381600087803b15801561435e57600080fd5b505af1158015614372573d6000803e3d6000fd5b505050506040513d602081101561438857600080fd5b5051601054604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152600160a060020a038085166004830152602482018b9052915193955091169163095ea7b3916044808201926020929091908290030181600087803b1580156143fb57600080fd5b505af115801561440f573d6000803e3d6000fd5b505050506040513d602081101561442557600080fd5b5051151561447d576040805160e560020a62461bcd02815260206004820152601e60248201527f4e6f742061626c6520746f20617070726f766520746865206275646765740000604482015290519081900360640190fd5b84600160a060020a03166317d7de7c6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156144bb57600080fd5b505af11580156144cf573d6000803e3d6000fd5b505050506040513d60208110156144e557600080fd5b505160ff8516600081815260166020908152604080832081518083018352868152600160a060020a0389811682860181815284546001808201875595895297879020935160029098029093019687559151959092018054600160a060020a031916958316959095179094558151868152908f16928101929092528181019290925260608101879052608081018a90524260a0820152905192935090917fc6c63fb8912a7f464252e66132ad69604864e7520f1bcf0dd77c8d51d810a6519160c0908290030190a2505050505050505050565b60095415156145c5576126e5565b8154151561460c57604080518082019091526009548152602080820183815284546001818101875560008781529390932093516002909102909301928355519101556126e5565b60095482548390600019810190811061462157fe5b906000526020600020906002020160000154141561463e576126e5565b6040805180820190915260095481526020808201928352835460018082018655600095865291909420915160029094029091019283559051910155565b815481835581811115610f4257600202816002028360005260206000209182019101610f429190614749565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106146e857805160ff1916838001178555614715565b82800160010185558215614715579182015b828111156147155782518255916020019190600101906146fa565b50614721929150614775565b5090565b815481835581811115610f4257600083815260209020610f42918101908301614775565b610ca491905b808211156147215760008155600181018054600160a060020a031916905560020161474f565b610ca491905b80821115614721576000815560010161477b56005472616e73666572206973206e6f742076616c69640000000000000000000000ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820603a316cc286fd62602ad8dbe767c2562b25743a005ad5627152316e1dc57a080029",
  "sourceMap": "928:26908:59:-;;;321:35:61;;;-1:-1:-1;;321:35:61;;;1223:26:59;;;-1:-1:-1;;;;;;1223:26:59;;;;1618:41;;-1:-1:-1;;1665:38:59;;;5344:770;5:2:-1;;;;30:1;27;20:12;5:2;5344:770:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;463:12:66;;5344:770:59;;;;;;;;;;;;;;;;;;;;;;;463:12:66;;:4;;:12;;;;;:::i;:::-;-1:-1:-1;481:16:66;;;;:6;;:16;;;;;:::i;:::-;-1:-1:-1;503:8:66;:20;;;;;;-1:-1:-1;;503:20:66;;;;;;;;;-1:-1:-1;;567:5:64;:18;;-1:-1:-1;;;;;;567:18:64;575:10;567:18;;;-1:-1:-1;;;;;412:31:5;;;;404:40;;;;;;454:16;:36;;-1:-1:-1;;;;;454:36:5;;;;;-1:-1:-1;;;;;;454:36:5;;;;;;;;;5689:20:59;:18;;;;:20;:::i;:::-;5719:28;;;;:12;;:28;;;;;:::i;:::-;-1:-1:-1;;;5757:11:59;:26;-1:-1:-1;;5818:38:59;;;;;;;;;;;;;;;;5793:65;;;;;;;;:17;:65;;;;;;;:72;;-1:-1:-1;;5793:72:59;;;5861:4;5793:72;;;;;;5900:50;;;;;;;;;;;;;;;;;;5875:77;;;;;;;;;;:84;;;;;;;;5994:34;;;;;;;;;;;;;5969:61;;;;;;;;;;:68;;;;;;;;6072:26;;;;;;;;;;;;;;6047:53;;;;;;;;;;:60;;;;;;;;;;-1:-1:-1;928:26908:59;;503:418:5;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;594:16:5;;577:63;;;;;;;;;;;;;;;;;;;;;;;;;594:16;;;;-1:-1:-1;;;;;594:16:5;;577:45;;:63;;;;;;;;;;;;;-1:-1:-1;594:16:5;577:63;;;5:2:-1;;;;30:1;27;20:12;5:2;577:63:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;577:63:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;577:63:5;560:14;:80;;-1:-1:-1;;;;;;560:80:5;-1:-1:-1;;;;;560:80:5;;;;;;691:16;;674:70;;;;;;577:63;674:70;;;;;;;;;;;;;;;;;;560:80;691:16;;;;;;;674:45;;:70;;;;;577:63;674:70;;;;;-1:-1:-1;691:16:5;674:70;;;5:2:-1;;;;30:1;27;20:12;5:2;674:70:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;674:70:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;674:70:5;650:21;:94;;-1:-1:-1;;;;;;650:94:5;-1:-1:-1;;;;;650:94:5;;;;;;788:16;;771:63;;;;;;674:70;771:63;;;;;;;;;;;;;;;;;;;;650:94;788:16;;;;;;;771:45;;:63;;;;;674:70;;771:63;;;;;-1:-1:-1;788:16:5;771:63;;;5:2:-1;;;;30:1;27;20:12;5:2;771:63:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;771:63:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;771:63:5;754:14;:80;;-1:-1:-1;;;;;;754:80:5;-1:-1:-1;;;;;754:80:5;;;;;;873:16;;856:58;;;;;;771:63;856:58;;;;;;;;;;;;;;;;;;754:80;873:16;;;;;;;856:45;;:58;;;;;771:63;856:58;;;;;-1:-1:-1;873:16:5;856:58;;;5:2:-1;;;;30:1;27;20:12;5:2;856:58:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;856:58:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;856:58:5;844:9;:70;;-1:-1:-1;;;;;;844:70:5;-1:-1:-1;;;;;844:70:5;;;;;;;;;503:418::o;928:26908:59:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;928:26908:59;;;-1:-1:-1;928:26908:59;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;",
  "deployedSourceMap": "928:26908:59:-;;;;;;;;;-1:-1:-1;;;928:26908:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15391:146;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15391:146:59;;;;;;319:18:66;;8:9:-1;5:2;;;30:1;27;20:12;5:2;319:18:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;319:18:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1829:188:69;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1829:188:69;-1:-1:-1;;;;;1829:188:69;;;;;;;;;;;;;;;;;;;;;;;;;1902:47:59;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1902:47:59;-1:-1:-1;;;;;1902:47:59;;;;;371:83:65;;8:9:-1;5:2;;;30:1;27;20:12;5:2;371:83:65;;;;;;;;;;;;;;;;;;;;8909:729:59;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8909:729:59;;;;;;;;;;;;20378:126;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20378:126:59;;;;13116:236;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;13116:236:59;;;;;1665:38;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1665:38:59;;;;18189:388;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18189:388:59;-1:-1:-1;;;;;18189:388:59;;;;;;;;;;;;1145:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1145:31:59;;;;;;;;-1:-1:-1;;;;;1145:31:59;;;;;;;;;;;;;;281:29:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;281:29:5;;;;365:21:66;;8:9:-1;5:2;;;30:1;27;20:12;5:2;365:21:66;;;;;;;;;;;;;;;;;;;;;;;15602:148:59;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15602:148:59;;;;1042:54;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1042:54:59;;;;622:26:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;622:26:19;;;;;20865:704:59;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;20865:704:59;-1:-1:-1;;;;;20865:704:59;;;;;;;23749:993;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23749:993:59;;;;;9907:373;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9907:373:59;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9907:373:59;;;;;;;;;;;;;;;;;22025:355;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22025:355:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;22025:355:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22025:355:59;;;;-1:-1:-1;22025:355:59;-1:-1:-1;22025:355:59;;-1:-1:-1;22025:355:59;;;;;;;;;-1:-1:-1;22025:355:59;;-1:-1:-1;22025:355:59;;-1:-1:-1;;;;;;;22025:355:59;27639:194;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;27639:194:59;-1:-1:-1;;;;;27639:194:59;;;;;;;471:34:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;471:34:19;;;;403:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;403:26:19;;;;1857:38:59;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1857:38:59;;;;11751:936;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11751:936:59;;;;;;;;;;;;;;1223:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1223:26:59;;;;318:33:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;318:33:19;;;;3701:425:69;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3701:425:69;-1:-1:-1;;;;;3701:425:69;;;;;;;316:24:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;316:24:5;;;;1131:99:65;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1131:99:65;-1:-1:-1;;;;;1131:99:65;;;;;827:111:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;827:111:64;;;;1804:46:59;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1804:46:59;;;;;;;;;12797:186;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12797:186:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12797:186:59;;-1:-1:-1;12797:186:59;;-1:-1:-1;;;;;;;12797:186:59;167:31:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;167:31:5;;;;1570:41:59;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1570:41:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;22864:463;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;22864:463:59;-1:-1:-1;;;;;22864:463:59;;;;;;;;;;;;238:20:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;238:20:64;;;;267:45:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;267:45:19;;;;341:20:66;;8:9:-1;5:2;;;30:1;27;20:12;5:2;341:20:66;;;;25725:162:59;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;25725:162:59;;;;;18861:1214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;18861:1214:59;-1:-1:-1;;;;;18861:1214:59;;;;;;;;;;;;1618:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1618:41:59;;;;10567:578;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10567:578:59;;;;;;;;;20160:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20160:135:59;;;;214:47:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;214:47:19;;;;17586:373:59;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;17586:373:59;-1:-1:-1;;;;;17586:373:59;;;;;;;23497:120;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;23497:120:59;-1:-1:-1;;;;;23497:120:59;;;;;204:29:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;204:29:5;;;;357:40:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;357:40:19;;;;14603:429:59;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;14603:429:59;;;;;;;239:36:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;239:36:5;;;;303:26:17;;8:9:-1;5:2;;;30:1;27;20:12;5:2;303:26:17;;;;2946:293:69;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2946:293:69;-1:-1:-1;;;;;2946:293:69;;;;;;;558:28:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;558:28:19;;;;2336:153:69;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2336:153:69;-1:-1:-1;;;;;2336:153:69;;;;;;;;;;15230:99:59;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15230:99:59;;;;1100:103:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1100:103:64;-1:-1:-1;;;;;1100:103:64;;;;;503:418:5;;8:9:-1;5:2;;;30:1;27;20:12;5:2;503:418:5;;;;6491:230:59;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6491:230:59;;;;-1:-1:-1;;;;;6491:230:59;;;;;;;;;;;;;;;;;11404:148;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11404:148:59;;;;;1505:59;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1505:59:59;-1:-1:-1;;;;;1505:59:59;;;;;;;25272:295;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25272:295:59;;;;15391:146;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;15454:6:59;;-1:-1:-1;15454:6:59;;;;15453:7;15445:16;;;;;;15471:6;:13;;-1:-1:-1;;15471:13:59;-1:-1:-1;;;15471:13:59;;;;;;;15499:31;;;15518:6;;;;15471:13;15518:6;15499:31;;;;15526:3;15499:31;;;;;;;;;;;;;;;;;15391:146::o;319:18:66:-;;;;;;;;;;;;;;;-1:-1:-1;;319:18:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1829:188:69:-;1916:10;1896:4;1908:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;1908:29:69;;;;;;;;;;;:38;;;1957;;;;;;;1896:4;;1908:29;;1916:10;;1957:38;;;;;;;;-1:-1:-1;2008:4:69;1829:188;;;;:::o;1902:47:59:-;;;;;;;;;;;;;;;:::o;371:83:65:-;437:12;;371:83;;:::o;8909:729:59:-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;9022:20:59;;;;;;;;:7;:20;;;;;:27;9007:42;;;;8999:120;;;;;-1:-1:-1;;;;;8999:120:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9137:20;;;;9197:1;9137:20;;;:7;:20;;;;;:34;;9197:1;;9137:20;;:34;;;;;;;;;;;;;;;;;;:48;:34;;;;;:48;;-1:-1:-1;;;;;9137:48:59;:62;;9129:123;;;;;-1:-1:-1;;;;;9129:123:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9376:84;;;;9406:20;;;;:7;:20;;;;;:34;;9376:84;;;;9406:34;;;;;;;;;;;;;;;;;;;:48;:34;;;;;;:48;;9376:84;;;-1:-1:-1;;;;;9406:48:59;;;9376:84;;9456:3;9376:84;;;;;;;;;;;;;;;;;;9507:20;;;;;;;:7;:20;;;;;9528:27;;-1:-1:-1;;9528:31:59;;;9507:53;;;;;;;;;;;;;;;;9470:7;:20;9478:11;9470:20;;;;;;;;;;;;;;;9491:12;9470:34;;;;;;;;;;;;;;;;;;;;:90;;:34;;;;;;:90;;;;;;;;;;;;;;-1:-1:-1;;;;;;9470:90:59;-1:-1:-1;;;;;9470:90:59;;;;;;;;;;9600:20;;;;;:7;:20;;;;;;:27;;-1:-1:-1;;9600:31:59;;9570:61;;9600:31;9570:61;:::i;:::-;;8909:729;;:::o;20378:126::-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;20433:18:59;:25;;-1:-1:-1;;20433:25:59;;;;;20473:24;;;20493:3;20473:24;;;;;;;;;;;;;20378:126::o;13116:236::-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;13200:17:59;;;13192:54;;;;;-1:-1:-1;;;;;13192:54:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;13283:11;;13261:48;;;;;;;;;;;;;;;;;;;;;;;;13319:11;:26;13116:236::o;1665:38::-;;;;;;;;;:::o;18189:388::-;18271:12;18295:39;18315:5;18322:3;18327:6;18295:19;:39::i;:::-;18352:34;18367:5;18374:3;18379:6;18352:14;:34::i;:::-;18344:68;;;;;;;-1:-1:-1;;;;;18344:68:59;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;18344:68:59;;;;;;;;;;;;;;;18422:31;18447:5;18422:24;:31::i;:::-;18463:29;18488:3;18463:24;:29::i;:::-;18510:38;18529:5;18536:3;18541:6;18510:18;:38::i;:::-;18502:47;;;;;;;;-1:-1:-1;18566:4:59;18189:388;;;;;:::o;1145:31::-;;;-1:-1:-1;;;;;1145:31:59;;:::o;281:29:5:-;;;-1:-1:-1;;;;;281:29:5;;:::o;365:21:66:-;;;;;;:::o;15602:148:59:-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;15666:6:59;;-1:-1:-1;15666:6:59;;;;15658:15;;;;;;;;15683:6;:14;;-1:-1:-1;;15683:14:59;;;;;15712:31;;;-1:-1:-1;;;15731:6:59;;;15683:14;15731:6;15712:31;;;;15739:3;15712:31;;;;;;;;;;;;;;;;15602:148::o;1042:54::-;;;:::o;622:26:19:-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;622:26:19;;-1:-1:-1;622:26:19;:::o;20865:704:59:-;21002:12;350:1:19;20942:4:59;21002:12;;3717:165;3739:20;;;;;;;;:7;:20;;;;;:27;3735:31;;;;3717:165;;;3802:12;:69;;;-1:-1:-1;3819:20:59;;;;;;;;:7;:20;;;;;:23;;3860:10;;3819:23;;;;;;;;;;;;;;;;;:37;:23;;;;;:37;;-1:-1:-1;;;;;3819:37:59;:51;3802:69;3787:84;-1:-1:-1;3768:3:59;;3717:165;;;3895:9;:26;;;;;3909:12;3908:13;3895:26;3891:389;;;3941:22;;;350:1:19;3941:22:59;3937:243;;;3989:20;;;;;;;:7;:20;;;;;:27;:32;:55;;;;-1:-1:-1;4039:5:59;;-1:-1:-1;;;;;4039:5:59;4025:10;:19;3989:55;3981:113;;;;;;;-1:-1:-1;;;;;3981:113:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3937:243;;;4151:5;;-1:-1:-1;;;;;4151:5:59;4137:10;:19;4129:51;;;;;-1:-1:-1;;;;;4129:51:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;3891:389;;;4219:12;4211:58;;;;;;;-1:-1:-1;;;;;4211:58:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20965:7;4374:11;;4364:7;:21;;;;;;;;:26;4356:90;;;;;-1:-1:-1;;;;;4356:90:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4731:5;;-1:-1:-1;;;;;4731:5:59;4717:10;:19;4713:206;;;4761:21;;;;4760:22;4752:65;;;;;-1:-1:-1;;;;;4752:65:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;4713:206;;;4857:18;;;;;;;4856:19;4848:60;;;;;-1:-1:-1;;;;;4848:60:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21034:23:59;;;;21026:69;;;;;-1:-1:-1;;;;;21026:69:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21105:51;21133:1;21137:9;21148:7;21105:19;:51::i;:::-;21174:46;21197:1;21201:9;21212:7;21174:14;:46::i;:::-;21166:80;;;;;;;-1:-1:-1;;;;;21166:80:59;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;21166:80:59;;;;;;;;;;;;;;;21256:35;21281:9;21256:24;:35::i;:::-;21301:30;:28;:30::i;:::-;21356:12;;:25;;21373:7;21356:25;:16;:25;:::i;:::-;21341:12;:40;-1:-1:-1;;;;;21413:19:59;;:8;:19;;;;;;;;;;;:32;;21437:7;21413:23;:32::i;:::-;-1:-1:-1;;;;;21391:19:59;;:8;:19;;;;;;;;;;;;:54;;;;21460:26;;;;;;;21391:19;;21460:26;;;;;;;;;21501:40;;;;;;;;21518:1;-1:-1:-1;;;;;;;21501:40:59;;;21518:1;;21501:40;21518:1;;-1:-1:-1;;21518:1:59;-1:-1:-1;;;;;21501:40:59;;;;;;;;-1:-1:-1;21558:4:59;;20865:704;-1:-1:-1;;;;;;;20865:704:59:o;23749:993::-;23796:6;4374:11;;4364:7;:21;;;;;;;;:26;4356:90;;;;;-1:-1:-1;;;;;4356:90:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23821:51;23841:10;23861:1;23865:6;23821:19;:51::i;:::-;23890:11;;-1:-1:-1;;;;;23890:11:59;:25;;23882:82;;;;;-1:-1:-1;;;;;23882:82:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23982:46;23997:10;24017:1;24021:6;23982:14;:46::i;:::-;23974:80;;;;;;;-1:-1:-1;;;;;23974:80:59;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;23974:80:59;;;;;;;;;;;;;;;24091:10;24082:8;:20;;;;;;;;;;;24072:30;;;24064:100;;;;;-1:-1:-1;;;;;24064:100:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24174:36;24199:10;24174:24;:36::i;:::-;24220:30;:28;:30::i;:::-;24472:10;24463:8;:20;;;;;;;;;;;:32;;24488:6;24463:32;:24;:32;:::i;:::-;24449:10;24440:8;:20;;;;;;;;;;;:55;;;;24513:11;;:36;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24513:11:59;;;;:16;;:36;;;;;;;;;;;;;:11;:36;;;5:2:-1;;;;30:1;27;20:12;5:2;24513:36:59;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24513:36:59;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24513:36:59;24505:86;;;;;;;-1:-1:-1;;;;;24505:86:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24616:12;;:24;;24633:6;24616:24;:16;:24;:::i;:::-;24601:12;:39;24655:25;;;;;;;;24661:10;;24655:25;;;;;;;;;;24695:40;;;;;;;;24724:1;;24704:10;;-1:-1:-1;;;;;;;;;;;24695:40:59;;;;;;;;23749:993;;:::o;9907:373::-;10017:20;;;9985:7;10017:20;;;:7;:20;;;;;:27;9985:7;;10017:31;-1:-1:-1;10013:260:59;;;10089:20;;;;;;;:7;:20;;;;;:34;;10110:12;;10089:34;;;;;;;;;;;;;;;;;;;;;:39;10146:20;;;;;:7;:20;;;;;;;:34;;10167:12;;10146:34;;;;;;;;;;;;;;:48;:34;;;;;:48;;10064:144;;-1:-1:-1;;;;;;10146:48:59;;-1:-1:-1;10064:144:59;;10013:260;-1:-1:-1;10259:1:59;;-1:-1:-1;10259:1:59;10013:260;9907:373;;;;;:::o;22025:355::-;22128:12;;350:1:19;22113:4:59;22128:12;;3717:165;3739:20;;;;;;;;:7;:20;;;;;:27;3735:31;;;;3717:165;;;3802:12;:69;;;-1:-1:-1;3819:20:59;;;;;;;;:7;:20;;;;;:23;;3860:10;;3819:23;;;;;;;;;;;;;;;;;:37;:23;;;;;:37;;-1:-1:-1;;;;;3819:37:59;:51;3802:69;3787:84;-1:-1:-1;3768:3:59;;3717:165;;;3895:9;:26;;;;;3909:12;3908:13;3895:26;3891:389;;;3941:22;;;350:1:19;3941:22:59;3937:243;;;3989:20;;;;;;;:7;:20;;;;;:27;:32;:55;;;;-1:-1:-1;4039:5:59;;-1:-1:-1;;;;;4039:5:59;4025:10;:19;3989:55;3981:113;;;;;;;-1:-1:-1;;;;;3981:113:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3937:243;;;4151:5;;-1:-1:-1;;;;;4151:5:59;4137:10;:19;4129:51;;;;;-1:-1:-1;;;;;4129:51:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;3891:389;;;4219:12;4211:58;;;;;;;-1:-1:-1;;;;;4211:58:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22181:15;;22160:17;;:36;22152:86;;;;;-1:-1:-1;;;;;22152:86:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22265:1;22253:13;;22248:105;22272:10;:17;22268:1;:21;22248:105;;;22310:32;22315:10;22326:1;22315:13;;;;;;;;;;;;;;;;;;22330:8;22339:1;22330:11;;;;;;;;;;;;;;;;;;22310:4;:32::i;:::-;-1:-1:-1;22291:3:59;;;;;22248:105;;;-1:-1:-1;22369:4:59;;22025:355;-1:-1:-1;;;;;;;22025:355:59:o;27639:194::-;-1:-1:-1;;;;;27759:29:59;;27722:7;27759:29;;;:18;:29;;;;;27748:78;;27790:13;27805:20;27759:29;27805:9;:20::i;:::-;27748:10;:78::i;:::-;27741:85;27639:194;-1:-1:-1;;;27639:194:59:o;471:34:19:-;;;;:::o;403:26::-;;;;:::o;1857:38:59:-;1893:2;1857:38;:::o;11751:936::-;719:5:64;;12015:25:59;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;11870:16:59;;;;;11862:55;;;;;-1:-1:-1;;;;;11862:55:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;11950:20;;;;;;;;:7;:20;;;;;:27;11935:42;;;;11927:78;;;;;-1:-1:-1;;;;;11927:78:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;12050:9;;12086:20;;;;12050:9;12086:20;;;:7;:20;;;;;:34;;-1:-1:-1;;;;;12050:9:59;;;;12043:27;;12079:4;;12086:20;:34;;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;12043:92;;;;;;-1:-1:-1;;;12043:92:59;;;-1:-1:-1;;;;;12043:92:59;;;;;;;12086:48;;;;12043:92;;;;;;;;;;12086:34;;12043:92;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;12043:92:59;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12043:92:59;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12043:92:59;;-1:-1:-1;12149:27:59;;;12145:427;;;12207:9;;12235:20;;;;12207:9;12235:20;;;:7;:20;;;;;:34;;-1:-1:-1;;;;;12207:9:59;;;;12200:34;;12235;;;;;;;;;;;;;;;;;:48;:34;;;;;:48;;-1:-1:-1;;;;;12235:48:59;12285:30;:17;12307:7;12285:21;:30::i;:::-;12200:116;;;;;;-1:-1:-1;;;12200:116:59;;;-1:-1:-1;;;;;12200:116:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12200:116:59;;;;5:2:-1;;;;30:1;27;20:12;5:2;12200:116:59;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12200:116:59;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12200:116:59;12192:169;;;;;;;-1:-1:-1;;;;;12192:169:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12145:427;;;12407:9;;12435:20;;;;12407:9;12435:20;;;:7;:20;;;;;:34;;-1:-1:-1;;;;;12407:9:59;;;;12400:34;;12435;;;;;;;;;;;;;;;;;:48;:34;;;;;:48;;-1:-1:-1;;;;;12435:48:59;12485:30;:7;12497:17;12485:11;:30::i;:::-;12400:116;;;;;;-1:-1:-1;;;12400:116:59;;;-1:-1:-1;;;;;12400:116:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12400:116:59;;;;5:2:-1;;;;30:1;27;20:12;5:2;12400:116:59;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12400:116:59;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12400:116:59;12392:169;;;;;;;-1:-1:-1;;;;;12392:169:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12586:94;;;;12622:20;;;;:7;:20;;;;;:34;;12586:94;;;;12622:34;;;;;;;;;;;;;;;;;;;:48;:34;;;;;;:48;;12586:94;;;-1:-1:-1;;;;;12622:48:59;;;12586:94;;;;;;;;;;;;;;;;;;;11751:936;;;;:::o;1223:26::-;;;-1:-1:-1;1223:26:59;;;;;:::o;318:33:19:-;350:1;318:33;:::o;3701:425:69:-;3842:10;3804:4;3834:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;3834:29:69;;;;;;;;;;3873:27;;;3869:164;;;3918:10;3942:1;3910:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;3910:29:69;;;;;;;;;:33;3869:164;;;3996:30;:8;4009:16;3996:30;:12;:30;:::i;:::-;3972:10;3964:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;3964:29:69;;;;;;;;;:62;3869:164;4052:10;4074:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;4043:61:69;;4074:29;;;;;;;;;;;4043:61;;;;;;;;;4052:10;4043:61;;;;;;;;;;;-1:-1:-1;4117:4:69;;3701:425;-1:-1:-1;;;3701:425:69:o;316:24:5:-;;;-1:-1:-1;;;;;316:24:5;;:::o;1131:99:65:-;-1:-1:-1;;;;;1209:16:65;1187:7;1209:16;;;;;;;;;;;;1131:99::o;827:111:64:-;719:5;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;903:5;;884:25;;-1:-1:-1;;;;;903:5:64;;;;884:25;;903:5;;884:25;915:5;:18;;-1:-1:-1;;;;;;915:18:64;;;827:111::o;1804:46:59:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1804:46:59;;-1:-1:-1;1804:46:59;:::o;12797:186::-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;12882:53:59;;;;;;12904:12;12882:53;;;-1:-1:-1;;12882:53:59;;;;;;;;;;;;;;;;;;;12904:12;;12918:16;;12882:53;;;;;;;;;;12904:12;;12882:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12882:53:59;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;12882:53:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12945:31;;;;:12;;:31;;;;;:::i;:::-;;12797:186;:::o;167:31:5:-;;;;;;-1:-1:-1;;;;;167:31:5;;:::o;1570:41:59:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1570:41:59;:::o;22864:463::-;260:1:19;22960:4:59;22980:30;;;:7;:30;;;:37;22960:4;;22980:42;22976:85;;;23045:5;23038:12;;;;22976:85;-1:-1:-1;23086:1:59;23071:250;260:1:19;23093:30:59;;:7;:30;;;:37;:30;23089:41;;;23071:250;;;260:1:19;23174:30:59;;:7;:30;;;:33;;:30;:33;;;;;;;;;;;;;;;;;;;;;;;;;:47;;;23155:110;;;;;;-1:-1:-1;;;;;23155:110:59;;;;;;;;;;;;;;;;;;;;;;23174:47;;;;;23155:83;;:110;;;;;23174:33;;23155:110;;;;;;;;;23174:47;23155:110;;;5:2:-1;;;;30:1;27;20:12;5:2;23155:110:59;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23155:110:59;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23155:110:59;23151:160;;;23292:4;23285:11;;;;23151:160;23132:3;;23071:250;;;22864:463;;;;;;:::o;238:20:64:-;;;-1:-1:-1;;;;;238:20:64;;:::o;267:45:19:-;311:1;267:45;:::o;341:20:66:-;;;;;;;;;;;;;;;-1:-1:-1;;341:20:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25725:162:59;25791:7;25817:63;25828:21;25851:13;25866;:11;:13::i;25817:63::-;25810:70;25725:162;-1:-1:-1;;25725:162:59:o;18861:1214::-;18972:4;19015:15;19257:14;19293:12;19327:17;19371:7;19448:29;18954:7;4374:11;;4364:7;:21;;;;;;;;:26;4356:90;;;;;-1:-1:-1;;;;;4356:90:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18993:6;;-1:-1:-1;18993:6:59;;;;18992:7;18988:1061;;;19033:5;19015:23;;19056:17;:35;19074:16;19081:8;;19074:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19074:6:59;;-1:-1:-1;;;;;19074:16:59:i;:::-;19056:35;;;;;;;;;;;;;-1:-1:-1;19056:35:59;;;;19052:89;;;19122:4;19109:17;;19052:89;311:1:19;19158:28:59;;:7;:28;;;:35;:40;19154:90;;;19225:4;19218:11;;;;19154:90;19274:5;19257:22;;19308:5;19293:20;;19347:5;19327:25;;19381:1;19371:11;;19366:603;311:1:19;19388:28:59;;:7;:28;;;:35;:28;19384:39;;;19366:603;;;311:1:19;19497:28:59;;:7;:28;;;:31;;:28;:31;;;;;;;;;;;;;;;;;;;:45;;;;;;;;;;-1:-1:-1;;;;;19497:45:59;-1:-1:-1;;;;;19480:78:59;;19559:5;19566:3;19571:7;19580:10;19480:111;;;;;-1:-1:-1;;;19480:111:59;;;;;;;-1:-1:-1;;;;;19480:111:59;-1:-1:-1;;;;;19480:111:59;;;;;;-1:-1:-1;;;;;19480:111:59;-1:-1:-1;;;;;19480:111:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19480:111:59;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19480:111:59;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19480:111:59;;-1:-1:-1;19622:31:59;19613:5;:40;;;;;;;;;19609:103;;;19689:4;19677:16;;19609:103;19742:29;19733:5;:38;;;;;;;;;19729:99;;;19805:4;19795:14;;19729:99;19858:35;19849:5;:44;;;;;;;;;19845:110;;;19932:4;19917:19;;19845:110;19425:3;;;;;19366:603;;;19989:12;:51;;20012:9;:27;;20032:7;20012:27;;;20024:5;20012:27;19989:51;;;20004:4;19989:51;19982:58;;;;18988:1061;20063:5;20056:12;;4456:1;18861:1214;;;;;;;;;;;;:::o;1618:41::-;;;;;;:::o;10567:578::-;10679:20;;;10647:7;10679:20;;;:7;:20;;;;;:27;10647:7;;;;10679:31;-1:-1:-1;10675:464:59;;;-1:-1:-1;10743:1:59;10726:312;10750:20;;;;;;;:7;:20;;;;;:27;10746:31;;10726:312;;;10806:20;;;:37;:20;;;:7;:20;;;;;:23;;10838:5;;10806:20;10827:1;;10806:23;;;;;;;;;;;;;;;;;;;:28;:37;10802:222;;;10896:20;;;;;;;:7;:20;;;;;:23;;10917:1;;10896:23;;;;;;;;;;;;;;;;;;;;;:28;10948:20;;;;;:7;:20;;;;;;;:23;;10969:1;;10948:23;;;;;;;;;;;;;;:37;:23;;;;;:37;;10865:140;;-1:-1:-1;;;;;;10948:37:59;;-1:-1:-1;10865:140:59;;10802:222;10779:3;;10726:312;;;11071:1;;-1:-1:-1;11071:1:59;;-1:-1:-1;10675:464:59;10567:578;;;;;;:::o;20160:135::-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;20218:21:59;:28;;-1:-1:-1;;20218:28:59;20242:4;20218:28;;;20261:27;;;20284:3;20261:27;;;;;;;;;;;;;20160:135::o;214:47:19:-;260:1;214:47;:::o;17586:373:59:-;17649:12;17673:44;17693:10;17705:3;17710:6;17673:19;:44::i;:::-;17735:39;17750:10;17762:3;17767:6;17735:14;:39::i;:::-;17727:73;;;;;;;-1:-1:-1;;;;;17727:73:59;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;17727:73:59;;;;;;;;;;;;;;;17810:36;17835:10;17810:24;:36::i;:::-;17856:29;17881:3;17856:24;:29::i;:::-;17903:27;17918:3;17923:6;17903:14;:27::i;:::-;17895:36;;;;;;;;-1:-1:-1;17948:4:59;17586:373;;;;:::o;23497:120::-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;23570:11:59;:40;;-1:-1:-1;;;;;;23570:40:59;-1:-1:-1;;;;;23570:40:59;;;;;;;;;;23497:120::o;204:29:5:-;;;-1:-1:-1;;;;;204:29:5;;:::o;357:40:19:-;396:1;357:40;:::o;14603:429:59:-;719:5:64;;14691:9:59;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;-1:-1:-1;14703:6:59;14686:340;14715:49;14727:18;:6;14738;14727:18;:10;:18;:::i;:::-;14747:9;:16;14715:11;:49::i;:::-;14711:1;:53;14686:340;;;14794:9;:16;14790:20;;14789:56;;;;;14816:23;14826:9;14836:1;14826:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14826:12:59;14816:9;:23::i;:::-;:28;14789:56;14785:231;;;14896:5;14865:14;:28;14880:9;14890:1;14880:12;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14880:12:59;14865:28;;;;;;;;;;;;:36;;-1:-1:-1;;14865:36:59;;;;;;;;;;14934:9;14944:16;;-1:-1:-1;;14944:20:59;;;14934:31;;;;;;;;;;;;;;;;14919:9;:12;;-1:-1:-1;;;;;14934:31:59;;;;14929:1;;14919:12;;;;;;;;;;;;;;;:46;;-1:-1:-1;;;;;;14919:46:59;-1:-1:-1;;;;;14919:46:59;;;;;;;;;;14983:9;:18;;;;;-1:-1:-1;;14983:18:59;;;:::i;:::-;;14785:231;14766:3;;14686:340;;239:36:5;;;-1:-1:-1;;;;;239:36:5;;:::o;303:26:17:-;;;;;;;;;;;;;;;-1:-1:-1;;303:26:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2946:293:69;3106:10;3044:4;3098:19;;;:7;:19;;;;;;;;-1:-1:-1;;;;;3098:29:69;;;;;;;;;;:46;;3132:11;3098:33;:46::i;:::-;3066:10;3058:19;;;;:7;:19;;;;;;;;-1:-1:-1;;;;;3058:29:69;;;;;;;;;;;;:87;;;3156:61;;;;;;3058:29;;3156:61;;;;;;;;;;;-1:-1:-1;3230:4:69;2946:293;;;;:::o;558:28:19:-;;;;:::o;2336:153:69:-;-1:-1:-1;;;;;2459:15:69;;;2435:7;2459:15;;;-1:-1:-1;2459:15:69;;;;;;;;:25;;;;;;;;;;;;;2336:153::o;15230:99:59:-;15306:9;:16;15230:99;:::o;1100:103:64:-;719:5;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;1169:29;1188:9;1169:18;:29::i;:::-;1100:103;:::o;503:418:5:-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;594:16:5;;577:63;;;-1:-1:-1;;;;;577:63:5;;;;;;;;;;;;;;;;;;;;;594:16;;;;-1:-1:-1;;;;;594:16:5;;-1:-1:-1;;577:63:5;;;;;;;;;;;;;-1:-1:-1;594:16:5;577:63;;;5:2:-1;;;;30:1;27;20:12;5:2;577:63:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;577:63:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;577:63:5;560:14;:80;;-1:-1:-1;;;;;;560:80:5;-1:-1:-1;;;;;560:80:5;;;;;;691:16;;674:70;;;-1:-1:-1;;;;;674:70:5;;577:63;674:70;;;;;;;;;;;;;;;;;;560:80;691:16;;;;;;;-1:-1:-1;;674:70:5;;;;;577:63;674:70;;;;;-1:-1:-1;691:16:5;674:70;;;5:2:-1;;;;30:1;27;20:12;5:2;674:70:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;674:70:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;674:70:5;650:21;:94;;-1:-1:-1;;;;;;650:94:5;-1:-1:-1;;;;;650:94:5;;;;;;788:16;;771:63;;;-1:-1:-1;;;;;771:63:5;;674:70;771:63;;;;;;;;;;;;;;;;;;;;650:94;788:16;;;;;;;-1:-1:-1;;771:63:5;;;;;674:70;;771:63;;;;;-1:-1:-1;788:16:5;771:63;;;5:2:-1;;;;30:1;27;20:12;5:2;771:63:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;771:63:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;771:63:5;754:14;:80;;-1:-1:-1;;;;;;754:80:5;-1:-1:-1;;;;;754:80:5;;;;;;873:16;;856:58;;;-1:-1:-1;;;;;856:58:5;;771:63;856:58;;;;;;;;;;;;;;;;;;754:80;873:16;;;;;;;-1:-1:-1;;856:58:5;;;;;771:63;856:58;;;;;-1:-1:-1;873:16:5;856:58;;;5:2:-1;;;;30:1;27;20:12;5:2;856:58:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;856:58:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;856:58:5;844:9;:70;;-1:-1:-1;;;;;;844:70:5;-1:-1:-1;;;;;844:70:5;;;;;;;;;503:418::o;6491:230:59:-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;782:14:61;;;;781:15;773:24;;;;;;803:14;:21;;-1:-1:-1;;803:21:61;820:4;803:21;;;6662:52:59;;;;;;;;;;;;;;;;;;;;;;;;6673:14;;6662:52;6689:5;;;;;;6662:52;;6689:5;;;;6662:52;;;;;;;;;;;6696:8;6706:7;6662:10;:52::i;:::-;-1:-1:-1;;837:14:61;:22;;-1:-1:-1;;837:22:61;;;-1:-1:-1;;;6491:230:59:o;11404:148::-;719:5:64;;-1:-1:-1;;;;;719:5:64;705:10;:19;697:28;;;;;;11484:9:59;;11504:5;;11478:41;;;;;;-1:-1:-1;;;;;11504:5:59;;;11478:41;;;;;;;;;;;;11484:9;;;;;11478:25;;:41;;;;;;;;;;;;;;-1:-1:-1;11484:9:59;11478:41;;;5:2:-1;;;;30:1;27;20:12;5:2;11478:41:59;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11478:41:59;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11478:41:59;11470:75;;;;;;;-1:-1:-1;;;;;11470:75:59;;;;;;;;;;;;;;;;;;;;;;;;;;;1505:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1505:59:59;-1:-1:-1;1505:59:59;:::o;25272:295::-;25348:7;396:1:19;25334:4:59;25348:7;;3717:165;3739:20;;;;;;;;:7;:20;;;;;:27;3735:31;;;;3717:165;;;3802:12;:69;;;-1:-1:-1;3819:20:59;;;;;;;;:7;:20;;;;;:23;;3860:10;;3819:23;;;;;;;;;;;;;;;;;:37;:23;;;;;:37;;-1:-1:-1;;;;;3819:37:59;:51;3802:69;3787:84;-1:-1:-1;3768:3:59;;3717:165;;;3895:9;:26;;;;;3909:12;3908:13;3895:26;3891:389;;;3941:22;;;350:1:19;3941:22:59;3937:243;;;3989:20;;;;;;;:7;:20;;;;;:27;:32;:55;;;;-1:-1:-1;4039:5:59;;-1:-1:-1;;;;;4039:5:59;4025:10;:19;3989:55;3981:113;;;;;;;-1:-1:-1;;;;;3981:113:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3937:243;;;4151:5;;-1:-1:-1;;;;;4151:5:59;4137:10;:19;4129:51;;;;;-1:-1:-1;;;;;4129:51:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;3891:389;;;4219:12;4211:58;;;;;;;-1:-1:-1;;;;;4211:58:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25375:19;;-1:-1:-1;;;25367:41:59;;;;;;25440:19;;;25462:1;25440:23;25418:45;;;;25478:46;;;25520:3;25478:46;;;;;;;;;;;;;25541:19;;25534:26;;25272:295;;;;;:::o;13553:685::-;13650:11;;;13649:31;;-1:-1:-1;;;;;;13667:12:59;;;;;;;13649:31;13645:68;;;13696:7;;13645:68;13783:14;13793:3;13783:9;:14::i;:::-;:19;13782:44;;;;-1:-1:-1;;;;;;13808:17:59;;;;13782:44;13778:111;;;13858:13;;:20;;13876:1;13858:20;:17;:20;:::i;:::-;13842:13;:36;13778:111;13974:16;13984:5;13974:9;:16::i;:::-;13964:6;:26;13960:93;;;14022:13;;:20;;14040:1;14022:20;:17;:20;:::i;:::-;14006:13;:36;13960:93;-1:-1:-1;;;;;14103:19:59;;;;;;:14;:19;;;;;;;;14102:20;:43;;;;-1:-1:-1;;;;;;14127:17:59;;;;14102:43;14098:133;;;-1:-1:-1;14161:9:59;27:10:-1;;39:1;23:18;;;45:23;;;14161:19:59;;;;-1:-1:-1;;;;;;14161:19:59;-1:-1:-1;;;;;14161:19:59;;;;;;;;;-1:-1:-1;14194:19:59;;;:14;14161:19;14194;;;;;:26;;-1:-1:-1;;14194:26:59;;;;;;-1:-1:-1;13553:685:59:o;16136:149::-;-1:-1:-1;;;;;16226:29:59;;;;;;:18;:29;;;;;16208:70;;16257:20;16226:29;16257:9;:20::i;:::-;16208:17;:70::i;736:470:69:-;842:4;-1:-1:-1;;;;;864:17:69;;;;856:26;;;;;;-1:-1:-1;;;;;906:15:69;;:8;:15;;;;;;;;;;;896:25;;;888:34;;;;;;-1:-1:-1;;;;;946:14:69;;;;;;-1:-1:-1;946:14:69;;;;;;;;961:10;946:26;;;;;;;;936:36;;;928:45;;;;;;-1:-1:-1;;;;;998:15:69;;:8;:15;;;;;;;;;;;:27;;1018:6;998:19;:27::i;:::-;-1:-1:-1;;;;;980:15:69;;;:8;:15;;;;;;;;;;;:45;;;;1047:13;;;;;;;:25;;1065:6;1047:17;:25::i;:::-;-1:-1:-1;;;;;1031:13:69;;;:8;:13;;;;;;;;;;;:41;;;;1107:14;;;;;-1:-1:-1;1107:14:69;;;;;1122:10;1107:26;;;;;;;:38;;1138:6;1107:30;:38::i;:::-;-1:-1:-1;;;;;1078:14:69;;;;;;;-1:-1:-1;1078:14:69;;;;;;;;1093:10;1078:26;;;;;;;:67;;;;1156:28;;;;;;;-1:-1:-1;;1156:28:69;;;;1078:14;;;;1156:28;;;1078:14;-1:-1:-1;1078:14:69;-1:-1:-1;;;;;1156:28:69;;;;;;;;;;-1:-1:-1;1197:4:69;736:470;;;;;:::o;15852:121:59:-;15911:55;15929:21;15952:13;:11;:13::i;15911:55::-;15852:121::o;1214:123:63:-;1293:5;;;1311:6;;;;1304:14;;;1042:110;1100:7;1122:6;;;;1115:14;;;;-1:-1:-1;1142:5:63;;;1042:110::o;26149:1298:59:-;26271:7;26971:11;26996;27074;26315:19;;26298:13;:36;;26290:45;;;;;;;;26440:18;;26436:55;;;26479:1;26472:8;;;;26436:55;26504:18;;:23;26500:74;;;26550:13;26543:20;;;;26500:74;26618:13;26587:11;26599:1;26587:14;;;;;;;;;;;;;;;;;;;;;;;:27;:44;26583:102;;26654:11;26666:1;26654:14;;;;;;;;;;;;;;;;;;;;:20;;;26647:27;;;;26583:102;26710:18;;26749:13;;26710:18;;-1:-1:-1;;26710:22:59;;;26698:35;;;;;;;;;;;;;;;;:48;;;:64;26694:115;;;26785:13;26778:20;;;;26694:115;26834:18;;26874:13;;26834:18;;-1:-1:-1;;26834:22:59;;;26822:35;;;;;;;;;;;;;;;;:48;;;:65;26818:144;;;26922:18;;;;-1:-1:-1;;26922:22:59;;;26910:35;;;;;26818:144;27010:18;;26985:1;;-1:-1:-1;;;27010:22:59;;-1:-1:-1;27042:360:59;27055:3;27049;:9;27042:360;;;27102:1;27089:9;;;27088:15;27074:29;;27154:13;27121:11;27133:3;27121:16;;;;;;;;;;;;;;;;;;;;:29;;;:46;27117:117;;;27193:3;27187:9;;27214:5;;27117:117;27283:13;27251:11;27263:3;27251:16;;;;;;;;;;;;;;;;;;;;:29;;;:45;27247:145;;;27322:3;27328:1;27322:7;27316:13;;27247:145;;;27374:3;27368:9;;27247:145;27042:360;;;27418:11;27430:3;27418:16;;;;;;;;;;;;;;;;;;;;:22;;;27411:29;;26149:1298;;;;;;;;;:::o;24871:261::-;24923:10;24945:8;25006:6;24971:1;24956:5;:12;:16;:35;;24990:1;24956:35;;;24975:5;:12;24956:35;24945:46;;25015:1;25006:10;;25001:125;25022:3;25018:1;:7;25001:125;;;25110:1;25106;25100:3;:7;:11;25095:1;:17;25089:1;:24;25076:5;25082:1;25076:8;;;;;;;;;;;;;;;-1:-1:-1;25076:8:59;;;;;;25071:14;:43;-1:-1:-1;;;25059:9:59;;;;:55;25052:63;;;;25027:3;;25001:125;;;24871:261;;;;;:::o;608:321:65:-;671:4;-1:-1:-1;;;;;691:17:65;;;;683:26;;;;;;742:10;733:8;:20;;;;;;;;;;;723:30;;;715:39;;;;;;793:10;784:8;:20;;;;;;;;;;;:32;;809:6;784:32;:24;:32;:::i;:::-;770:10;761:8;:20;;;;;;;;;;;:55;;;;-1:-1:-1;;;;;838:13:65;;;;;;:25;;856:6;838:17;:25::i;:::-;-1:-1:-1;;;;;822:13:65;;:8;:13;;;;;;;;;;;:41;;;;874:33;;;;;;;-1:-1:-1;;822:13:65;;883:10;;874:33;;822:8;:13;-1:-1:-1;822:8:65;-1:-1:-1;;;;;874:33:65;;;;;;;;;-1:-1:-1;920:4:65;608:321;;;;:::o;409:101:62:-;470:7;496:1;492;:5;:13;;504:1;492:13;;;-1:-1:-1;500:1:62;;409:101;-1:-1:-1;409:101:62:o;1338:171:64:-;-1:-1:-1;;;;;1408:23:64;;;;1400:32;;;;;;1464:5;;1443:38;;-1:-1:-1;;;;;1443:38:64;;;;1464:5;;1443:38;;1464:5;;1443:38;1487:5;:17;;-1:-1:-1;;;;;;1487:17:64;-1:-1:-1;;;;;1487:17:64;;;;;;;;;;1338:171::o;7405:1273:59:-;7602:14;;7586:57;;;;;;-1:-1:-1;;;;;7586:57:59;;;;;;;;;-1:-1:-1;;;;;;;;;;7602:14:59;;;;;7586:41;;:57;;;;;-1:-1:-1;;7586:57:59;;;;;;;;-1:-1:-1;7602:14:59;7586:57;;;5:2:-1;;;;30:1;27;20:12;5:2;7586:57:59;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7586:57:59;;;;7699:14;7653:61;;7743:13;-1:-1:-1;;;;;7743:21:59;;:23;;;;;-1:-1:-1;;;7743:23:59;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7743:23:59;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7743:23:59;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7743:23:59;7784:40;:19;;;;;;:7;7743:23;7784:19;;;;:26;7743:23;;-1:-1:-1;1893:2:59;-1:-1:-1;7776:84:59;;;;;-1:-1:-1;;;;;7776:84:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;7891:13;-1:-1:-1;;;;;7891:23:59;;:25;;;;;-1:-1:-1;;;7891:25:59;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7891:25:59;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7891:25:59;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7891:25:59;;-1:-1:-1;7934:22:59;;;;7926:81;;;;;-1:-1:-1;;;;;7926:81:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8064:9;;8058:52;;;;;;-1:-1:-1;;;;;8058:52:59;;;;;;;;;;;;;;;8064:9;;;;;8058:24;;:52;;;;;;;;;;;;;;-1:-1:-1;8064:9:59;8058:52;;;5:2:-1;;;;30:1;27;20:12;5:2;8058:52:59;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8058:52:59;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8058:52:59;8050:100;;;;;;;-1:-1:-1;;;;;8050:100:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8227:27;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8227:20:59;;;;;:27;;;;;;;;;;;;;;-1:-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8227:27:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8227:27:59;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8227:27:59;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8227:27:59;8311:9;;8305:41;;;;;;-1:-1:-1;;;;;8305:41:59;;;;;;;;;;;;;;;8227:27;;-1:-1:-1;8311:9:59;;;8305:24;;:41;;;;;8227:27;;8305:41;;;;;;;;-1:-1:-1;8311:9:59;8305:41;;;5:2:-1;;;;30:1;27;20:12;5:2;8305:41:59;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8305:41:59;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8305:41:59;8297:84;;;;;;;-1:-1:-1;;;;;8297:84:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;8454:13;-1:-1:-1;;;;;8454:21:59;;:23;;;;;-1:-1:-1;;;8454:23:59;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8454:23:59;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8454:23:59;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8454:23:59;8487:19;;;;;;;:7;8454:23;8487:19;;;;;;;8512:30;;;;;;;;;;-1:-1:-1;;;;;8512:30:59;;;;;;;;;27:10:-1;;-1:-1;23:18;;;45:23;;8487:56:59;;;;;;;;;-1:-1:-1;8487:56:59;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;8487:56:59;;;;;;;;;;;8583:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8667:3;-1:-1:-1;8583:88:59;;;;;8454:23;;-1:-1:-1;8487:19:59;;8583:88;;;;;;;;;;7405:1273;;;;;;;;;:::o;16492:907::-;16629:19;;:24;16625:61;;;16669:7;;16625:61;16778:19;;:24;16774:247;;;16853:123;;;;;;;;;16900:19;;16853:123;;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;16818:172:59;;;;;;;;;;;;;;;;;;;;;;;17004:7;;16774:247;17135:19;;17094;;;;-1:-1:-1;;17094:23:59;;;17081:37;;;;;;;;;;;;;;;;:50;;;:73;17077:110;;;17170:7;;17077:110;17271:111;;;;;;;;;17314:19;;17271:111;;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;-1:-1;17240:152:59;;;;;;;;;;;;;;;;;;;;;;;;16492:907::o;928:26908::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;928:26908:59;;;-1:-1:-1;928:26908:59;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;928:26908:59;;;-1:-1:-1;928:26908:59;;;;;;;;;;;;;;;;;;;;",
  "source": "pragma solidity ^0.4.24;\n\nimport \"openzeppelin-solidity/contracts/math/Math.sol\";\nimport \"../interfaces/IERC20.sol\";\nimport \"../interfaces/ISecurityToken.sol\";\nimport \"../interfaces/IModule.sol\";\nimport \"../interfaces/IModuleFactory.sol\";\nimport \"../interfaces/IModuleRegistry.sol\";\nimport \"../interfaces/IST20.sol\";\nimport \"../modules/TransferManager/ITransferManager.sol\";\nimport \"../modules/PermissionManager/IPermissionManager.sol\";\nimport \"../interfaces/ITokenBurner.sol\";\nimport \"../RegistryUpdater.sol\";\nimport \"openzeppelin-solidity/contracts/ReentrancyGuard.sol\";\n\n/**\n* @title Security Token contract\n* @notice SecurityToken is an ERC20 token with added capabilities:\n* @notice - Implements the ST-20 Interface\n* @notice - Transfers are restricted\n* @notice - Modules can be attached to it to control its behaviour\n* @notice - ST should not be deployed directly, but rather the SecurityTokenRegistry should be used\n*/\ncontract SecurityToken is ISecurityToken, ReentrancyGuard, RegistryUpdater {\n    using SafeMath for uint256;\n\n    bytes32 public constant securityTokenVersion = \"0.0.1\";\n\n    // Reference to token burner contract\n    ITokenBurner public tokenBurner;\n\n    // Use to halt all the transactions\n    bool public freeze = false;\n\n    struct ModuleData {\n        bytes32 name;\n        address moduleAddress;\n    }\n\n    // Structures to maintain checkpoints of balances for governance / dividends\n    struct Checkpoint {\n        uint256 checkpointId;\n        uint256 value;\n    }\n\n    mapping (address => Checkpoint[]) public checkpointBalances;\n    Checkpoint[] public checkpointTotalSupply;\n\n    bool public finishedIssuerMinting = false;\n    bool public finishedSTOMinting = false;\n\n    mapping (bytes4 => bool) transferFunctions;\n\n    // Module list should be order agnostic!\n    mapping (uint8 => ModuleData[]) public modules;\n\n    uint8 public constant MAX_MODULES = 20;\n\n    mapping (address => bool) public investorListed;\n\n    // Emit at the time when module get added\n    event LogModuleAdded(\n        uint8 indexed _type,\n        bytes32 _name,\n        address _moduleFactory,\n        address _module,\n        uint256 _moduleCost,\n        uint256 _budget,\n        uint256 _timestamp\n    );\n\n    // Emit when the token details get updated\n    event LogUpdateTokenDetails(string _oldDetails, string _newDetails);\n    // Emit when the granularity get changed\n    event LogGranularityChanged(uint256 _oldGranularity, uint256 _newGranularity);\n    // Emit when Module get removed from the securityToken\n    event LogModuleRemoved(uint8 indexed _type, address _module, uint256 _timestamp);\n    // Emit when the budget allocated to a module is changed\n    event LogModuleBudgetChanged(uint8 indexed _moduleType, address _module, uint256 _budget);\n    // Emit when all the transfers get freeze\n    event LogFreezeTransfers(bool _freeze, uint256 _timestamp);\n    // Emit when new checkpoint created\n    event LogCheckpointCreated(uint256 indexed _checkpointId, uint256 _timestamp);\n    // Emit when the minting get finished for the Issuer\n    event LogFinishMintingIssuer(uint256 _timestamp);\n    // Emit when the minting get finished for the STOs\n    event LogFinishMintingSTO(uint256 _timestamp);\n    // Change the STR address in the event of a upgrade\n    event LogChangeSTRAddress(address indexed _oldAddress, address indexed _newAddress);\n\n    // If _fallback is true, then for STO module type we only allow the module if it is set, if it is not set we only allow the owner\n    // for other _moduleType we allow both issuer and module.\n    modifier onlyModule(uint8 _moduleType, bool _fallback) {\n      //Loop over all modules of type _moduleType\n        bool isModuleType = false;\n        for (uint8 i = 0; i < modules[_moduleType].length; i++) {\n            isModuleType = isModuleType || (modules[_moduleType][i].moduleAddress == msg.sender);\n        }\n        if (_fallback && !isModuleType) {\n            if (_moduleType == STO_KEY)\n                require(modules[_moduleType].length == 0 && msg.sender == owner, \"Sender is not owner or STO module is attached\");\n            else\n                require(msg.sender == owner, \"Sender is not owner\");\n        } else {\n            require(isModuleType, \"Sender is not correct module type\");\n        }\n        _;\n    }\n\n    modifier checkGranularity(uint256 _amount) {\n        require(_amount % granularity == 0, \"Unable to modify token balances at this granularity\");\n        _;\n    }\n\n    // Checks whether the minting is allowed or not, check for the owner if owner is no the msg.sender then check\n    // for the finishedSTOMinting flag because only STOs and owner are allowed for minting\n    modifier isMintingAllowed() {\n        if (msg.sender == owner) {\n            require(!finishedIssuerMinting, \"Minting is finished for Issuer\");\n        } else {\n            require(!finishedSTOMinting, \"Minting is finished for STOs\");\n        }\n        _;\n    }\n\n    /**\n     * @notice Constructor\n     * @param _name Name of the SecurityToken\n     * @param _symbol Symbol of the Token\n     * @param _decimals Decimals for the securityToken\n     * @param _granularity granular level of the token\n     * @param _tokenDetails Details of the token that are stored off-chain (IPFS hash)\n     * @param _polymathRegistry Contract address of the polymath registry\n     */\n    constructor (\n        string _name,\n        string _symbol,\n        uint8 _decimals,\n        uint256 _granularity,\n        string _tokenDetails,\n        address _polymathRegistry\n    )\n    public\n    DetailedERC20(_name, _symbol, _decimals)\n    RegistryUpdater(_polymathRegistry)\n    {\n        //When it is created, the owner is the STR\n        updateFromRegistry();\n        tokenDetails = _tokenDetails;\n        granularity = _granularity;\n        transferFunctions[bytes4(keccak256(\"transfer(address,uint256)\"))] = true;\n        transferFunctions[bytes4(keccak256(\"transferFrom(address,address,uint256)\"))] = true;\n        transferFunctions[bytes4(keccak256(\"mint(address,uint256)\"))] = true;\n        transferFunctions[bytes4(keccak256(\"burn(uint256)\"))] = true;\n    }\n\n    /**\n     * @notice Function used to attach the module in security token\n     * @param _moduleFactory Contract address of the module factory that needs to be attached\n     * @param _data Data used for the intialization of the module factory variables\n     * @param _maxCost Maximum cost of the Module factory\n     * @param _budget Budget of the Module factory\n     */\n    function addModule(\n        address _moduleFactory,\n        bytes _data,\n        uint256 _maxCost,\n        uint256 _budget\n    ) external onlyOwner nonReentrant {\n        _addModule(_moduleFactory, _data, _maxCost, _budget);\n    }\n\n    /**\n    * @notice _addModule handles the attachment (or replacement) of modules for the ST\n    * @dev  E.G.: On deployment (through the STR) ST gets a TransferManager module attached to it\n    * @dev to control restrictions on transfers.\n    * @dev You are allowed to add a new moduleType if:\n    * @dev - there is no existing module of that type yet added\n    * @dev - the last member of the module list is replacable\n    * @param _moduleFactory is the address of the module factory to be added\n    * @param _data is data packed into bytes used to further configure the module (See STO usage)\n    * @param _maxCost max amount of POLY willing to pay to module. (WIP)\n    */\n    function _addModule(address _moduleFactory, bytes _data, uint256 _maxCost, uint256 _budget) internal {\n        //Check that module exists in registry - will throw otherwise\n        IModuleRegistry(moduleRegistry).useModule(_moduleFactory);\n        IModuleFactory moduleFactory = IModuleFactory(_moduleFactory);\n        uint8 moduleType = moduleFactory.getType();\n        require(modules[moduleType].length < MAX_MODULES, \"Limit of MAX MODULES is reached\");\n        uint256 moduleCost = moduleFactory.setupCost();\n        require(moduleCost <= _maxCost, \"Max Cost is always be greater than module cost\");\n        //Approve fee for module\n        require(ERC20(polyToken).approve(_moduleFactory, moduleCost), \"Not able to approve the module cost\");\n        //Creates instance of module from factory\n        address module = moduleFactory.deploy(_data);\n        //Approve ongoing budget\n        require(ERC20(polyToken).approve(module, _budget), \"Not able to approve the budget\");\n        //Add to SecurityToken module map\n        bytes32 moduleName = moduleFactory.getName();\n        modules[moduleType].push(ModuleData(moduleName, module));\n        //Emit log event\n        emit LogModuleAdded(moduleType, moduleName, _moduleFactory, module, moduleCost, _budget, now);\n    }\n\n    /**\n    * @notice Removes a module attached to the SecurityToken\n    * @param _moduleType is which type of module we are trying to remove\n    * @param _moduleIndex is the index of the module within the chosen type\n    */\n    function removeModule(uint8 _moduleType, uint8 _moduleIndex) external onlyOwner {\n        require(_moduleIndex < modules[_moduleType].length,\n        \"Module index doesn't exist as per the choosen module type\");\n        require(modules[_moduleType][_moduleIndex].moduleAddress != address(0),\n        \"Module contract address should not be 0x\");\n        //Take the last member of the list, and replace _moduleIndex with this, then shorten the list by one\n        emit LogModuleRemoved(_moduleType, modules[_moduleType][_moduleIndex].moduleAddress, now);\n        modules[_moduleType][_moduleIndex] = modules[_moduleType][modules[_moduleType].length - 1];\n        modules[_moduleType].length = modules[_moduleType].length - 1;\n    }\n\n    /**\n     * @notice Returns module list for a module type\n     * @param _moduleType is which type of module we are trying to get\n     * @param _moduleIndex is the index of the module within the chosen type\n     * @return bytes32\n     * @return address\n     */\n    function getModule(uint8 _moduleType, uint _moduleIndex) public view returns (bytes32, address) {\n        if (modules[_moduleType].length > 0) {\n            return (\n                modules[_moduleType][_moduleIndex].name,\n                modules[_moduleType][_moduleIndex].moduleAddress\n            );\n        } else {\n            return (\"\", address(0));\n        }\n\n    }\n\n    /**\n     * @notice returns module list for a module name - will return first match\n     * @param _moduleType is which type of module we are trying to get\n     * @param _name is the name of the module within the chosen type\n     * @return bytes32\n     * @return address\n     */\n    function getModuleByName(uint8 _moduleType, bytes32 _name) public view returns (bytes32, address) {\n        if (modules[_moduleType].length > 0) {\n            for (uint256 i = 0; i < modules[_moduleType].length; i++) {\n                if (modules[_moduleType][i].name == _name) {\n                  return (\n                      modules[_moduleType][i].name,\n                      modules[_moduleType][i].moduleAddress\n                  );\n                }\n            }\n            return (\"\", address(0));\n        } else {\n            return (\"\", address(0));\n        }\n    }\n\n    /**\n    * @notice allows the owner to withdraw unspent POLY stored by them on the ST.\n    * @dev Owner can transfer POLY to the ST which will be used to pay for modules that require a POLY fee.\n    * @param _amount amount of POLY to withdraw\n    */\n    function withdrawPoly(uint256 _amount) public onlyOwner {\n        require(ERC20(polyToken).transfer(owner, _amount), \"In-sufficient balance\");\n    }\n\n    /**\n    * @notice allows owner to approve more POLY to one of the modules\n    * @param _moduleType module type\n    * @param _moduleIndex module index\n    * @param _budget new budget\n    */\n    function changeModuleBudget(uint8 _moduleType, uint8 _moduleIndex, uint256 _budget) public onlyOwner {\n        require(_moduleType != 0, \"Module type cannot be zero\");\n        require(_moduleIndex < modules[_moduleType].length, \"Incorrrect module index\");\n        uint256 _currentAllowance = IERC20(polyToken).allowance(address(this), modules[_moduleType][_moduleIndex].moduleAddress);\n        if (_budget < _currentAllowance) {\n            require(IERC20(polyToken).decreaseApproval(modules[_moduleType][_moduleIndex].moduleAddress, _currentAllowance.sub(_budget)), \"Insufficient balance to decreaseApproval\");\n        } else {\n            require(IERC20(polyToken).increaseApproval(modules[_moduleType][_moduleIndex].moduleAddress, _budget.sub(_currentAllowance)), \"Insufficient balance to increaseApproval\");\n        }\n        emit LogModuleBudgetChanged(_moduleType, modules[_moduleType][_moduleIndex].moduleAddress, _budget);\n    }\n\n    /**\n     * @notice change the tokenDetails\n     * @param _newTokenDetails New token details\n     */\n    function updateTokenDetails(string _newTokenDetails) public onlyOwner {\n        emit LogUpdateTokenDetails(tokenDetails, _newTokenDetails);\n        tokenDetails = _newTokenDetails;\n    }\n\n    /**\n    * @notice allows owner to change token granularity\n    * @param _granularity granularity level of the token\n    */\n    function changeGranularity(uint256 _granularity) public onlyOwner {\n        require(_granularity != 0, \"Granularity can not be 0\");\n        emit LogGranularityChanged(granularity, _granularity);\n        granularity = _granularity;\n    }\n\n    /**\n    * @notice keeps track of the number of non-zero token holders\n    * @param _from sender of transfer\n    * @param _to receiver of transfer\n    * @param _value value of transfer\n    */\n    function adjustInvestorCount(address _from, address _to, uint256 _value) internal {\n        if ((_value == 0) || (_from == _to)) {\n            return;\n        }\n        // Check whether receiver is a new token holder\n        if ((balanceOf(_to) == 0) && (_to != address(0))) {\n            investorCount = investorCount.add(1);\n        }\n        // Check whether sender is moving all of their tokens\n        if (_value == balanceOf(_from)) {\n            investorCount = investorCount.sub(1);\n        }\n        //Also adjust investor list\n        if (!investorListed[_to] && (_to != address(0))) {\n            investors.push(_to);\n            investorListed[_to] = true;\n        }\n\n    }\n\n    /**\n    * @notice removes addresses with zero balances from the investors list\n    * @param _start Index in investor list at which to start removing zero balances\n    * @param _iters Max number of iterations of the for loop\n    * NB - pruning this list will mean you may not be able to iterate over investors on-chain as of a historical checkpoint\n    */\n    function pruneInvestors(uint256 _start, uint256 _iters) public onlyOwner {\n        for (uint256 i = _start; i < Math.min256(_start.add(_iters), investors.length); i++) {\n            if ((i < investors.length) && (balanceOf(investors[i]) == 0)) {\n                investorListed[investors[i]] = false;\n                investors[i] = investors[investors.length - 1];\n                investors.length--;\n            }\n        }\n    }\n\n    /**\n     * @notice gets length of investors array\n     * NB - this length may differ from investorCount if list has not been pruned of zero balance investors\n     * @return length\n     */\n    function getInvestorsLength() public view returns(uint256) {\n        return investors.length;\n    }\n\n    /**\n     * @notice freeze all the transfers\n     */\n    function freezeTransfers() public onlyOwner {\n        require(!freeze);\n        freeze = true;\n        emit LogFreezeTransfers(freeze, now);\n    }\n\n    /**\n     * @notice un-freeze all the transfers\n     */\n    function unfreezeTransfers() public onlyOwner {\n        require(freeze);\n        freeze = false;\n        emit LogFreezeTransfers(freeze, now);\n    }\n\n    /**\n     * @notice adjust totalsupply at checkpoint after minting or burning tokens\n     */\n    function adjustTotalSupplyCheckpoints() internal {\n        adjustCheckpoints(checkpointTotalSupply, totalSupply());\n    }\n\n    /**\n     * @notice adjust token holder balance at checkpoint after a token transfer\n     * @param _investor address of the token holder affected\n     */\n    function adjustBalanceCheckpoints(address _investor) internal {\n        adjustCheckpoints(checkpointBalances[_investor], balanceOf(_investor));\n    }\n\n    /**\n     * @notice store the changes to the checkpoint objects\n     * @param _checkpoints the affected checkpoint object array\n     * @param _newValue the new value that needs to be stored\n     */\n    function adjustCheckpoints(Checkpoint[] storage _checkpoints, uint256 _newValue) internal {\n        //No checkpoints set yet\n        if (currentCheckpointId == 0) {\n            return;\n        }\n        //No previous checkpoint data - add current balance against checkpoint\n        if (_checkpoints.length == 0) {\n            _checkpoints.push(\n                Checkpoint({\n                    checkpointId: currentCheckpointId,\n                    value: _newValue\n                })\n            );\n            return;\n        }\n        //No new checkpoints since last update\n        if (_checkpoints[_checkpoints.length - 1].checkpointId == currentCheckpointId) {\n            return;\n        }\n        //New checkpoint, so record balance\n        _checkpoints.push(\n            Checkpoint({\n                checkpointId: currentCheckpointId,\n                value: _newValue\n            })\n        );\n    }\n\n    /**\n     * @notice Overloaded version of the transfer function\n     * @param _to receiver of transfer\n     * @param _value value of transfer\n     * @return bool success\n     */\n    function transfer(address _to, uint256 _value) public returns (bool success) {\n        adjustInvestorCount(msg.sender, _to, _value);\n        require(verifyTransfer(msg.sender, _to, _value), \"Transfer is not valid\");\n        adjustBalanceCheckpoints(msg.sender);\n        adjustBalanceCheckpoints(_to);\n        require(super.transfer(_to, _value));\n        return true;\n    }\n\n    /**\n     * @notice Overloaded version of the transferFrom function\n     * @param _from sender of transfer\n     * @param _to receiver of transfer\n     * @param _value value of transfer\n     * @return bool success\n     */\n    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {\n        adjustInvestorCount(_from, _to, _value);\n        require(verifyTransfer(_from, _to, _value), \"Transfer is not valid\");\n        adjustBalanceCheckpoints(_from);\n        adjustBalanceCheckpoints(_to);\n        require(super.transferFrom(_from, _to, _value));\n        return true;\n    }\n\n    /**\n     * @notice validate transfer with TransferManager module if it exists\n     * @dev TransferManager module has a key of 2\n     * @param _from sender of transfer\n     * @param _to receiver of transfer\n     * @param _amount value of transfer\n     * @return bool\n     */\n    function verifyTransfer(address _from, address _to, uint256 _amount) public checkGranularity(_amount) returns (bool) {\n        if (!freeze) {\n            bool isTransfer = false;\n            if (transferFunctions[getSig(msg.data)]) {\n              isTransfer = true;\n            }\n            if (modules[TRANSFERMANAGER_KEY].length == 0) {\n                return true;\n            }\n            bool isInvalid = false;\n            bool isValid = false;\n            bool isForceValid = false;\n            for (uint8 i = 0; i < modules[TRANSFERMANAGER_KEY].length; i++) {\n                ITransferManager.Result valid = ITransferManager(modules[TRANSFERMANAGER_KEY][i].moduleAddress).verifyTransfer(_from, _to, _amount, isTransfer);\n                if (valid == ITransferManager.Result.INVALID) {\n                    isInvalid = true;\n                }\n                if (valid == ITransferManager.Result.VALID) {\n                    isValid = true;\n                }\n                if (valid == ITransferManager.Result.FORCE_VALID) {\n                    isForceValid = true;\n                }\n            }\n            return isForceValid ? true : (isInvalid ? false : isValid);\n      }\n      return false;\n    }\n\n    /**\n     * @notice End token minting period permanently for Issuer\n     */\n    function finishMintingIssuer() public onlyOwner {\n        finishedIssuerMinting = true;\n        emit LogFinishMintingIssuer(now);\n    }\n\n    /**\n     * @notice End token minting period permanently for STOs\n     */\n    function finishMintingSTO() public onlyOwner {\n        finishedSTOMinting = true;\n        emit LogFinishMintingSTO(now);\n    }\n\n    /**\n     * @notice mints new tokens and assigns them to the target _investor.\n     * @dev Can only be called by the STO attached to the token (Or by the ST owner if there's no STO attached yet)\n     * @param _investor Address to whom the minted tokens will be dilivered\n     * @param _amount Number of tokens get minted\n     * @return success\n     */\n    function mint(address _investor, uint256 _amount) public onlyModule(STO_KEY, true) checkGranularity(_amount) isMintingAllowed() returns (bool success) {\n        require(_investor != address(0), \"Investor address should not be 0x\");\n        adjustInvestorCount(address(0), _investor, _amount);\n        require(verifyTransfer(address(0), _investor, _amount), \"Transfer is not valid\");\n        adjustBalanceCheckpoints(_investor);\n        adjustTotalSupplyCheckpoints();\n        totalSupply_ = totalSupply_.add(_amount);\n        balances[_investor] = balances[_investor].add(_amount);\n        emit Minted(_investor, _amount);\n        emit Transfer(address(0), _investor, _amount);\n        return true;\n    }\n\n    /**\n     * @notice mints new tokens and assigns them to the target _investor.\n     * Can only be called by the STO attached to the token (Or by the ST owner if there's no STO attached yet)\n     * @param _investors A list of addresses to whom the minted tokens will be dilivered\n     * @param _amounts A list of number of tokens get minted and transfer to corresponding address of the investor from _investor[] list\n     * @return success\n     */\n    function mintMulti(address[] _investors, uint256[] _amounts) public onlyModule(STO_KEY, true) returns (bool success) {\n        require(_investors.length == _amounts.length, \"Mis-match in the length of the arrays\");\n        for (uint256 i = 0; i < _investors.length; i++) {\n            mint(_investors[i], _amounts[i]);\n        }\n        return true;\n    }\n\n    /**\n     * @notice Validate permissions with PermissionManager if it exists, If no Permission return false\n     * @dev Note that IModule withPerm will allow ST owner all permissions anyway\n     * @dev this allows individual modules to override this logic if needed (to not allow ST owner all permissions)\n     * @param _delegate address of delegate\n     * @param _module address of PermissionManager module\n     * @param _perm the permissions\n     * @return success\n     */\n    function checkPermission(address _delegate, address _module, bytes32 _perm) public view returns(bool) {\n        if (modules[PERMISSIONMANAGER_KEY].length == 0) {\n            return false;\n        }\n\n        for (uint8 i = 0; i < modules[PERMISSIONMANAGER_KEY].length; i++) {\n            if (IPermissionManager(modules[PERMISSIONMANAGER_KEY][i].moduleAddress).checkPermission(_delegate, _module, _perm)) {\n                return true;\n            }\n        }\n    }\n\n    /**\n     * @notice used to set the token Burner address. It only be called by the owner\n     * @param _tokenBurner Address of the token burner contract\n     */\n    function setTokenBurner(address _tokenBurner) public onlyOwner {\n        tokenBurner = ITokenBurner(_tokenBurner);\n    }\n\n    /**\n     * @notice Burn function used to burn the securityToken\n     * @param _value No. of token that get burned\n     */\n    function burn(uint256 _value) checkGranularity(_value) public {\n        adjustInvestorCount(msg.sender, address(0), _value);\n        require(tokenBurner != address(0), \"Token Burner contract address is not set yet\");\n        require(verifyTransfer(msg.sender, address(0), _value), \"Transfer is not valid\");\n        require(_value <= balances[msg.sender], \"Value should no be greater than the balance of msg.sender\");\n        adjustBalanceCheckpoints(msg.sender);\n        adjustTotalSupplyCheckpoints();\n        // no need to require value <= totalSupply, since that would imply the\n        // sender's balance is greater than the totalSupply, which *should* be an assertion failure\n\n        balances[msg.sender] = balances[msg.sender].sub(_value);\n        require(tokenBurner.burn(msg.sender, _value), \"Token burner process is not validated\");\n        totalSupply_ = totalSupply_.sub(_value);\n        emit Burnt(msg.sender, _value);\n        emit Transfer(msg.sender, address(0), _value);\n    }\n\n    /**\n     * @notice Get function signature from _data\n     * @param _data passed data\n     * @return bytes4 sig\n     */\n    function getSig(bytes _data) internal pure returns (bytes4 sig) {\n        uint len = _data.length < 4 ? _data.length : 4;\n        for (uint i = 0; i < len; i++) {\n            sig = bytes4(uint(sig) + uint(_data[i]) * (2 ** (8 * (len - 1 - i))));\n        }\n    }\n\n    /**\n     * @notice Creates a checkpoint that can be used to query historical balances / totalSuppy\n     * @return uint256\n     */\n    function createCheckpoint() public onlyModule(CHECKPOINT_KEY, true) returns(uint256) {\n        require(currentCheckpointId < 2**256 - 1);\n        currentCheckpointId = currentCheckpointId + 1;\n        emit LogCheckpointCreated(currentCheckpointId, now);\n        return currentCheckpointId;\n    }\n\n    /**\n     * @notice Queries totalSupply as of a defined checkpoint\n     * @param _checkpointId Checkpoint ID to query\n     * @return uint256\n     */\n    function totalSupplyAt(uint256 _checkpointId) public view returns(uint256) {\n        return getValueAt(checkpointTotalSupply, _checkpointId, totalSupply());\n    }\n\n    /**\n     * @notice Queries value at a defined checkpoint\n     * @param checkpoints is array of Checkpoint objects\n     * @param _checkpointId Checkpoint ID to query\n     * @param _currentValue Current value of checkpoint\n     * @return uint256\n     */\n    function getValueAt(Checkpoint[] storage checkpoints, uint256 _checkpointId, uint256 _currentValue) internal view returns(uint256) {\n        require(_checkpointId <= currentCheckpointId);\n        //Checkpoint id 0 is when the token is first created - everyone has a zero balance\n        if (_checkpointId == 0) {\n          return 0;\n        }\n        if (checkpoints.length == 0) {\n            return _currentValue;\n        }\n        if (checkpoints[0].checkpointId >= _checkpointId) {\n            return checkpoints[0].value;\n        }\n        if (checkpoints[checkpoints.length - 1].checkpointId < _checkpointId) {\n            return _currentValue;\n        }\n        if (checkpoints[checkpoints.length - 1].checkpointId == _checkpointId) {\n            return checkpoints[checkpoints.length - 1].value;\n        }\n        uint256 min = 0;\n        uint256 max = checkpoints.length - 1;\n        while (max > min) {\n            uint256 mid = (max + min) / 2;\n            if (checkpoints[mid].checkpointId == _checkpointId) {\n                max = mid;\n                break;\n            }\n            if (checkpoints[mid].checkpointId < _checkpointId) {\n                min = mid + 1;\n            } else {\n                max = mid;\n            }\n        }\n        return checkpoints[max].value;\n    }\n\n    /**\n     * @notice Queries balances as of a defined checkpoint\n     * @param _investor Investor to query balance for\n     * @param _checkpointId Checkpoint ID to query as of\n     */\n    function balanceOfAt(address _investor, uint256 _checkpointId) public view returns(uint256) {\n        return getValueAt(checkpointBalances[_investor], _checkpointId, balanceOf(_investor));\n    }\n\n}\n",
  "sourcePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/tokens/SecurityToken.sol",
  "ast": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/tokens/SecurityToken.sol",
    "exportedSymbols": {
      "SecurityToken": [
        22357
      ]
    },
    "id": 22358,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 20437,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:59"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/Math.sol",
        "file": "openzeppelin-solidity/contracts/math/Math.sol",
        "id": 20438,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 22485,
        "src": "26:55:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IERC20.sol",
        "file": "../interfaces/IERC20.sol",
        "id": 20439,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 9553,
        "src": "82:34:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/ISecurityToken.sol",
        "file": "../interfaces/ISecurityToken.sol",
        "id": 20440,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 10160,
        "src": "117:42:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModule.sol",
        "file": "../interfaces/IModule.sol",
        "id": 20441,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 9718,
        "src": "160:35:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModuleFactory.sol",
        "file": "../interfaces/IModuleFactory.sol",
        "id": 20442,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 9955,
        "src": "196:42:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModuleRegistry.sol",
        "file": "../interfaces/IModuleRegistry.sol",
        "id": 20443,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 9978,
        "src": "239:43:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IST20.sol",
        "file": "../interfaces/IST20.sol",
        "id": 20444,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 10049,
        "src": "283:33:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/ITransferManager.sol",
        "file": "../modules/TransferManager/ITransferManager.sol",
        "id": 20445,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 18395,
        "src": "317:57:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/PermissionManager/IPermissionManager.sol",
        "file": "../modules/PermissionManager/IPermissionManager.sol",
        "id": 20446,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 13325,
        "src": "375:61:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/ITokenBurner.sol",
        "file": "../interfaces/ITokenBurner.sol",
        "id": 20447,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 10296,
        "src": "437:40:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/RegistryUpdater.sol",
        "file": "../RegistryUpdater.sol",
        "id": 20448,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 677,
        "src": "478:32:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/ReentrancyGuard.sol",
        "file": "openzeppelin-solidity/contracts/ReentrancyGuard.sol",
        "id": 20449,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 22414,
        "src": "511:61:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 20450,
              "name": "ISecurityToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10159,
              "src": "954:14:59",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                "typeString": "contract ISecurityToken"
              }
            },
            "id": 20451,
            "nodeType": "InheritanceSpecifier",
            "src": "954:14:59"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 20452,
              "name": "ReentrancyGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22413,
              "src": "970:15:59",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ReentrancyGuard_$22413",
                "typeString": "contract ReentrancyGuard"
              }
            },
            "id": 20453,
            "nodeType": "InheritanceSpecifier",
            "src": "970:15:59"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 20454,
              "name": "RegistryUpdater",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 676,
              "src": "987:15:59",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_RegistryUpdater_$676",
                "typeString": "contract RegistryUpdater"
              }
            },
            "id": 20455,
            "nodeType": "InheritanceSpecifier",
            "src": "987:15:59"
          }
        ],
        "contractDependencies": [
          676,
          10048,
          10159,
          22413,
          22664,
          22760,
          22794,
          22837,
          22869,
          23116
        ],
        "contractKind": "contract",
        "documentation": "@title Security Token contract\n@notice SecurityToken is an ERC20 token with added capabilities:\n@notice - Implements the ST-20 Interface\n@notice - Transfers are restricted\n@notice - Modules can be attached to it to control its behaviour\n@notice - ST should not be deployed directly, but rather the SecurityTokenRegistry should be used",
        "fullyImplemented": true,
        "id": 22357,
        "linearizedBaseContracts": [
          22357,
          676,
          22413,
          10159,
          22664,
          10048,
          22794,
          23116,
          22760,
          22837,
          22869
        ],
        "name": "SecurityToken",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 20458,
            "libraryName": {
              "contractScope": null,
              "id": 20456,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22578,
              "src": "1015:8:59",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$22578",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1009:27:59",
            "typeName": {
              "id": 20457,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1028:7:59",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "id": 20461,
            "name": "securityTokenVersion",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1042:54:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 20459,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1042:7:59",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "302e302e31",
              "id": 20460,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1089:7:59",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_ae209a0b48f21c054280f2455d32cf309387644879d9acbd8ffc199163811885",
                "typeString": "literal_string \"0.0.1\""
              },
              "value": "0.0.1"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 20463,
            "name": "tokenBurner",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1145:31:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ITokenBurner_$10295",
              "typeString": "contract ITokenBurner"
            },
            "typeName": {
              "contractScope": null,
              "id": 20462,
              "name": "ITokenBurner",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10295,
              "src": "1145:12:59",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ITokenBurner_$10295",
                "typeString": "contract ITokenBurner"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 20466,
            "name": "freeze",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1223:26:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 20464,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "1223:4:59",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "66616c7365",
              "id": 20465,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "bool",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1244:5:59",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "value": "false"
            },
            "visibility": "public"
          },
          {
            "canonicalName": "SecurityToken.ModuleData",
            "id": 20471,
            "members": [
              {
                "constant": false,
                "id": 20468,
                "name": "name",
                "nodeType": "VariableDeclaration",
                "scope": 20471,
                "src": "1284:12:59",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 20467,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1284:7:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 20470,
                "name": "moduleAddress",
                "nodeType": "VariableDeclaration",
                "scope": 20471,
                "src": "1306:21:59",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 20469,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1306:7:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "ModuleData",
            "nodeType": "StructDefinition",
            "scope": 22357,
            "src": "1256:78:59",
            "visibility": "public"
          },
          {
            "canonicalName": "SecurityToken.Checkpoint",
            "id": 20476,
            "members": [
              {
                "constant": false,
                "id": 20473,
                "name": "checkpointId",
                "nodeType": "VariableDeclaration",
                "scope": 20476,
                "src": "1449:20:59",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 20472,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1449:7:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 20475,
                "name": "value",
                "nodeType": "VariableDeclaration",
                "scope": 20476,
                "src": "1479:13:59",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 20474,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1479:7:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Checkpoint",
            "nodeType": "StructDefinition",
            "scope": 22357,
            "src": "1421:78:59",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 20481,
            "name": "checkpointBalances",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1505:59:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_$",
              "typeString": "mapping(address => struct SecurityToken.Checkpoint[])"
            },
            "typeName": {
              "id": 20480,
              "keyType": {
                "id": 20477,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1514:7:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1505:33:59",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_$",
                "typeString": "mapping(address => struct SecurityToken.Checkpoint[])"
              },
              "valueType": {
                "baseType": {
                  "contractScope": null,
                  "id": 20478,
                  "name": "Checkpoint",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 20476,
                  "src": "1525:10:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Checkpoint_$20476_storage_ptr",
                    "typeString": "struct SecurityToken.Checkpoint"
                  }
                },
                "id": 20479,
                "length": null,
                "nodeType": "ArrayTypeName",
                "src": "1525:12:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                  "typeString": "struct SecurityToken.Checkpoint[]"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 20484,
            "name": "checkpointTotalSupply",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1570:41:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage",
              "typeString": "struct SecurityToken.Checkpoint[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 20482,
                "name": "Checkpoint",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 20476,
                "src": "1570:10:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Checkpoint_$20476_storage_ptr",
                  "typeString": "struct SecurityToken.Checkpoint"
                }
              },
              "id": 20483,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "1570:12:59",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                "typeString": "struct SecurityToken.Checkpoint[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 20487,
            "name": "finishedIssuerMinting",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1618:41:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 20485,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "1618:4:59",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "66616c7365",
              "id": 20486,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "bool",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1654:5:59",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "value": "false"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 20490,
            "name": "finishedSTOMinting",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1665:38:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 20488,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "1665:4:59",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "66616c7365",
              "id": 20489,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "bool",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1698:5:59",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "value": "false"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 20494,
            "name": "transferFunctions",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1710:42:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$",
              "typeString": "mapping(bytes4 => bool)"
            },
            "typeName": {
              "id": 20493,
              "keyType": {
                "id": 20491,
                "name": "bytes4",
                "nodeType": "ElementaryTypeName",
                "src": "1719:6:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes4",
                  "typeString": "bytes4"
                }
              },
              "nodeType": "Mapping",
              "src": "1710:24:59",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$",
                "typeString": "mapping(bytes4 => bool)"
              },
              "valueType": {
                "id": 20492,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "1729:4:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 20499,
            "name": "modules",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1804:46:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
              "typeString": "mapping(uint8 => struct SecurityToken.ModuleData[])"
            },
            "typeName": {
              "id": 20498,
              "keyType": {
                "id": 20495,
                "name": "uint8",
                "nodeType": "ElementaryTypeName",
                "src": "1813:5:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                }
              },
              "nodeType": "Mapping",
              "src": "1804:31:59",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                "typeString": "mapping(uint8 => struct SecurityToken.ModuleData[])"
              },
              "valueType": {
                "baseType": {
                  "contractScope": null,
                  "id": 20496,
                  "name": "ModuleData",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 20471,
                  "src": "1822:10:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_ModuleData_$20471_storage_ptr",
                    "typeString": "struct SecurityToken.ModuleData"
                  }
                },
                "id": 20497,
                "length": null,
                "nodeType": "ArrayTypeName",
                "src": "1822:12:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_ptr",
                  "typeString": "struct SecurityToken.ModuleData[]"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 20502,
            "name": "MAX_MODULES",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1857:38:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 20500,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1857:5:59",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3230",
              "id": 20501,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1893:2:59",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_20_by_1",
                "typeString": "int_const 20"
              },
              "value": "20"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 20506,
            "name": "investorListed",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1902:47:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 20505,
              "keyType": {
                "id": 20503,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1911:7:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1902:25:59",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 20504,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "1922:4:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20522,
            "name": "LogModuleAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20521,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20508,
                  "indexed": true,
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "scope": 20522,
                  "src": "2032:19:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 20507,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2032:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20510,
                  "indexed": false,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 20522,
                  "src": "2061:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 20509,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2061:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20512,
                  "indexed": false,
                  "name": "_moduleFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 20522,
                  "src": "2084:22:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20511,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2084:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20514,
                  "indexed": false,
                  "name": "_module",
                  "nodeType": "VariableDeclaration",
                  "scope": 20522,
                  "src": "2116:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20513,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2116:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20516,
                  "indexed": false,
                  "name": "_moduleCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 20522,
                  "src": "2141:19:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20515,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2141:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20518,
                  "indexed": false,
                  "name": "_budget",
                  "nodeType": "VariableDeclaration",
                  "scope": 20522,
                  "src": "2170:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20517,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2170:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20520,
                  "indexed": false,
                  "name": "_timestamp",
                  "nodeType": "VariableDeclaration",
                  "scope": 20522,
                  "src": "2195:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20519,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2195:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2022:197:59"
            },
            "src": "2002:218:59"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20528,
            "name": "LogUpdateTokenDetails",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20527,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20524,
                  "indexed": false,
                  "name": "_oldDetails",
                  "nodeType": "VariableDeclaration",
                  "scope": 20528,
                  "src": "2301:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 20523,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2301:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20526,
                  "indexed": false,
                  "name": "_newDetails",
                  "nodeType": "VariableDeclaration",
                  "scope": 20528,
                  "src": "2321:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 20525,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2321:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2300:40:59"
            },
            "src": "2273:68:59"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20534,
            "name": "LogGranularityChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20533,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20530,
                  "indexed": false,
                  "name": "_oldGranularity",
                  "nodeType": "VariableDeclaration",
                  "scope": 20534,
                  "src": "2419:23:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20529,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2419:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20532,
                  "indexed": false,
                  "name": "_newGranularity",
                  "nodeType": "VariableDeclaration",
                  "scope": 20534,
                  "src": "2444:23:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20531,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2444:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2418:50:59"
            },
            "src": "2391:78:59"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20542,
            "name": "LogModuleRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20541,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20536,
                  "indexed": true,
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "scope": 20542,
                  "src": "2556:19:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 20535,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2556:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20538,
                  "indexed": false,
                  "name": "_module",
                  "nodeType": "VariableDeclaration",
                  "scope": 20542,
                  "src": "2577:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20537,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2577:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20540,
                  "indexed": false,
                  "name": "_timestamp",
                  "nodeType": "VariableDeclaration",
                  "scope": 20542,
                  "src": "2594:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20539,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2594:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2555:58:59"
            },
            "src": "2533:81:59"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20550,
            "name": "LogModuleBudgetChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20549,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20544,
                  "indexed": true,
                  "name": "_moduleType",
                  "nodeType": "VariableDeclaration",
                  "scope": 20550,
                  "src": "2709:25:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 20543,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2709:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20546,
                  "indexed": false,
                  "name": "_module",
                  "nodeType": "VariableDeclaration",
                  "scope": 20550,
                  "src": "2736:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20545,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2736:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20548,
                  "indexed": false,
                  "name": "_budget",
                  "nodeType": "VariableDeclaration",
                  "scope": 20550,
                  "src": "2753:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20547,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2753:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2708:61:59"
            },
            "src": "2680:90:59"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20556,
            "name": "LogFreezeTransfers",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20555,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20552,
                  "indexed": false,
                  "name": "_freeze",
                  "nodeType": "VariableDeclaration",
                  "scope": 20556,
                  "src": "2846:12:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20551,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2846:4:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20554,
                  "indexed": false,
                  "name": "_timestamp",
                  "nodeType": "VariableDeclaration",
                  "scope": 20556,
                  "src": "2860:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20553,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2860:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2845:34:59"
            },
            "src": "2821:59:59"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20562,
            "name": "LogCheckpointCreated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20561,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20558,
                  "indexed": true,
                  "name": "_checkpointId",
                  "nodeType": "VariableDeclaration",
                  "scope": 20562,
                  "src": "2952:29:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20557,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2952:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20560,
                  "indexed": false,
                  "name": "_timestamp",
                  "nodeType": "VariableDeclaration",
                  "scope": 20562,
                  "src": "2983:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20559,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2983:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2951:51:59"
            },
            "src": "2925:78:59"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20566,
            "name": "LogFinishMintingIssuer",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20565,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20564,
                  "indexed": false,
                  "name": "_timestamp",
                  "nodeType": "VariableDeclaration",
                  "scope": 20566,
                  "src": "3094:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20563,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3094:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3093:20:59"
            },
            "src": "3065:49:59"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20570,
            "name": "LogFinishMintingSTO",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20569,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20568,
                  "indexed": false,
                  "name": "_timestamp",
                  "nodeType": "VariableDeclaration",
                  "scope": 20570,
                  "src": "3200:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20567,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3200:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3199:20:59"
            },
            "src": "3174:46:59"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20576,
            "name": "LogChangeSTRAddress",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20575,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20572,
                  "indexed": true,
                  "name": "_oldAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 20576,
                  "src": "3307:27:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20571,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3307:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20574,
                  "indexed": true,
                  "name": "_newAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 20576,
                  "src": "3336:27:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20573,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3336:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3306:58:59"
            },
            "src": "3281:84:59"
          },
          {
            "body": {
              "id": 20656,
              "nodeType": "Block",
              "src": "3622:675:59",
              "statements": [
                {
                  "assignments": [
                    20583
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20583,
                      "name": "isModuleType",
                      "nodeType": "VariableDeclaration",
                      "scope": 20657,
                      "src": "3682:17:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 20582,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "3682:4:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20585,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 20584,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3702:5:59",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3682:25:59"
                },
                {
                  "body": {
                    "id": 20614,
                    "nodeType": "Block",
                    "src": "3773:109:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20612,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 20599,
                            "name": "isModuleType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20583,
                            "src": "3787:12:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 20611,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 20600,
                              "name": "isModuleType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20583,
                              "src": "3802:12:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "||",
                            "rightExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "id": 20609,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 20601,
                                          "name": "modules",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 20499,
                                          "src": "3819:7:59",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                            "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                          }
                                        },
                                        "id": 20603,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 20602,
                                          "name": "_moduleType",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 20578,
                                          "src": "3827:11:59",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "3819:20:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                          "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                        }
                                      },
                                      "id": 20605,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 20604,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20587,
                                        "src": "3840:1:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "3819:23:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                                        "typeString": "struct SecurityToken.ModuleData storage ref"
                                      }
                                    },
                                    "id": 20606,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "moduleAddress",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 20470,
                                    "src": "3819:37:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20607,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 23131,
                                      "src": "3860:3:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 20608,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "3860:10:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "src": "3819:51:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "id": 20610,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "3818:53:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "3802:69:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "3787:84:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 20613,
                        "nodeType": "ExpressionStatement",
                        "src": "3787:84:59"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20595,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20590,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20587,
                      "src": "3735:1:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 20591,
                          "name": "modules",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20499,
                          "src": "3739:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                            "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                          }
                        },
                        "id": 20593,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 20592,
                          "name": "_moduleType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20578,
                          "src": "3747:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3739:20:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                        }
                      },
                      "id": 20594,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3739:27:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3735:31:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20615,
                  "initializationExpression": {
                    "assignments": [
                      20587
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 20587,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 20657,
                        "src": "3722:7:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 20586,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "3722:5:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 20589,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 20588,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3732:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3722:11:59"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20597,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "3768:3:59",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 20596,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20587,
                        "src": "3768:1:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 20598,
                    "nodeType": "ExpressionStatement",
                    "src": "3768:3:59"
                  },
                  "nodeType": "ForStatement",
                  "src": "3717:165:59"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 20619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20616,
                      "name": "_fallback",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20580,
                      "src": "3895:9:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 20618,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "3908:13:59",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 20617,
                        "name": "isModuleType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20583,
                        "src": "3909:12:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3895:26:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 20653,
                    "nodeType": "Block",
                    "src": "4197:83:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 20649,
                              "name": "isModuleType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20583,
                              "src": "4219:12:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "53656e646572206973206e6f7420636f7272656374206d6f64756c652074797065",
                              "id": 20650,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4233:35:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_18ea84476249f5cf0264794bb4497de0f9386f65e85fd6aa7b9a26fda3f47826",
                                "typeString": "literal_string \"Sender is not correct module type\""
                              },
                              "value": "Sender is not correct module type"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_18ea84476249f5cf0264794bb4497de0f9386f65e85fd6aa7b9a26fda3f47826",
                                "typeString": "literal_string \"Sender is not correct module type\""
                              }
                            ],
                            "id": 20648,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              23134,
                              23135
                            ],
                            "referencedDeclaration": 23135,
                            "src": "4211:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 20651,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4211:58:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 20652,
                        "nodeType": "ExpressionStatement",
                        "src": "4211:58:59"
                      }
                    ]
                  },
                  "id": 20654,
                  "nodeType": "IfStatement",
                  "src": "3891:389:59",
                  "trueBody": {
                    "id": 20647,
                    "nodeType": "Block",
                    "src": "3923:268:59",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 20622,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 20620,
                            "name": "_moduleType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20578,
                            "src": "3941:11:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 20621,
                            "name": "STO_KEY",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10087,
                            "src": "3956:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "3941:22:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 20642,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20639,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 23131,
                                    "src": "4137:3:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 20640,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "4137:10:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 20641,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22582,
                                  "src": "4151:5:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "4137:19:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "hexValue": "53656e646572206973206e6f74206f776e6572",
                                "id": 20643,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4158:21:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_c31e61005312bc4f751533ef9aaa8e9a41448b72bb628fe51500ef66060b25c4",
                                  "typeString": "literal_string \"Sender is not owner\""
                                },
                                "value": "Sender is not owner"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_c31e61005312bc4f751533ef9aaa8e9a41448b72bb628fe51500ef66060b25c4",
                                  "typeString": "literal_string \"Sender is not owner\""
                                }
                              ],
                              "id": 20638,
                              "name": "require",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                23134,
                                23135
                              ],
                              "referencedDeclaration": 23135,
                              "src": "4129:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                "typeString": "function (bool,string memory) pure"
                              }
                            },
                            "id": 20644,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4129:51:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 20645,
                          "nodeType": "ExpressionStatement",
                          "src": "4129:51:59"
                        },
                        "id": 20646,
                        "nodeType": "IfStatement",
                        "src": "3937:243:59",
                        "trueBody": {
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 20634,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 20629,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 20624,
                                        "name": "modules",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20499,
                                        "src": "3989:7:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                          "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                        }
                                      },
                                      "id": 20626,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 20625,
                                        "name": "_moduleType",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20578,
                                        "src": "3997:11:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "3989:20:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                        "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                      }
                                    },
                                    "id": 20627,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "3989:27:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 20628,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4020:1:59",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "3989:32:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "id": 20633,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20630,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 23131,
                                      "src": "4025:3:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 20631,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "4025:10:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 20632,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22582,
                                    "src": "4039:5:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "src": "4025:19:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "3989:55:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "hexValue": "53656e646572206973206e6f74206f776e6572206f722053544f206d6f64756c65206973206174746163686564",
                                "id": 20635,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4046:47:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_27aa5ed9c12058eab3c15a7622391d8d8cf66ea7b8ce97824ef531556d7ebbe2",
                                  "typeString": "literal_string \"Sender is not owner or STO module is attached\""
                                },
                                "value": "Sender is not owner or STO module is attached"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_27aa5ed9c12058eab3c15a7622391d8d8cf66ea7b8ce97824ef531556d7ebbe2",
                                  "typeString": "literal_string \"Sender is not owner or STO module is attached\""
                                }
                              ],
                              "id": 20623,
                              "name": "require",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                23134,
                                23135
                              ],
                              "referencedDeclaration": 23135,
                              "src": "3981:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                "typeString": "function (bool,string memory) pure"
                              }
                            },
                            "id": 20636,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3981:113:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 20637,
                          "nodeType": "ExpressionStatement",
                          "src": "3981:113:59"
                        }
                      }
                    ]
                  }
                },
                {
                  "id": 20655,
                  "nodeType": "PlaceholderStatement",
                  "src": "4289:1:59"
                }
              ]
            },
            "documentation": null,
            "id": 20657,
            "name": "onlyModule",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 20581,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20578,
                  "name": "_moduleType",
                  "nodeType": "VariableDeclaration",
                  "scope": 20657,
                  "src": "3587:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 20577,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3587:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20580,
                  "name": "_fallback",
                  "nodeType": "VariableDeclaration",
                  "scope": 20657,
                  "src": "3606:14:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20579,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3606:4:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3586:35:59"
            },
            "src": "3567:730:59",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20671,
              "nodeType": "Block",
              "src": "4346:118:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20666,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 20664,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 20662,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20659,
                            "src": "4364:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "%",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 20663,
                            "name": "granularity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10092,
                            "src": "4374:11:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4364:21:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 20665,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4389:1:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4364:26:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "556e61626c6520746f206d6f6469667920746f6b656e2062616c616e6365732061742074686973206772616e756c6172697479",
                        "id": 20667,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4392:53:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_58b4cb5c3b872c2661ef43443d2a3bc9a81f03995da6b03c67ed8d670b6a9a2c",
                          "typeString": "literal_string \"Unable to modify token balances at this granularity\""
                        },
                        "value": "Unable to modify token balances at this granularity"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_58b4cb5c3b872c2661ef43443d2a3bc9a81f03995da6b03c67ed8d670b6a9a2c",
                          "typeString": "literal_string \"Unable to modify token balances at this granularity\""
                        }
                      ],
                      "id": 20661,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "4356:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20668,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4356:90:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20669,
                  "nodeType": "ExpressionStatement",
                  "src": "4356:90:59"
                },
                {
                  "id": 20670,
                  "nodeType": "PlaceholderStatement",
                  "src": "4456:1:59"
                }
              ]
            },
            "documentation": null,
            "id": 20672,
            "name": "checkGranularity",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 20660,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20659,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 20672,
                  "src": "4329:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20658,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4329:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4328:17:59"
            },
            "src": "4303:161:59",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20694,
              "nodeType": "Block",
              "src": "4703:233:59",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 20677,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20674,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23131,
                        "src": "4717:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 20675,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4717:10:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 20676,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22582,
                      "src": "4731:5:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4717:19:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 20691,
                    "nodeType": "Block",
                    "src": "4834:85:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 20687,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "4856:19:59",
                              "subExpression": {
                                "argumentTypes": null,
                                "id": 20686,
                                "name": "finishedSTOMinting",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20490,
                                "src": "4857:18:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4d696e74696e672069732066696e697368656420666f722053544f73",
                              "id": 20688,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4877:30:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_1b2eb8774382bd7c01e52ec9b26ebd3d636110a215a12592de5928013b58c623",
                                "typeString": "literal_string \"Minting is finished for STOs\""
                              },
                              "value": "Minting is finished for STOs"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_1b2eb8774382bd7c01e52ec9b26ebd3d636110a215a12592de5928013b58c623",
                                "typeString": "literal_string \"Minting is finished for STOs\""
                              }
                            ],
                            "id": 20685,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              23134,
                              23135
                            ],
                            "referencedDeclaration": 23135,
                            "src": "4848:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 20689,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4848:60:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 20690,
                        "nodeType": "ExpressionStatement",
                        "src": "4848:60:59"
                      }
                    ]
                  },
                  "id": 20692,
                  "nodeType": "IfStatement",
                  "src": "4713:206:59",
                  "trueBody": {
                    "id": 20684,
                    "nodeType": "Block",
                    "src": "4738:90:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 20680,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "4760:22:59",
                              "subExpression": {
                                "argumentTypes": null,
                                "id": 20679,
                                "name": "finishedIssuerMinting",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20487,
                                "src": "4761:21:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4d696e74696e672069732066696e697368656420666f7220497373756572",
                              "id": 20681,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4784:32:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c19de2e165bb1c8a94b3685a5659527ec56c0c30abe571d67de7f55d580e920e",
                                "typeString": "literal_string \"Minting is finished for Issuer\""
                              },
                              "value": "Minting is finished for Issuer"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c19de2e165bb1c8a94b3685a5659527ec56c0c30abe571d67de7f55d580e920e",
                                "typeString": "literal_string \"Minting is finished for Issuer\""
                              }
                            ],
                            "id": 20678,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              23134,
                              23135
                            ],
                            "referencedDeclaration": 23135,
                            "src": "4752:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 20682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4752:65:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 20683,
                        "nodeType": "ExpressionStatement",
                        "src": "4752:65:59"
                      }
                    ]
                  }
                },
                {
                  "id": 20693,
                  "nodeType": "PlaceholderStatement",
                  "src": "4928:1:59"
                }
              ]
            },
            "documentation": null,
            "id": 20695,
            "name": "isMintingAllowed",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 20673,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4700:2:59"
            },
            "src": "4675:261:59",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20769,
              "nodeType": "Block",
              "src": "5628:486:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 20718,
                      "name": "updateFromRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 675,
                      "src": "5689:18:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 20719,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5689:20:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20720,
                  "nodeType": "ExpressionStatement",
                  "src": "5689:20:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20723,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20721,
                      "name": "tokenDetails",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10010,
                      "src": "5719:12:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20722,
                      "name": "_tokenDetails",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20705,
                      "src": "5734:13:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "5719:28:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 20724,
                  "nodeType": "ExpressionStatement",
                  "src": "5719:28:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20727,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20725,
                      "name": "granularity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10092,
                      "src": "5757:11:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20726,
                      "name": "_granularity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20703,
                      "src": "5771:12:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5757:26:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20728,
                  "nodeType": "ExpressionStatement",
                  "src": "5757:26:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20737,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 20729,
                        "name": "transferFunctions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20494,
                        "src": "5793:17:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$",
                          "typeString": "mapping(bytes4 => bool)"
                        }
                      },
                      "id": 20735,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "7472616e7366657228616464726573732c75696e7432353629",
                                "id": 20732,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5828:27:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_a9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b",
                                  "typeString": "literal_string \"transfer(address,uint256)\""
                                },
                                "value": "transfer(address,uint256)"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_a9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b",
                                  "typeString": "literal_string \"transfer(address,uint256)\""
                                }
                              ],
                              "id": 20731,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23125,
                              "src": "5818:9:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                "typeString": "function () pure returns (bytes32)"
                              }
                            },
                            "id": 20733,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5818:38:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 20730,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5811:6:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes4_$",
                            "typeString": "type(bytes4)"
                          },
                          "typeName": "bytes4"
                        },
                        "id": 20734,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5811:46:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5793:65:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 20736,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5861:4:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "5793:72:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20738,
                  "nodeType": "ExpressionStatement",
                  "src": "5793:72:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 20739,
                        "name": "transferFunctions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20494,
                        "src": "5875:17:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$",
                          "typeString": "mapping(bytes4 => bool)"
                        }
                      },
                      "id": 20745,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "7472616e7366657246726f6d28616464726573732c616464726573732c75696e7432353629",
                                "id": 20742,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5910:39:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_23b872dd7302113369cda2901243429419bec145408fa8b352b3dd92b66c680b",
                                  "typeString": "literal_string \"transferFrom(address,address,uint256)\""
                                },
                                "value": "transferFrom(address,address,uint256)"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_23b872dd7302113369cda2901243429419bec145408fa8b352b3dd92b66c680b",
                                  "typeString": "literal_string \"transferFrom(address,address,uint256)\""
                                }
                              ],
                              "id": 20741,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23125,
                              "src": "5900:9:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                "typeString": "function () pure returns (bytes32)"
                              }
                            },
                            "id": 20743,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5900:50:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 20740,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5893:6:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes4_$",
                            "typeString": "type(bytes4)"
                          },
                          "typeName": "bytes4"
                        },
                        "id": 20744,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5893:58:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5875:77:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 20746,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5955:4:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "5875:84:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20748,
                  "nodeType": "ExpressionStatement",
                  "src": "5875:84:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20757,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 20749,
                        "name": "transferFunctions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20494,
                        "src": "5969:17:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$",
                          "typeString": "mapping(bytes4 => bool)"
                        }
                      },
                      "id": 20755,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "6d696e7428616464726573732c75696e7432353629",
                                "id": 20752,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6004:23:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_40c10f19c047ae7dfa66d6312b683d2ea3dfbcb4159e96b967c5f4b0a86f2842",
                                  "typeString": "literal_string \"mint(address,uint256)\""
                                },
                                "value": "mint(address,uint256)"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_40c10f19c047ae7dfa66d6312b683d2ea3dfbcb4159e96b967c5f4b0a86f2842",
                                  "typeString": "literal_string \"mint(address,uint256)\""
                                }
                              ],
                              "id": 20751,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23125,
                              "src": "5994:9:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                "typeString": "function () pure returns (bytes32)"
                              }
                            },
                            "id": 20753,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5994:34:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 20750,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5987:6:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes4_$",
                            "typeString": "type(bytes4)"
                          },
                          "typeName": "bytes4"
                        },
                        "id": 20754,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5987:42:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5969:61:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 20756,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6033:4:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "5969:68:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20758,
                  "nodeType": "ExpressionStatement",
                  "src": "5969:68:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20767,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 20759,
                        "name": "transferFunctions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20494,
                        "src": "6047:17:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$",
                          "typeString": "mapping(bytes4 => bool)"
                        }
                      },
                      "id": 20765,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "6275726e2875696e7432353629",
                                "id": 20762,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6082:15:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_42966c689b5afe9b9b3f8a7103b2a19980d59629bfd6a20a60972312ed41d836",
                                  "typeString": "literal_string \"burn(uint256)\""
                                },
                                "value": "burn(uint256)"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_42966c689b5afe9b9b3f8a7103b2a19980d59629bfd6a20a60972312ed41d836",
                                  "typeString": "literal_string \"burn(uint256)\""
                                }
                              ],
                              "id": 20761,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23125,
                              "src": "6072:9:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                "typeString": "function () pure returns (bytes32)"
                              }
                            },
                            "id": 20763,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6072:26:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 20760,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6065:6:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes4_$",
                            "typeString": "type(bytes4)"
                          },
                          "typeName": "bytes4"
                        },
                        "id": 20764,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6065:34:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6047:53:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 20766,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6103:4:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "6047:60:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20768,
                  "nodeType": "ExpressionStatement",
                  "src": "6047:60:59"
                }
              ]
            },
            "documentation": "@notice Constructor\n@param _name Name of the SecurityToken\n@param _symbol Symbol of the Token\n@param _decimals Decimals for the securityToken\n@param _granularity granular level of the token\n@param _tokenDetails Details of the token that are stored off-chain (IPFS hash)\n@param _polymathRegistry Contract address of the polymath registry",
            "id": 20770,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 20710,
                    "name": "_name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 20697,
                    "src": "5558:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 20711,
                    "name": "_symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 20699,
                    "src": "5565:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 20712,
                    "name": "_decimals",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 20701,
                    "src": "5574:9:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  }
                ],
                "id": 20713,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20709,
                  "name": "DetailedERC20",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22794,
                  "src": "5544:13:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_DetailedERC20_$22794_$",
                    "typeString": "type(contract DetailedERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5544:40:59"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 20715,
                    "name": "_polymathRegistry",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 20707,
                    "src": "5605:17:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 20716,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20714,
                  "name": "RegistryUpdater",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 676,
                  "src": "5589:15:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_RegistryUpdater_$676_$",
                    "typeString": "type(contract RegistryUpdater)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5589:34:59"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20708,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20697,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 20770,
                  "src": "5366:12:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 20696,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5366:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20699,
                  "name": "_symbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 20770,
                  "src": "5388:14:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 20698,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5388:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20701,
                  "name": "_decimals",
                  "nodeType": "VariableDeclaration",
                  "scope": 20770,
                  "src": "5412:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 20700,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "5412:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20703,
                  "name": "_granularity",
                  "nodeType": "VariableDeclaration",
                  "scope": 20770,
                  "src": "5437:20:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20702,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5437:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20705,
                  "name": "_tokenDetails",
                  "nodeType": "VariableDeclaration",
                  "scope": 20770,
                  "src": "5467:20:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 20704,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5467:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20707,
                  "name": "_polymathRegistry",
                  "nodeType": "VariableDeclaration",
                  "scope": 20770,
                  "src": "5497:25:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20706,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5497:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5356:172:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 20717,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5628:0:59"
            },
            "scope": 22357,
            "src": "5344:770:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20792,
              "nodeType": "Block",
              "src": "6652:69:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20786,
                        "name": "_moduleFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20772,
                        "src": "6673:14:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20787,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20774,
                        "src": "6689:5:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20788,
                        "name": "_maxCost",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20776,
                        "src": "6696:8:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20789,
                        "name": "_budget",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20778,
                        "src": "6706:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20785,
                      "name": "_addModule",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20902,
                      "src": "6662:10:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes memory,uint256,uint256)"
                      }
                    },
                    "id": 20790,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6662:52:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20791,
                  "nodeType": "ExpressionStatement",
                  "src": "6662:52:59"
                }
              ]
            },
            "documentation": "@notice Function used to attach the module in security token\n@param _moduleFactory Contract address of the module factory that needs to be attached\n@param _data Data used for the intialization of the module factory variables\n@param _maxCost Maximum cost of the Module factory\n@param _budget Budget of the Module factory",
            "id": 20793,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 20781,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20780,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "6629:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6629:9:59"
              },
              {
                "arguments": null,
                "id": 20783,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20782,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22412,
                  "src": "6639:12:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6639:12:59"
              }
            ],
            "name": "addModule",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20779,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20772,
                  "name": "_moduleFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 20793,
                  "src": "6519:22:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20771,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6519:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20774,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 20793,
                  "src": "6551:11:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 20773,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6551:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20776,
                  "name": "_maxCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 20793,
                  "src": "6572:16:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20775,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6572:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20778,
                  "name": "_budget",
                  "nodeType": "VariableDeclaration",
                  "scope": 20793,
                  "src": "6598:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20777,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6598:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6509:110:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 20784,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6652:0:59"
            },
            "scope": 22357,
            "src": "6491:230:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 20901,
              "nodeType": "Block",
              "src": "7506:1172:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20808,
                        "name": "_moduleFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20795,
                        "src": "7628:14:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 20805,
                            "name": "moduleRegistry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 609,
                            "src": "7602:14:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 20804,
                          "name": "IModuleRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9977,
                          "src": "7586:15:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IModuleRegistry_$9977_$",
                            "typeString": "type(contract IModuleRegistry)"
                          }
                        },
                        "id": 20806,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7586:31:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IModuleRegistry_$9977",
                          "typeString": "contract IModuleRegistry"
                        }
                      },
                      "id": 20807,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "useModule",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9961,
                      "src": "7586:41:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 20809,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7586:57:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20810,
                  "nodeType": "ExpressionStatement",
                  "src": "7586:57:59"
                },
                {
                  "assignments": [
                    20812
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20812,
                      "name": "moduleFactory",
                      "nodeType": "VariableDeclaration",
                      "scope": 20902,
                      "src": "7653:28:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                        "typeString": "contract IModuleFactory"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 20811,
                        "name": "IModuleFactory",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9954,
                        "src": "7653:14:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                          "typeString": "contract IModuleFactory"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20816,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20814,
                        "name": "_moduleFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20795,
                        "src": "7699:14:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 20813,
                      "name": "IModuleFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9954,
                      "src": "7684:14:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IModuleFactory_$9954_$",
                        "typeString": "type(contract IModuleFactory)"
                      }
                    },
                    "id": 20815,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7684:30:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                      "typeString": "contract IModuleFactory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7653:61:59"
                },
                {
                  "assignments": [
                    20818
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20818,
                      "name": "moduleType",
                      "nodeType": "VariableDeclaration",
                      "scope": 20902,
                      "src": "7724:16:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 20817,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "7724:5:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20822,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 20819,
                        "name": "moduleFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20812,
                        "src": "7743:13:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                          "typeString": "contract IModuleFactory"
                        }
                      },
                      "id": 20820,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getType",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9809,
                      "src": "7743:21:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                        "typeString": "function () view external returns (uint8)"
                      }
                    },
                    "id": 20821,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7743:23:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7724:42:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20829,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 20824,
                              "name": "modules",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20499,
                              "src": "7784:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                              }
                            },
                            "id": 20826,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 20825,
                              "name": "moduleType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20818,
                              "src": "7792:10:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7784:19:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                              "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                            }
                          },
                          "id": 20827,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7784:26:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 20828,
                          "name": "MAX_MODULES",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20502,
                          "src": "7813:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "7784:40:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4c696d6974206f66204d4158204d4f44554c45532069732072656163686564",
                        "id": 20830,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7826:33:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_22dca6cc98b2f56663821f48152354d934949af366941128c128092fc385789b",
                          "typeString": "literal_string \"Limit of MAX MODULES is reached\""
                        },
                        "value": "Limit of MAX MODULES is reached"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_22dca6cc98b2f56663821f48152354d934949af366941128c128092fc385789b",
                          "typeString": "literal_string \"Limit of MAX MODULES is reached\""
                        }
                      ],
                      "id": 20823,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "7776:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7776:84:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20832,
                  "nodeType": "ExpressionStatement",
                  "src": "7776:84:59"
                },
                {
                  "assignments": [
                    20834
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20834,
                      "name": "moduleCost",
                      "nodeType": "VariableDeclaration",
                      "scope": 20902,
                      "src": "7870:18:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 20833,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7870:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20838,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 20835,
                        "name": "moduleFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20812,
                        "src": "7891:13:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                          "typeString": "contract IModuleFactory"
                        }
                      },
                      "id": 20836,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setupCost",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9727,
                      "src": "7891:23:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 20837,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7891:25:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7870:46:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20842,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 20840,
                          "name": "moduleCost",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20834,
                          "src": "7934:10:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 20841,
                          "name": "_maxCost",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20799,
                          "src": "7948:8:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7934:22:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d617820436f737420697320616c776179732062652067726561746572207468616e206d6f64756c6520636f7374",
                        "id": 20843,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7958:48:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_90bdcbd1eae82678b05a05785b42cb078a37b23efb50052519b8f8f8daee9e4f",
                          "typeString": "literal_string \"Max Cost is always be greater than module cost\""
                        },
                        "value": "Max Cost is always be greater than module cost"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_90bdcbd1eae82678b05a05785b42cb078a37b23efb50052519b8f8f8daee9e4f",
                          "typeString": "literal_string \"Max Cost is always be greater than module cost\""
                        }
                      ],
                      "id": 20839,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "7926:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7926:81:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20845,
                  "nodeType": "ExpressionStatement",
                  "src": "7926:81:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 20851,
                            "name": "_moduleFactory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20795,
                            "src": "8083:14:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 20852,
                            "name": "moduleCost",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20834,
                            "src": "8099:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20848,
                                "name": "polyToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 615,
                                "src": "8064:9:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 20847,
                              "name": "ERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22837,
                              "src": "8058:5:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC20_$22837_$",
                                "typeString": "type(contract ERC20)"
                              }
                            },
                            "id": 20849,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8058:16:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 20850,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "approve",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22828,
                          "src": "8058:24:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 20853,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8058:52:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f742061626c6520746f20617070726f766520746865206d6f64756c6520636f7374",
                        "id": 20854,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8112:37:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_11ebda84b718c1e17032ff96739c6d6235706a8e1578218e5e6f4a7e2005eab5",
                          "typeString": "literal_string \"Not able to approve the module cost\""
                        },
                        "value": "Not able to approve the module cost"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_11ebda84b718c1e17032ff96739c6d6235706a8e1578218e5e6f4a7e2005eab5",
                          "typeString": "literal_string \"Not able to approve the module cost\""
                        }
                      ],
                      "id": 20846,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "8050:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8050:100:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20856,
                  "nodeType": "ExpressionStatement",
                  "src": "8050:100:59"
                },
                {
                  "assignments": [
                    20858
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20858,
                      "name": "module",
                      "nodeType": "VariableDeclaration",
                      "scope": 20902,
                      "src": "8210:14:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 20857,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "8210:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20863,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20861,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20797,
                        "src": "8248:5:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 20859,
                        "name": "moduleFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20812,
                        "src": "8227:13:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                          "typeString": "contract IModuleFactory"
                        }
                      },
                      "id": 20860,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "deploy",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9804,
                      "src": "8227:20:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes memory) external returns (address)"
                      }
                    },
                    "id": 20862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8227:27:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8210:44:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 20869,
                            "name": "module",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20858,
                            "src": "8330:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 20870,
                            "name": "_budget",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20801,
                            "src": "8338:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20866,
                                "name": "polyToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 615,
                                "src": "8311:9:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 20865,
                              "name": "ERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22837,
                              "src": "8305:5:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC20_$22837_$",
                                "typeString": "type(contract ERC20)"
                              }
                            },
                            "id": 20867,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8305:16:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 20868,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "approve",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22828,
                          "src": "8305:24:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 20871,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8305:41:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f742061626c6520746f20617070726f76652074686520627564676574",
                        "id": 20872,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8348:32:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_524ae74447c5c157d26c458a70f19c36827828baf5b9a2964a7996292f367fcf",
                          "typeString": "literal_string \"Not able to approve the budget\""
                        },
                        "value": "Not able to approve the budget"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_524ae74447c5c157d26c458a70f19c36827828baf5b9a2964a7996292f367fcf",
                          "typeString": "literal_string \"Not able to approve the budget\""
                        }
                      ],
                      "id": 20864,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "8297:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20873,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8297:84:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20874,
                  "nodeType": "ExpressionStatement",
                  "src": "8297:84:59"
                },
                {
                  "assignments": [
                    20876
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20876,
                      "name": "moduleName",
                      "nodeType": "VariableDeclaration",
                      "scope": 20902,
                      "src": "8433:18:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 20875,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "8433:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20880,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 20877,
                        "name": "moduleFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20812,
                        "src": "8454:13:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                          "typeString": "contract IModuleFactory"
                        }
                      },
                      "id": 20878,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getName",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9814,
                      "src": "8454:21:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                        "typeString": "function () view external returns (bytes32)"
                      }
                    },
                    "id": 20879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8454:23:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8433:44:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 20886,
                            "name": "moduleName",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20876,
                            "src": "8523:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 20887,
                            "name": "module",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20858,
                            "src": "8535:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 20885,
                          "name": "ModuleData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20471,
                          "src": "8512:10:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_ModuleData_$20471_storage_ptr_$",
                            "typeString": "type(struct SecurityToken.ModuleData storage pointer)"
                          }
                        },
                        "id": 20888,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8512:30:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ModuleData_$20471_memory",
                          "typeString": "struct SecurityToken.ModuleData memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_ModuleData_$20471_memory",
                          "typeString": "struct SecurityToken.ModuleData memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 20881,
                          "name": "modules",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20499,
                          "src": "8487:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                            "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                          }
                        },
                        "id": 20883,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 20882,
                          "name": "moduleType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20818,
                          "src": "8495:10:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8487:19:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                        }
                      },
                      "id": 20884,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "8487:24:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_ModuleData_$20471_storage_$returns$_t_uint256_$",
                        "typeString": "function (struct SecurityToken.ModuleData storage ref) returns (uint256)"
                      }
                    },
                    "id": 20889,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8487:56:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20890,
                  "nodeType": "ExpressionStatement",
                  "src": "8487:56:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20892,
                        "name": "moduleType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20818,
                        "src": "8598:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20893,
                        "name": "moduleName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20876,
                        "src": "8610:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20894,
                        "name": "_moduleFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20795,
                        "src": "8622:14:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20895,
                        "name": "module",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20858,
                        "src": "8638:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20896,
                        "name": "moduleCost",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20834,
                        "src": "8646:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20897,
                        "name": "_budget",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20801,
                        "src": "8658:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20898,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "8667:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20891,
                      "name": "LogModuleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20522,
                      "src": "8583:14:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint8,bytes32,address,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 20899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8583:88:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20900,
                  "nodeType": "EmitStatement",
                  "src": "8578:93:59"
                }
              ]
            },
            "documentation": "@notice _addModule handles the attachment (or replacement) of modules for the ST\n@dev  E.G.: On deployment (through the STR) ST gets a TransferManager module attached to it\n@dev to control restrictions on transfers.\n@dev You are allowed to add a new moduleType if:\n@dev - there is no existing module of that type yet added\n@dev - the last member of the module list is replacable\n@param _moduleFactory is the address of the module factory to be added\n@param _data is data packed into bytes used to further configure the module (See STO usage)\n@param _maxCost max amount of POLY willing to pay to module. (WIP)",
            "id": 20902,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_addModule",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20802,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20795,
                  "name": "_moduleFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 20902,
                  "src": "7425:22:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20794,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7425:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20797,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 20902,
                  "src": "7449:11:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 20796,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7449:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20799,
                  "name": "_maxCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 20902,
                  "src": "7462:16:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20798,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7462:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20801,
                  "name": "_budget",
                  "nodeType": "VariableDeclaration",
                  "scope": 20902,
                  "src": "7480:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20800,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7480:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7424:72:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 20803,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7506:0:59"
            },
            "scope": 22357,
            "src": "7405:1273:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20975,
              "nodeType": "Block",
              "src": "8989:649:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20917,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 20912,
                          "name": "_moduleIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20906,
                          "src": "9007:12:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 20913,
                              "name": "modules",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20499,
                              "src": "9022:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                              }
                            },
                            "id": 20915,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 20914,
                              "name": "_moduleType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20904,
                              "src": "9030:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9022:20:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                              "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                            }
                          },
                          "id": 20916,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9022:27:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9007:42:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6f64756c6520696e64657820646f65736e277420657869737420617320706572207468652063686f6f73656e206d6f64756c652074797065",
                        "id": 20918,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9059:59:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2c2b71fb37297b532fe6ad2499a7624af6231a453bb6b813ec9dd531487fa7d5",
                          "typeString": "literal_string \"Module index doesn't exist as per the choosen module type\""
                        },
                        "value": "Module index doesn't exist as per the choosen module type"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2c2b71fb37297b532fe6ad2499a7624af6231a453bb6b813ec9dd531487fa7d5",
                          "typeString": "literal_string \"Module index doesn't exist as per the choosen module type\""
                        }
                      ],
                      "id": 20911,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "8999:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20919,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8999:120:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20920,
                  "nodeType": "ExpressionStatement",
                  "src": "8999:120:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 20931,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 20922,
                                "name": "modules",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20499,
                                "src": "9137:7:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                  "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                }
                              },
                              "id": 20924,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 20923,
                                "name": "_moduleType",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20904,
                                "src": "9145:11:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "9137:20:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                              }
                            },
                            "id": 20926,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 20925,
                              "name": "_moduleIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20906,
                              "src": "9158:12:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9137:34:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                              "typeString": "struct SecurityToken.ModuleData storage ref"
                            }
                          },
                          "id": 20927,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "moduleAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 20470,
                          "src": "9137:48:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 20929,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9197:1:59",
                              "subdenomination": null,
                              "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": 20928,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9189:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 20930,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9189:10:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "9137:62:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6f64756c6520636f6e747261637420616464726573732073686f756c64206e6f74206265203078",
                        "id": 20932,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9209:42:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2079f97d089efa5c6ae574cb5c749cfd9f6fe18b9702363bcb14091aec9a3ff9",
                          "typeString": "literal_string \"Module contract address should not be 0x\""
                        },
                        "value": "Module contract address should not be 0x"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2079f97d089efa5c6ae574cb5c749cfd9f6fe18b9702363bcb14091aec9a3ff9",
                          "typeString": "literal_string \"Module contract address should not be 0x\""
                        }
                      ],
                      "id": 20921,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "9129:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20933,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9129:123:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20934,
                  "nodeType": "ExpressionStatement",
                  "src": "9129:123:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20936,
                        "name": "_moduleType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20904,
                        "src": "9393:11:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 20937,
                              "name": "modules",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20499,
                              "src": "9406:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                              }
                            },
                            "id": 20939,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 20938,
                              "name": "_moduleType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20904,
                              "src": "9414:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9406:20:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                              "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                            }
                          },
                          "id": 20941,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20940,
                            "name": "_moduleIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20906,
                            "src": "9427:12:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9406:34:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                            "typeString": "struct SecurityToken.ModuleData storage ref"
                          }
                        },
                        "id": 20942,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "moduleAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 20470,
                        "src": "9406:48:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20943,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "9456:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20935,
                      "name": "LogModuleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20542,
                      "src": "9376:16:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (uint8,address,uint256)"
                      }
                    },
                    "id": 20944,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9376:84:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20945,
                  "nodeType": "EmitStatement",
                  "src": "9371:89:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20961,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 20946,
                          "name": "modules",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20499,
                          "src": "9470:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                            "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                          }
                        },
                        "id": 20949,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 20947,
                          "name": "_moduleType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20904,
                          "src": "9478:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9470:20:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                        }
                      },
                      "id": 20950,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 20948,
                        "name": "_moduleIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20906,
                        "src": "9491:12:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9470:34:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                        "typeString": "struct SecurityToken.ModuleData storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 20951,
                          "name": "modules",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20499,
                          "src": "9507:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                            "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                          }
                        },
                        "id": 20953,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 20952,
                          "name": "_moduleType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20904,
                          "src": "9515:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9507:20:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                        }
                      },
                      "id": 20960,
                      "indexExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20959,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 20954,
                              "name": "modules",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20499,
                              "src": "9528:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                              }
                            },
                            "id": 20956,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 20955,
                              "name": "_moduleType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20904,
                              "src": "9536:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9528:20:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                              "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                            }
                          },
                          "id": 20957,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9528:27:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 20958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9558:1:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "9528:31:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9507:53:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                        "typeString": "struct SecurityToken.ModuleData storage ref"
                      }
                    },
                    "src": "9470:90:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                      "typeString": "struct SecurityToken.ModuleData storage ref"
                    }
                  },
                  "id": 20962,
                  "nodeType": "ExpressionStatement",
                  "src": "9470:90:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20973,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 20963,
                          "name": "modules",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20499,
                          "src": "9570:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                            "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                          }
                        },
                        "id": 20965,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 20964,
                          "name": "_moduleType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20904,
                          "src": "9578:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9570:20:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                        }
                      },
                      "id": 20966,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "9570:27:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 20972,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 20967,
                            "name": "modules",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20499,
                            "src": "9600:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                              "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                            }
                          },
                          "id": 20969,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20968,
                            "name": "_moduleType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20904,
                            "src": "9608:11:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9600:20:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                            "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                          }
                        },
                        "id": 20970,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9600:27:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 20971,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9630:1:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "9600:31:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9570:61:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20974,
                  "nodeType": "ExpressionStatement",
                  "src": "9570:61:59"
                }
              ]
            },
            "documentation": "@notice Removes a module attached to the SecurityToken\n@param _moduleType is which type of module we are trying to remove\n@param _moduleIndex is the index of the module within the chosen type",
            "id": 20976,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 20909,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20908,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "8979:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8979:9:59"
              }
            ],
            "name": "removeModule",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20907,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20904,
                  "name": "_moduleType",
                  "nodeType": "VariableDeclaration",
                  "scope": 20976,
                  "src": "8931:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 20903,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "8931:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20906,
                  "name": "_moduleIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 20976,
                  "src": "8950:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 20905,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "8950:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8930:39:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 20910,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8989:0:59"
            },
            "scope": 22357,
            "src": "8909:729:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 21016,
              "nodeType": "Block",
              "src": "10003:277:59",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20992,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 20987,
                          "name": "modules",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20499,
                          "src": "10017:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                            "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                          }
                        },
                        "id": 20989,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 20988,
                          "name": "_moduleType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20978,
                          "src": "10025:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10017:20:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                        }
                      },
                      "id": 20990,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "10017:27:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 20991,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10047:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "10017:31:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 21014,
                    "nodeType": "Block",
                    "src": "10225:48:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "hexValue": "",
                              "id": 21008,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10247:2:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 21010,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10259:1:59",
                                  "subdenomination": null,
                                  "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": 21009,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "10251:7:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 21011,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10251:10:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "id": 21012,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "10246:16:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_$_t_address_$",
                            "typeString": "tuple(literal_string \"\",address)"
                          }
                        },
                        "functionReturnParameters": 20986,
                        "id": 21013,
                        "nodeType": "Return",
                        "src": "10239:23:59"
                      }
                    ]
                  },
                  "id": 21015,
                  "nodeType": "IfStatement",
                  "src": "10013:260:59",
                  "trueBody": {
                    "id": 21007,
                    "nodeType": "Block",
                    "src": "10050:169:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20993,
                                    "name": "modules",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20499,
                                    "src": "10089:7:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                      "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                    }
                                  },
                                  "id": 20995,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 20994,
                                    "name": "_moduleType",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20978,
                                    "src": "10097:11:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "10089:20:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                    "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                  }
                                },
                                "id": 20997,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 20996,
                                  "name": "_moduleIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20980,
                                  "src": "10110:12:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "10089:34:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                                  "typeString": "struct SecurityToken.ModuleData storage ref"
                                }
                              },
                              "id": 20998,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "name",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 20468,
                              "src": "10089:39:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20999,
                                    "name": "modules",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20499,
                                    "src": "10146:7:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                      "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                    }
                                  },
                                  "id": 21001,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 21000,
                                    "name": "_moduleType",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20978,
                                    "src": "10154:11:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "10146:20:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                    "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                  }
                                },
                                "id": 21003,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 21002,
                                  "name": "_moduleIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20980,
                                  "src": "10167:12:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "10146:34:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                                  "typeString": "struct SecurityToken.ModuleData storage ref"
                                }
                              },
                              "id": 21004,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "moduleAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 20470,
                              "src": "10146:48:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "id": 21005,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "10071:137:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bytes32_$_t_address_$",
                            "typeString": "tuple(bytes32,address)"
                          }
                        },
                        "functionReturnParameters": 20986,
                        "id": 21006,
                        "nodeType": "Return",
                        "src": "10064:144:59"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Returns module list for a module type\n@param _moduleType is which type of module we are trying to get\n@param _moduleIndex is the index of the module within the chosen type\n@return bytes32\n@return address",
            "id": 21017,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getModule",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20981,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20978,
                  "name": "_moduleType",
                  "nodeType": "VariableDeclaration",
                  "scope": 21017,
                  "src": "9926:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 20977,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "9926:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20980,
                  "name": "_moduleIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 21017,
                  "src": "9945:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20979,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "9945:4:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9925:38:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 20986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20983,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 21017,
                  "src": "9985:7:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 20982,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9985:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20985,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 21017,
                  "src": "9994:7:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20984,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9994:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9984:18:59"
            },
            "scope": 22357,
            "src": "9907:373:59",
            "stateMutability": "view",
            "superFunction": 10121,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21088,
              "nodeType": "Block",
              "src": "10665:480:59",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 21028,
                          "name": "modules",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20499,
                          "src": "10679:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                            "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                          }
                        },
                        "id": 21030,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 21029,
                          "name": "_moduleType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21019,
                          "src": "10687:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10679:20:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                        }
                      },
                      "id": 21031,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "10679:27:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 21032,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10709:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "10679:31:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 21086,
                    "nodeType": "Block",
                    "src": "11091:48:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "hexValue": "",
                              "id": 21080,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11113:2:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 21082,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11125:1:59",
                                  "subdenomination": null,
                                  "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": 21081,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "11117:7:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 21083,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11117:10:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "id": 21084,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "11112:16:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_$_t_address_$",
                            "typeString": "tuple(literal_string \"\",address)"
                          }
                        },
                        "functionReturnParameters": 21027,
                        "id": 21085,
                        "nodeType": "Return",
                        "src": "11105:23:59"
                      }
                    ]
                  },
                  "id": 21087,
                  "nodeType": "IfStatement",
                  "src": "10675:464:59",
                  "trueBody": {
                    "id": 21079,
                    "nodeType": "Block",
                    "src": "10712:373:59",
                    "statements": [
                      {
                        "body": {
                          "id": 21071,
                          "nodeType": "Block",
                          "src": "10784:254:59",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 21054,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 21047,
                                        "name": "modules",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20499,
                                        "src": "10806:7:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                          "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                        }
                                      },
                                      "id": 21049,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 21048,
                                        "name": "_moduleType",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 21019,
                                        "src": "10814:11:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "10806:20:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                        "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                      }
                                    },
                                    "id": 21051,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 21050,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 21035,
                                      "src": "10827:1:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10806:23:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                                      "typeString": "struct SecurityToken.ModuleData storage ref"
                                    }
                                  },
                                  "id": 21052,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "name",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 20468,
                                  "src": "10806:28:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 21053,
                                  "name": "_name",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21021,
                                  "src": "10838:5:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "10806:37:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 21070,
                              "nodeType": "IfStatement",
                              "src": "10802:222:59",
                              "trueBody": {
                                "id": 21069,
                                "nodeType": "Block",
                                "src": "10845:179:59",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 21055,
                                                "name": "modules",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20499,
                                                "src": "10896:7:59",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                                  "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                                }
                                              },
                                              "id": 21057,
                                              "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 21056,
                                                "name": "_moduleType",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 21019,
                                                "src": "10904:11:59",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "10896:20:59",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                                "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                              }
                                            },
                                            "id": 21059,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 21058,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 21035,
                                              "src": "10917:1:59",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "10896:23:59",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                                              "typeString": "struct SecurityToken.ModuleData storage ref"
                                            }
                                          },
                                          "id": 21060,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "name",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 20468,
                                          "src": "10896:28:59",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 21061,
                                                "name": "modules",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20499,
                                                "src": "10948:7:59",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                                  "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                                }
                                              },
                                              "id": 21063,
                                              "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 21062,
                                                "name": "_moduleType",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 21019,
                                                "src": "10956:11:59",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "10948:20:59",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                                "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                              }
                                            },
                                            "id": 21065,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 21064,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 21035,
                                              "src": "10969:1:59",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "10948:23:59",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                                              "typeString": "struct SecurityToken.ModuleData storage ref"
                                            }
                                          },
                                          "id": 21066,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "moduleAddress",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 20470,
                                          "src": "10948:37:59",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "id": 21067,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "10872:133:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_bytes32_$_t_address_$",
                                        "typeString": "tuple(bytes32,address)"
                                      }
                                    },
                                    "functionReturnParameters": 21027,
                                    "id": 21068,
                                    "nodeType": "Return",
                                    "src": "10865:140:59"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 21043,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 21038,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21035,
                            "src": "10746:1:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 21039,
                                "name": "modules",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20499,
                                "src": "10750:7:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                  "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                }
                              },
                              "id": 21041,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 21040,
                                "name": "_moduleType",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21019,
                                "src": "10758:11:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10750:20:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                              }
                            },
                            "id": 21042,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "10750:27:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10746:31:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 21072,
                        "initializationExpression": {
                          "assignments": [
                            21035
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 21035,
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 21089,
                              "src": "10731:9:59",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 21034,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "10731:7:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 21037,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 21036,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10743:1:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "10731:13:59"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 21045,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "10779:3:59",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 21044,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21035,
                              "src": "10779:1:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 21046,
                          "nodeType": "ExpressionStatement",
                          "src": "10779:3:59"
                        },
                        "nodeType": "ForStatement",
                        "src": "10726:312:59"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "hexValue": "",
                              "id": 21073,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11059:2:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 21075,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11071:1:59",
                                  "subdenomination": null,
                                  "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": 21074,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "11063:7:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 21076,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11063:10:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "id": 21077,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "11058:16:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_$_t_address_$",
                            "typeString": "tuple(literal_string \"\",address)"
                          }
                        },
                        "functionReturnParameters": 21027,
                        "id": 21078,
                        "nodeType": "Return",
                        "src": "11051:23:59"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice returns module list for a module name - will return first match\n@param _moduleType is which type of module we are trying to get\n@param _name is the name of the module within the chosen type\n@return bytes32\n@return address",
            "id": 21089,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getModuleByName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21022,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21019,
                  "name": "_moduleType",
                  "nodeType": "VariableDeclaration",
                  "scope": 21089,
                  "src": "10592:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 21018,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "10592:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21021,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 21089,
                  "src": "10611:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21020,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10611:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10591:34:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21027,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21024,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 21089,
                  "src": "10647:7:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21023,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10647:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21026,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 21089,
                  "src": "10656:7:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21025,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10656:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10646:18:59"
            },
            "scope": 22357,
            "src": "10567:578:59",
            "stateMutability": "view",
            "superFunction": 10132,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21107,
              "nodeType": "Block",
              "src": "11460:92:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21101,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22582,
                            "src": "11504:5:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21102,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21091,
                            "src": "11511:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 21098,
                                "name": "polyToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 615,
                                "src": "11484:9:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 21097,
                              "name": "ERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22837,
                              "src": "11478:5:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC20_$22837_$",
                                "typeString": "type(contract ERC20)"
                              }
                            },
                            "id": 21099,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11478:16:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 21100,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22860,
                          "src": "11478:25:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 21103,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11478:41:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e2d73756666696369656e742062616c616e6365",
                        "id": 21104,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11521:23:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_30a1bb60a0c6caf3e6f6f7b8691b64b76aa0d2ff7478fc897cfd6f5a122b1b2b",
                          "typeString": "literal_string \"In-sufficient balance\""
                        },
                        "value": "In-sufficient balance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_30a1bb60a0c6caf3e6f6f7b8691b64b76aa0d2ff7478fc897cfd6f5a122b1b2b",
                          "typeString": "literal_string \"In-sufficient balance\""
                        }
                      ],
                      "id": 21096,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "11470:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21105,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11470:75:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21106,
                  "nodeType": "ExpressionStatement",
                  "src": "11470:75:59"
                }
              ]
            },
            "documentation": "@notice allows the owner to withdraw unspent POLY stored by them on the ST.\n@dev Owner can transfer POLY to the ST which will be used to pay for modules that require a POLY fee.\n@param _amount amount of POLY to withdraw",
            "id": 21108,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 21094,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21093,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "11450:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11450:9:59"
              }
            ],
            "name": "withdrawPoly",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21092,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21091,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 21108,
                  "src": "11426:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21090,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11426:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11425:17:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21095,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11460:0:59"
            },
            "scope": 22357,
            "src": "11404:148:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21208,
              "nodeType": "Block",
              "src": "11852:835:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 21122,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 21120,
                          "name": "_moduleType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21110,
                          "src": "11870:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 21121,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11885:1:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "11870:16:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6f64756c6520747970652063616e6e6f74206265207a65726f",
                        "id": 21123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11888:28:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_22e5fe8e01473d297e25a2a1aee7f758126121ff74d7fafb2b5bccf21dbd9682",
                          "typeString": "literal_string \"Module type cannot be zero\""
                        },
                        "value": "Module type cannot be zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_22e5fe8e01473d297e25a2a1aee7f758126121ff74d7fafb2b5bccf21dbd9682",
                          "typeString": "literal_string \"Module type cannot be zero\""
                        }
                      ],
                      "id": 21119,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "11862:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11862:55:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21125,
                  "nodeType": "ExpressionStatement",
                  "src": "11862:55:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 21132,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 21127,
                          "name": "_moduleIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21112,
                          "src": "11935:12:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 21128,
                              "name": "modules",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20499,
                              "src": "11950:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                              }
                            },
                            "id": 21130,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21129,
                              "name": "_moduleType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21110,
                              "src": "11958:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11950:20:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                              "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                            }
                          },
                          "id": 21131,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "11950:27:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "11935:42:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e636f727272656374206d6f64756c6520696e646578",
                        "id": 21133,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11979:25:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_246e30dbb9a00692967b4085cbb5fa5d23ee41ba746d906437cdc6324b067ad6",
                          "typeString": "literal_string \"Incorrrect module index\""
                        },
                        "value": "Incorrrect module index"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_246e30dbb9a00692967b4085cbb5fa5d23ee41ba746d906437cdc6324b067ad6",
                          "typeString": "literal_string \"Incorrrect module index\""
                        }
                      ],
                      "id": 21126,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "11927:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21134,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11927:78:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21135,
                  "nodeType": "ExpressionStatement",
                  "src": "11927:78:59"
                },
                {
                  "assignments": [
                    21137
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21137,
                      "name": "_currentAllowance",
                      "nodeType": "VariableDeclaration",
                      "scope": 21209,
                      "src": "12015:25:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 21136,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12015:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21152,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21143,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23196,
                            "src": "12079:4:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_SecurityToken_$22357",
                              "typeString": "contract SecurityToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_SecurityToken_$22357",
                              "typeString": "contract SecurityToken"
                            }
                          ],
                          "id": 21142,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12071:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 21144,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12071:13:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 21145,
                              "name": "modules",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20499,
                              "src": "12086:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                              }
                            },
                            "id": 21147,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21146,
                              "name": "_moduleType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21110,
                              "src": "12094:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "12086:20:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                              "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                            }
                          },
                          "id": 21149,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 21148,
                            "name": "_moduleIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21112,
                            "src": "12107:12:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12086:34:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                            "typeString": "struct SecurityToken.ModuleData storage ref"
                          }
                        },
                        "id": 21150,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "moduleAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 20470,
                        "src": "12086:48:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21139,
                            "name": "polyToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 615,
                            "src": "12050:9:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 21138,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9552,
                          "src": "12043:6:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$9552_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 21140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12043:17:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$9552",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 21141,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "allowance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22808,
                      "src": "12043:27:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address,address) view external returns (uint256)"
                      }
                    },
                    "id": 21151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12043:92:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12015:120:59"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21155,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 21153,
                      "name": "_budget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21114,
                      "src": "12149:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 21154,
                      "name": "_currentAllowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21137,
                      "src": "12159:17:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12149:27:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 21195,
                    "nodeType": "Block",
                    "src": "12378:194:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 21181,
                                        "name": "modules",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20499,
                                        "src": "12435:7:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                          "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                        }
                                      },
                                      "id": 21183,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 21182,
                                        "name": "_moduleType",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 21110,
                                        "src": "12443:11:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "12435:20:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                        "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                      }
                                    },
                                    "id": 21185,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 21184,
                                      "name": "_moduleIndex",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 21112,
                                      "src": "12456:12:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "12435:34:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                                      "typeString": "struct SecurityToken.ModuleData storage ref"
                                    }
                                  },
                                  "id": 21186,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "moduleAddress",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 20470,
                                  "src": "12435:48:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 21189,
                                      "name": "_currentAllowance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 21137,
                                      "src": "12497:17:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 21187,
                                      "name": "_budget",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 21114,
                                      "src": "12485:7:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 21188,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sub",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22553,
                                    "src": "12485:11:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 21190,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "12485:30:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 21178,
                                      "name": "polyToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 615,
                                      "src": "12407:9:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 21177,
                                    "name": "IERC20",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9552,
                                    "src": "12400:6:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IERC20_$9552_$",
                                      "typeString": "type(contract IERC20)"
                                    }
                                  },
                                  "id": 21179,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "12400:17:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$9552",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 21180,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "increaseApproval",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9551,
                                "src": "12400:34:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) external returns (bool)"
                                }
                              },
                              "id": 21191,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12400:116:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "496e73756666696369656e742062616c616e636520746f20696e637265617365417070726f76616c",
                              "id": 21192,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12518:42:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3b00cfda6eac0d5cac672a125e339ba8d9ee08603d0d23f305665757678226dc",
                                "typeString": "literal_string \"Insufficient balance to increaseApproval\""
                              },
                              "value": "Insufficient balance to increaseApproval"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3b00cfda6eac0d5cac672a125e339ba8d9ee08603d0d23f305665757678226dc",
                                "typeString": "literal_string \"Insufficient balance to increaseApproval\""
                              }
                            ],
                            "id": 21176,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              23134,
                              23135
                            ],
                            "referencedDeclaration": 23135,
                            "src": "12392:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 21193,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12392:169:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 21194,
                        "nodeType": "ExpressionStatement",
                        "src": "12392:169:59"
                      }
                    ]
                  },
                  "id": 21196,
                  "nodeType": "IfStatement",
                  "src": "12145:427:59",
                  "trueBody": {
                    "id": 21175,
                    "nodeType": "Block",
                    "src": "12178:194:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 21161,
                                        "name": "modules",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20499,
                                        "src": "12235:7:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                          "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                        }
                                      },
                                      "id": 21163,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 21162,
                                        "name": "_moduleType",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 21110,
                                        "src": "12243:11:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "12235:20:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                        "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                      }
                                    },
                                    "id": 21165,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 21164,
                                      "name": "_moduleIndex",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 21112,
                                      "src": "12256:12:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "12235:34:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                                      "typeString": "struct SecurityToken.ModuleData storage ref"
                                    }
                                  },
                                  "id": 21166,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "moduleAddress",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 20470,
                                  "src": "12235:48:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 21169,
                                      "name": "_budget",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 21114,
                                      "src": "12307:7:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 21167,
                                      "name": "_currentAllowance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 21137,
                                      "src": "12285:17:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 21168,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sub",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22553,
                                    "src": "12285:21:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 21170,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "12285:30:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 21158,
                                      "name": "polyToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 615,
                                      "src": "12207:9:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 21157,
                                    "name": "IERC20",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9552,
                                    "src": "12200:6:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IERC20_$9552_$",
                                      "typeString": "type(contract IERC20)"
                                    }
                                  },
                                  "id": 21159,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "12200:17:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$9552",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 21160,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "decreaseApproval",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9542,
                                "src": "12200:34:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) external returns (bool)"
                                }
                              },
                              "id": 21171,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12200:116:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "496e73756666696369656e742062616c616e636520746f206465637265617365417070726f76616c",
                              "id": 21172,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12318:42:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f1a242750d5ca62923d53471e92c457415e83478e55fbb541dc14993793b903d",
                                "typeString": "literal_string \"Insufficient balance to decreaseApproval\""
                              },
                              "value": "Insufficient balance to decreaseApproval"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f1a242750d5ca62923d53471e92c457415e83478e55fbb541dc14993793b903d",
                                "typeString": "literal_string \"Insufficient balance to decreaseApproval\""
                              }
                            ],
                            "id": 21156,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              23134,
                              23135
                            ],
                            "referencedDeclaration": 23135,
                            "src": "12192:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 21173,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12192:169:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 21174,
                        "nodeType": "ExpressionStatement",
                        "src": "12192:169:59"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21198,
                        "name": "_moduleType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21110,
                        "src": "12609:11:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 21199,
                              "name": "modules",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20499,
                              "src": "12622:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                              }
                            },
                            "id": 21201,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21200,
                              "name": "_moduleType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21110,
                              "src": "12630:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "12622:20:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                              "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                            }
                          },
                          "id": 21203,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 21202,
                            "name": "_moduleIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21112,
                            "src": "12643:12:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12622:34:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                            "typeString": "struct SecurityToken.ModuleData storage ref"
                          }
                        },
                        "id": 21204,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "moduleAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 20470,
                        "src": "12622:48:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21205,
                        "name": "_budget",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21114,
                        "src": "12672:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21197,
                      "name": "LogModuleBudgetChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20550,
                      "src": "12586:22:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (uint8,address,uint256)"
                      }
                    },
                    "id": 21206,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12586:94:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21207,
                  "nodeType": "EmitStatement",
                  "src": "12581:99:59"
                }
              ]
            },
            "documentation": "@notice allows owner to approve more POLY to one of the modules\n@param _moduleType module type\n@param _moduleIndex module index\n@param _budget new budget",
            "id": 21209,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 21117,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21116,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "11842:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11842:9:59"
              }
            ],
            "name": "changeModuleBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21115,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21110,
                  "name": "_moduleType",
                  "nodeType": "VariableDeclaration",
                  "scope": 21209,
                  "src": "11779:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 21109,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "11779:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21112,
                  "name": "_moduleIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 21209,
                  "src": "11798:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 21111,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "11798:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21114,
                  "name": "_budget",
                  "nodeType": "VariableDeclaration",
                  "scope": 21209,
                  "src": "11818:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21113,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11818:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11778:56:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21118,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11852:0:59"
            },
            "scope": 22357,
            "src": "11751:936:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21225,
              "nodeType": "Block",
              "src": "12867:116:59",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21217,
                        "name": "tokenDetails",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10010,
                        "src": "12904:12:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21218,
                        "name": "_newTokenDetails",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21211,
                        "src": "12918:16:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 21216,
                      "name": "LogUpdateTokenDetails",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20528,
                      "src": "12882:21:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory,string memory)"
                      }
                    },
                    "id": 21219,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12882:53:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21220,
                  "nodeType": "EmitStatement",
                  "src": "12877:58:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21223,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21221,
                      "name": "tokenDetails",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10010,
                      "src": "12945:12:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21222,
                      "name": "_newTokenDetails",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21211,
                      "src": "12960:16:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "12945:31:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 21224,
                  "nodeType": "ExpressionStatement",
                  "src": "12945:31:59"
                }
              ]
            },
            "documentation": "@notice change the tokenDetails\n@param _newTokenDetails New token details",
            "id": 21226,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 21214,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21213,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "12857:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12857:9:59"
              }
            ],
            "name": "updateTokenDetails",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21212,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21211,
                  "name": "_newTokenDetails",
                  "nodeType": "VariableDeclaration",
                  "scope": 21226,
                  "src": "12825:23:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 21210,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "12825:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12824:25:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21215,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12867:0:59"
            },
            "scope": 22357,
            "src": "12797:186:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21249,
              "nodeType": "Block",
              "src": "13182:170:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 21236,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 21234,
                          "name": "_granularity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21228,
                          "src": "13200:12:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 21235,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13216:1:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "13200:17:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4772616e756c61726974792063616e206e6f742062652030",
                        "id": 21237,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13219:26:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2d4731cbc00328ab390123e785f8142f724cfe715c557f1d89e769da378906ce",
                          "typeString": "literal_string \"Granularity can not be 0\""
                        },
                        "value": "Granularity can not be 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2d4731cbc00328ab390123e785f8142f724cfe715c557f1d89e769da378906ce",
                          "typeString": "literal_string \"Granularity can not be 0\""
                        }
                      ],
                      "id": 21233,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "13192:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21238,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13192:54:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21239,
                  "nodeType": "ExpressionStatement",
                  "src": "13192:54:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21241,
                        "name": "granularity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10092,
                        "src": "13283:11:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21242,
                        "name": "_granularity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21228,
                        "src": "13296:12:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21240,
                      "name": "LogGranularityChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20534,
                      "src": "13261:21:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 21243,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13261:48:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21244,
                  "nodeType": "EmitStatement",
                  "src": "13256:53:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21247,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21245,
                      "name": "granularity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10092,
                      "src": "13319:11:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21246,
                      "name": "_granularity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21228,
                      "src": "13333:12:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13319:26:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21248,
                  "nodeType": "ExpressionStatement",
                  "src": "13319:26:59"
                }
              ]
            },
            "documentation": "@notice allows owner to change token granularity\n@param _granularity granularity level of the token",
            "id": 21250,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 21231,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21230,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "13172:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13172:9:59"
              }
            ],
            "name": "changeGranularity",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21228,
                  "name": "_granularity",
                  "nodeType": "VariableDeclaration",
                  "scope": 21250,
                  "src": "13143:20:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21227,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13143:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13142:22:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21232,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13182:0:59"
            },
            "scope": 22357,
            "src": "13116:236:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21332,
              "nodeType": "Block",
              "src": "13635:603:59",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 21267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 21261,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 21259,
                            "name": "_value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21256,
                            "src": "13650:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 21260,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13660:1:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "13650:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 21262,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "13649:13:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 21265,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 21263,
                            "name": "_from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21252,
                            "src": "13667:5:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 21264,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21254,
                            "src": "13676:3:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "13667:12:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 21266,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "13666:14:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "13649:31:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21270,
                  "nodeType": "IfStatement",
                  "src": "13645:68:59",
                  "trueBody": {
                    "id": 21269,
                    "nodeType": "Block",
                    "src": "13682:31:59",
                    "statements": [
                      {
                        "expression": null,
                        "functionReturnParameters": 21258,
                        "id": 21268,
                        "nodeType": "Return",
                        "src": "13696:7:59"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 21283,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 21275,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 21272,
                                "name": "_to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21254,
                                "src": "13793:3:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 21271,
                              "name": "balanceOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                22759
                              ],
                              "referencedDeclaration": 22759,
                              "src": "13783:9:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view returns (uint256)"
                              }
                            },
                            "id": 21273,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13783:14:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 21274,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13801:1:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "13783:19:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 21276,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "13782:21:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 21281,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 21277,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21254,
                            "src": "13808:3:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 21279,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13823:1:59",
                                "subdenomination": null,
                                "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": 21278,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "13815:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 21280,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13815:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "13808:17:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 21282,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "13807:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "13782:44:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21292,
                  "nodeType": "IfStatement",
                  "src": "13778:111:59",
                  "trueBody": {
                    "id": 21291,
                    "nodeType": "Block",
                    "src": "13828:61:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 21289,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 21284,
                            "name": "investorCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10096,
                            "src": "13842:13:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 21287,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13876:1:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 21285,
                                "name": "investorCount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10096,
                                "src": "13858:13:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 21286,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22577,
                              "src": "13858:17:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 21288,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13858:20:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13842:36:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 21290,
                        "nodeType": "ExpressionStatement",
                        "src": "13842:36:59"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 21293,
                      "name": "_value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21256,
                      "src": "13964:6:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 21295,
                          "name": "_from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21252,
                          "src": "13984:5:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 21294,
                        "name": "balanceOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          22759
                        ],
                        "referencedDeclaration": 22759,
                        "src": "13974:9:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address) view returns (uint256)"
                        }
                      },
                      "id": 21296,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13974:16:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13964:26:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21306,
                  "nodeType": "IfStatement",
                  "src": "13960:93:59",
                  "trueBody": {
                    "id": 21305,
                    "nodeType": "Block",
                    "src": "13992:61:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 21303,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 21298,
                            "name": "investorCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10096,
                            "src": "14006:13:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 21301,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14040:1:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 21299,
                                "name": "investorCount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10096,
                                "src": "14022:13:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 21300,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22553,
                              "src": "14022:17:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 21302,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14022:20:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14006:36:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 21304,
                        "nodeType": "ExpressionStatement",
                        "src": "14006:36:59"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 21317,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 21310,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "14102:20:59",
                      "subExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 21307,
                          "name": "investorListed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20506,
                          "src": "14103:14:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 21309,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 21308,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21254,
                          "src": "14118:3:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14103:19:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 21315,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 21311,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21254,
                            "src": "14127:3:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 21313,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14142:1:59",
                                "subdenomination": null,
                                "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": 21312,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "14134:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 21314,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14134:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "14127:17:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 21316,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "14126:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "14102:43:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21331,
                  "nodeType": "IfStatement",
                  "src": "14098:133:59",
                  "trueBody": {
                    "id": 21330,
                    "nodeType": "Block",
                    "src": "14147:84:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 21321,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21254,
                              "src": "14176:3:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 21318,
                              "name": "investors",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10099,
                              "src": "14161:9:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                "typeString": "address[] storage ref"
                              }
                            },
                            "id": 21320,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "14161:14:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) returns (uint256)"
                            }
                          },
                          "id": 21322,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14161:19:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 21323,
                        "nodeType": "ExpressionStatement",
                        "src": "14161:19:59"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 21328,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 21324,
                              "name": "investorListed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20506,
                              "src": "14194:14:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 21326,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21325,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21254,
                              "src": "14209:3:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "14194:19:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 21327,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14216:4:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "14194:26:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 21329,
                        "nodeType": "ExpressionStatement",
                        "src": "14194:26:59"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice keeps track of the number of non-zero token holders\n@param _from sender of transfer\n@param _to receiver of transfer\n@param _value value of transfer",
            "id": 21333,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "adjustInvestorCount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21257,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21252,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 21333,
                  "src": "13582:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21251,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13582:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21254,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 21333,
                  "src": "13597:11:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21253,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13597:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21256,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 21333,
                  "src": "13610:14:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21255,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13610:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13581:44:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21258,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13635:0:59"
            },
            "scope": 22357,
            "src": "13553:685:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21402,
              "nodeType": "Block",
              "src": "14676:356:59",
              "statements": [
                {
                  "body": {
                    "id": 21400,
                    "nodeType": "Block",
                    "src": "14771:255:59",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 21373,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 21363,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 21360,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21343,
                                  "src": "14790:1:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 21361,
                                    "name": "investors",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10099,
                                    "src": "14794:9:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                      "typeString": "address[] storage ref"
                                    }
                                  },
                                  "id": 21362,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "14794:16:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "14790:20:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 21364,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "14789:22:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 21371,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 21366,
                                        "name": "investors",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10099,
                                        "src": "14826:9:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                          "typeString": "address[] storage ref"
                                        }
                                      },
                                      "id": 21368,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 21367,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 21343,
                                        "src": "14836:1:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "14826:12:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 21365,
                                    "name": "balanceOf",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      22759
                                    ],
                                    "referencedDeclaration": 22759,
                                    "src": "14816:9:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                      "typeString": "function (address) view returns (uint256)"
                                    }
                                  },
                                  "id": 21369,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14816:23:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 21370,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "14843:1:59",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "14816:28:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 21372,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "14815:30:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "14789:56:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 21399,
                        "nodeType": "IfStatement",
                        "src": "14785:231:59",
                        "trueBody": {
                          "id": 21398,
                          "nodeType": "Block",
                          "src": "14847:169:59",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 21380,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 21374,
                                    "name": "investorListed",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20506,
                                    "src": "14865:14:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                      "typeString": "mapping(address => bool)"
                                    }
                                  },
                                  "id": 21378,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 21375,
                                      "name": "investors",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10099,
                                      "src": "14880:9:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 21377,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 21376,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 21343,
                                      "src": "14890:1:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "14880:12:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "14865:28:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "66616c7365",
                                  "id": 21379,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "14896:5:59",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "false"
                                },
                                "src": "14865:36:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 21381,
                              "nodeType": "ExpressionStatement",
                              "src": "14865:36:59"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 21391,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 21382,
                                    "name": "investors",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10099,
                                    "src": "14919:9:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                      "typeString": "address[] storage ref"
                                    }
                                  },
                                  "id": 21384,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 21383,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 21343,
                                    "src": "14929:1:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "14919:12:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 21385,
                                    "name": "investors",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10099,
                                    "src": "14934:9:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                      "typeString": "address[] storage ref"
                                    }
                                  },
                                  "id": 21390,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 21389,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 21386,
                                        "name": "investors",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10099,
                                        "src": "14944:9:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                          "typeString": "address[] storage ref"
                                        }
                                      },
                                      "id": 21387,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "length",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "14944:16:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 21388,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "14963:1:59",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "14944:20:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "14934:31:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "14919:46:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 21392,
                              "nodeType": "ExpressionStatement",
                              "src": "14919:46:59"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 21396,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "--",
                                "prefix": false,
                                "src": "14983:18:59",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 21393,
                                    "name": "investors",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10099,
                                    "src": "14983:9:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                      "typeString": "address[] storage ref"
                                    }
                                  },
                                  "id": 21395,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "14983:16:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 21397,
                              "nodeType": "ExpressionStatement",
                              "src": "14983:18:59"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21356,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 21346,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21343,
                      "src": "14711:1:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 21351,
                              "name": "_iters",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21337,
                              "src": "14738:6:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 21349,
                              "name": "_start",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21335,
                              "src": "14727:6:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 21350,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22577,
                            "src": "14727:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 21352,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14727:18:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21353,
                            "name": "investors",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10099,
                            "src": "14747:9:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_storage",
                              "typeString": "address[] storage ref"
                            }
                          },
                          "id": 21354,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "14747:16:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 21347,
                          "name": "Math",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22484,
                          "src": "14715:4:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Math_$22484_$",
                            "typeString": "type(library Math)"
                          }
                        },
                        "id": 21348,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "min256",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22483,
                        "src": "14715:11:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 21355,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14715:49:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14711:53:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21401,
                  "initializationExpression": {
                    "assignments": [
                      21343
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 21343,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 21403,
                        "src": "14691:9:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 21342,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14691:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 21345,
                    "initialValue": {
                      "argumentTypes": null,
                      "id": 21344,
                      "name": "_start",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21335,
                      "src": "14703:6:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "14691:18:59"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 21358,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "14766:3:59",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 21357,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21343,
                        "src": "14766:1:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 21359,
                    "nodeType": "ExpressionStatement",
                    "src": "14766:3:59"
                  },
                  "nodeType": "ForStatement",
                  "src": "14686:340:59"
                }
              ]
            },
            "documentation": "@notice removes addresses with zero balances from the investors list\n@param _start Index in investor list at which to start removing zero balances\n@param _iters Max number of iterations of the for loop\nNB - pruning this list will mean you may not be able to iterate over investors on-chain as of a historical checkpoint",
            "id": 21403,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 21340,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21339,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "14666:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14666:9:59"
              }
            ],
            "name": "pruneInvestors",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21338,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21335,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 21403,
                  "src": "14627:14:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21334,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14627:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21337,
                  "name": "_iters",
                  "nodeType": "VariableDeclaration",
                  "scope": 21403,
                  "src": "14643:14:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21336,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14643:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14626:32:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21341,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14676:0:59"
            },
            "scope": 22357,
            "src": "14603:429:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21411,
              "nodeType": "Block",
              "src": "15289:40:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 21408,
                      "name": "investors",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10099,
                      "src": "15306:9:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                        "typeString": "address[] storage ref"
                      }
                    },
                    "id": 21409,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "15306:16:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 21407,
                  "id": 21410,
                  "nodeType": "Return",
                  "src": "15299:23:59"
                }
              ]
            },
            "documentation": "@notice gets length of investors array\nNB - this length may differ from investorCount if list has not been pruned of zero balance investors\n@return length",
            "id": 21412,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInvestorsLength",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21404,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15257:2:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21407,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21406,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 21412,
                  "src": "15280:7:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21405,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15280:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15279:9:59"
            },
            "scope": 22357,
            "src": "15230:99:59",
            "stateMutability": "view",
            "superFunction": 10158,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21431,
              "nodeType": "Block",
              "src": "15435:102:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21419,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "15453:7:59",
                        "subExpression": {
                          "argumentTypes": null,
                          "id": 21418,
                          "name": "freeze",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20466,
                          "src": "15454:6:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 21417,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "15445:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 21420,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15445:16:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21421,
                  "nodeType": "ExpressionStatement",
                  "src": "15445:16:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21424,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21422,
                      "name": "freeze",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20466,
                      "src": "15471:6:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 21423,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15480:4:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "15471:13:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21425,
                  "nodeType": "ExpressionStatement",
                  "src": "15471:13:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21427,
                        "name": "freeze",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20466,
                        "src": "15518:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21428,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "15526:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21426,
                      "name": "LogFreezeTransfers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20556,
                      "src": "15499:18:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bool_$_t_uint256_$returns$__$",
                        "typeString": "function (bool,uint256)"
                      }
                    },
                    "id": 21429,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15499:31:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21430,
                  "nodeType": "EmitStatement",
                  "src": "15494:36:59"
                }
              ]
            },
            "documentation": "@notice freeze all the transfers",
            "id": 21432,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 21415,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21414,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "15425:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15425:9:59"
              }
            ],
            "name": "freezeTransfers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21413,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15415:2:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21416,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15435:0:59"
            },
            "scope": 22357,
            "src": "15391:146:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21450,
              "nodeType": "Block",
              "src": "15648:102:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21438,
                        "name": "freeze",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20466,
                        "src": "15666:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 21437,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "15658:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 21439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15658:15:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21440,
                  "nodeType": "ExpressionStatement",
                  "src": "15658:15:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21441,
                      "name": "freeze",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20466,
                      "src": "15683:6:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 21442,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15692:5:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "15683:14:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21444,
                  "nodeType": "ExpressionStatement",
                  "src": "15683:14:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21446,
                        "name": "freeze",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20466,
                        "src": "15731:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21447,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "15739:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21445,
                      "name": "LogFreezeTransfers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20556,
                      "src": "15712:18:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bool_$_t_uint256_$returns$__$",
                        "typeString": "function (bool,uint256)"
                      }
                    },
                    "id": 21448,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15712:31:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21449,
                  "nodeType": "EmitStatement",
                  "src": "15707:36:59"
                }
              ]
            },
            "documentation": "@notice un-freeze all the transfers",
            "id": 21451,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 21435,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21434,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "15638:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15638:9:59"
              }
            ],
            "name": "unfreezeTransfers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21433,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15628:2:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21436,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15648:0:59"
            },
            "scope": 22357,
            "src": "15602:148:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21460,
              "nodeType": "Block",
              "src": "15901:72:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21455,
                        "name": "checkpointTotalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20484,
                        "src": "15929:21:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 21456,
                          "name": "totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            22687
                          ],
                          "referencedDeclaration": 22687,
                          "src": "15952:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 21457,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15952:13:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21454,
                      "name": "adjustCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21528,
                      "src": "15911:17:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct SecurityToken.Checkpoint storage ref[] storage pointer,uint256)"
                      }
                    },
                    "id": 21458,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15911:55:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21459,
                  "nodeType": "ExpressionStatement",
                  "src": "15911:55:59"
                }
              ]
            },
            "documentation": "@notice adjust totalsupply at checkpoint after minting or burning tokens",
            "id": 21461,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "adjustTotalSupplyCheckpoints",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21452,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15889:2:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21453,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15901:0:59"
            },
            "scope": 22357,
            "src": "15852:121:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21475,
              "nodeType": "Block",
              "src": "16198:87:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 21467,
                          "name": "checkpointBalances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20481,
                          "src": "16226:18:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct SecurityToken.Checkpoint storage ref[] storage ref)"
                          }
                        },
                        "id": 21469,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 21468,
                          "name": "_investor",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21463,
                          "src": "16245:9:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16226:29:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21471,
                            "name": "_investor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21463,
                            "src": "16267:9:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 21470,
                          "name": "balanceOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            22759
                          ],
                          "referencedDeclaration": 22759,
                          "src": "16257:9:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view returns (uint256)"
                          }
                        },
                        "id": 21472,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16257:20:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21466,
                      "name": "adjustCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21528,
                      "src": "16208:17:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct SecurityToken.Checkpoint storage ref[] storage pointer,uint256)"
                      }
                    },
                    "id": 21473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16208:70:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21474,
                  "nodeType": "ExpressionStatement",
                  "src": "16208:70:59"
                }
              ]
            },
            "documentation": "@notice adjust token holder balance at checkpoint after a token transfer\n@param _investor address of the token holder affected",
            "id": 21476,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "adjustBalanceCheckpoints",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21463,
                  "name": "_investor",
                  "nodeType": "VariableDeclaration",
                  "scope": 21476,
                  "src": "16170:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21462,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16170:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16169:19:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21465,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16198:0:59"
            },
            "scope": 22357,
            "src": "16136:149:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21527,
              "nodeType": "Block",
              "src": "16582:817:59",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21486,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 21484,
                      "name": "currentCheckpointId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10094,
                      "src": "16629:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 21485,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16652:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "16629:24:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21489,
                  "nodeType": "IfStatement",
                  "src": "16625:61:59",
                  "trueBody": {
                    "id": 21488,
                    "nodeType": "Block",
                    "src": "16655:31:59",
                    "statements": [
                      {
                        "expression": null,
                        "functionReturnParameters": 21483,
                        "id": 21487,
                        "nodeType": "Return",
                        "src": "16669:7:59"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 21490,
                        "name": "_checkpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21479,
                        "src": "16778:12:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                        }
                      },
                      "id": 21491,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16778:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 21492,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16801:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "16778:24:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21505,
                  "nodeType": "IfStatement",
                  "src": "16774:247:59",
                  "trueBody": {
                    "id": 21504,
                    "nodeType": "Block",
                    "src": "16804:217:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 21498,
                                  "name": "currentCheckpointId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10094,
                                  "src": "16900:19:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 21499,
                                  "name": "_newValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21481,
                                  "src": "16948:9:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 21497,
                                "name": "Checkpoint",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20476,
                                "src": "16853:10:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_Checkpoint_$20476_storage_ptr_$",
                                  "typeString": "type(struct SecurityToken.Checkpoint storage pointer)"
                                }
                              },
                              "id": 21500,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "checkpointId",
                                "value"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "16853:123:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$20476_memory",
                                "typeString": "struct SecurityToken.Checkpoint memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Checkpoint_$20476_memory",
                                "typeString": "struct SecurityToken.Checkpoint memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 21494,
                              "name": "_checkpoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21479,
                              "src": "16818:12:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                                "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                              }
                            },
                            "id": 21496,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "16818:17:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_Checkpoint_$20476_storage_$returns$_t_uint256_$",
                              "typeString": "function (struct SecurityToken.Checkpoint storage ref) returns (uint256)"
                            }
                          },
                          "id": 21501,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16818:172:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 21502,
                        "nodeType": "ExpressionStatement",
                        "src": "16818:172:59"
                      },
                      {
                        "expression": null,
                        "functionReturnParameters": 21483,
                        "id": 21503,
                        "nodeType": "Return",
                        "src": "17004:7:59"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21514,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 21506,
                          "name": "_checkpoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21479,
                          "src": "17081:12:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                            "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                          }
                        },
                        "id": 21511,
                        "indexExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 21510,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21507,
                              "name": "_checkpoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21479,
                              "src": "17094:12:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                                "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                              }
                            },
                            "id": 21508,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "17094:19:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 21509,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "17116:1:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "17094:23:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "17081:37:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$20476_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref"
                        }
                      },
                      "id": 21512,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "checkpointId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20473,
                      "src": "17081:50:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 21513,
                      "name": "currentCheckpointId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10094,
                      "src": "17135:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17081:73:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21517,
                  "nodeType": "IfStatement",
                  "src": "17077:110:59",
                  "trueBody": {
                    "id": 21516,
                    "nodeType": "Block",
                    "src": "17156:31:59",
                    "statements": [
                      {
                        "expression": null,
                        "functionReturnParameters": 21483,
                        "id": 21515,
                        "nodeType": "Return",
                        "src": "17170:7:59"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21522,
                            "name": "currentCheckpointId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10094,
                            "src": "17314:19:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21523,
                            "name": "_newValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21481,
                            "src": "17358:9:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 21521,
                          "name": "Checkpoint",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20476,
                          "src": "17271:10:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Checkpoint_$20476_storage_ptr_$",
                            "typeString": "type(struct SecurityToken.Checkpoint storage pointer)"
                          }
                        },
                        "id": 21524,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "checkpointId",
                          "value"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "17271:111:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$20476_memory",
                          "typeString": "struct SecurityToken.Checkpoint memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Checkpoint_$20476_memory",
                          "typeString": "struct SecurityToken.Checkpoint memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 21518,
                        "name": "_checkpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21479,
                        "src": "17240:12:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                        }
                      },
                      "id": 21520,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17240:17:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_Checkpoint_$20476_storage_$returns$_t_uint256_$",
                        "typeString": "function (struct SecurityToken.Checkpoint storage ref) returns (uint256)"
                      }
                    },
                    "id": 21525,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17240:152:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21526,
                  "nodeType": "ExpressionStatement",
                  "src": "17240:152:59"
                }
              ]
            },
            "documentation": "@notice store the changes to the checkpoint objects\n@param _checkpoints the affected checkpoint object array\n@param _newValue the new value that needs to be stored",
            "id": 21528,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "adjustCheckpoints",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21482,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21479,
                  "name": "_checkpoints",
                  "nodeType": "VariableDeclaration",
                  "scope": 21528,
                  "src": "16519:33:59",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                    "typeString": "struct SecurityToken.Checkpoint[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 21477,
                      "name": "Checkpoint",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 20476,
                      "src": "16519:10:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Checkpoint_$20476_storage_ptr",
                        "typeString": "struct SecurityToken.Checkpoint"
                      }
                    },
                    "id": 21478,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "16519:12:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                      "typeString": "struct SecurityToken.Checkpoint[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21481,
                  "name": "_newValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 21528,
                  "src": "16554:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21480,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16554:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16518:54:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21483,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16582:0:59"
            },
            "scope": 22357,
            "src": "16492:907:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21573,
              "nodeType": "Block",
              "src": "17663:296:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 21538,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "17693:3:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 21539,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "17693:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21540,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21530,
                        "src": "17705:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21541,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21532,
                        "src": "17710:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21537,
                      "name": "adjustInvestorCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21333,
                      "src": "17673:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 21542,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17673:44:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21543,
                  "nodeType": "ExpressionStatement",
                  "src": "17673:44:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21546,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "17750:3:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 21547,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "17750:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21548,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21530,
                            "src": "17762:3:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21549,
                            "name": "_value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21532,
                            "src": "17767:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 21545,
                          "name": "verifyTransfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            21755
                          ],
                          "referencedDeclaration": 21755,
                          "src": "17735:14:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) returns (bool)"
                          }
                        },
                        "id": 21550,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17735:39:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5472616e73666572206973206e6f742076616c6964",
                        "id": 21551,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17776:23:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c2b52aede81a61bfb2345b48703ab4dd0a83b05e6407bea4090bfcc23659ff5b",
                          "typeString": "literal_string \"Transfer is not valid\""
                        },
                        "value": "Transfer is not valid"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c2b52aede81a61bfb2345b48703ab4dd0a83b05e6407bea4090bfcc23659ff5b",
                          "typeString": "literal_string \"Transfer is not valid\""
                        }
                      ],
                      "id": 21544,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "17727:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17727:73:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21553,
                  "nodeType": "ExpressionStatement",
                  "src": "17727:73:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 21555,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "17835:3:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 21556,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "17835:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 21554,
                      "name": "adjustBalanceCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21476,
                      "src": "17810:24:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 21557,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17810:36:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21558,
                  "nodeType": "ExpressionStatement",
                  "src": "17810:36:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21560,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21530,
                        "src": "17881:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 21559,
                      "name": "adjustBalanceCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21476,
                      "src": "17856:24:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 21561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17856:29:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21562,
                  "nodeType": "ExpressionStatement",
                  "src": "17856:29:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21566,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21530,
                            "src": "17918:3:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21567,
                            "name": "_value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21532,
                            "src": "17923:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 21564,
                            "name": "super",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23197,
                            "src": "17903:5:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_super$_SecurityToken_$22357",
                              "typeString": "contract super SecurityToken"
                            }
                          },
                          "id": 21565,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22747,
                          "src": "17903:14:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) returns (bool)"
                          }
                        },
                        "id": 21568,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17903:27:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 21563,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "17895:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 21569,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17895:36:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21570,
                  "nodeType": "ExpressionStatement",
                  "src": "17895:36:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 21571,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "17948:4:59",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 21536,
                  "id": 21572,
                  "nodeType": "Return",
                  "src": "17941:11:59"
                }
              ]
            },
            "documentation": "@notice Overloaded version of the transfer function\n@param _to receiver of transfer\n@param _value value of transfer\n@return bool success",
            "id": 21574,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21533,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21530,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 21574,
                  "src": "17604:11:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21529,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17604:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21532,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 21574,
                  "src": "17617:14:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21531,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17617:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17603:29:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21536,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21535,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 21574,
                  "src": "17649:12:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21534,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17649:4:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17648:14:59"
            },
            "scope": 22357,
            "src": "17586:373:59",
            "stateMutability": "nonpayable",
            "superFunction": 22747,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21619,
              "nodeType": "Block",
              "src": "18285:292:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21586,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21576,
                        "src": "18315:5:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21587,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21578,
                        "src": "18322:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21588,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21580,
                        "src": "18327:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21585,
                      "name": "adjustInvestorCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21333,
                      "src": "18295:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 21589,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18295:39:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21590,
                  "nodeType": "ExpressionStatement",
                  "src": "18295:39:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21593,
                            "name": "_from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21576,
                            "src": "18367:5:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21594,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21578,
                            "src": "18374:3:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21595,
                            "name": "_value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21580,
                            "src": "18379:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 21592,
                          "name": "verifyTransfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            21755
                          ],
                          "referencedDeclaration": 21755,
                          "src": "18352:14:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) returns (bool)"
                          }
                        },
                        "id": 21596,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18352:34:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5472616e73666572206973206e6f742076616c6964",
                        "id": 21597,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18388:23:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c2b52aede81a61bfb2345b48703ab4dd0a83b05e6407bea4090bfcc23659ff5b",
                          "typeString": "literal_string \"Transfer is not valid\""
                        },
                        "value": "Transfer is not valid"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c2b52aede81a61bfb2345b48703ab4dd0a83b05e6407bea4090bfcc23659ff5b",
                          "typeString": "literal_string \"Transfer is not valid\""
                        }
                      ],
                      "id": 21591,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "18344:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18344:68:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21599,
                  "nodeType": "ExpressionStatement",
                  "src": "18344:68:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21601,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21576,
                        "src": "18447:5:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 21600,
                      "name": "adjustBalanceCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21476,
                      "src": "18422:24:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 21602,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18422:31:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21603,
                  "nodeType": "ExpressionStatement",
                  "src": "18422:31:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21605,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21578,
                        "src": "18488:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 21604,
                      "name": "adjustBalanceCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21476,
                      "src": "18463:24:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 21606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18463:29:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21607,
                  "nodeType": "ExpressionStatement",
                  "src": "18463:29:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21611,
                            "name": "_from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21576,
                            "src": "18529:5:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21612,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21578,
                            "src": "18536:3:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21613,
                            "name": "_value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21580,
                            "src": "18541:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 21609,
                            "name": "super",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23197,
                            "src": "18510:5:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_super$_SecurityToken_$22357",
                              "typeString": "contract super SecurityToken"
                            }
                          },
                          "id": 21610,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22969,
                          "src": "18510:18:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) returns (bool)"
                          }
                        },
                        "id": 21614,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18510:38:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 21608,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "18502:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 21615,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18502:47:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21616,
                  "nodeType": "ExpressionStatement",
                  "src": "18502:47:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 21617,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "18566:4:59",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 21584,
                  "id": 21618,
                  "nodeType": "Return",
                  "src": "18559:11:59"
                }
              ]
            },
            "documentation": "@notice Overloaded version of the transferFrom function\n@param _from sender of transfer\n@param _to receiver of transfer\n@param _value value of transfer\n@return bool success",
            "id": 21620,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "transferFrom",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21581,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21576,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 21620,
                  "src": "18211:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21575,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18211:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21578,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 21620,
                  "src": "18226:11:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21577,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18226:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21580,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 21620,
                  "src": "18239:14:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21579,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18239:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18210:44:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21584,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21583,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 21620,
                  "src": "18271:12:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21582,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18271:4:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18270:14:59"
            },
            "scope": 22357,
            "src": "18189:388:59",
            "stateMutability": "nonpayable",
            "superFunction": 22969,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21754,
              "nodeType": "Block",
              "src": "18978:1097:59",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 21635,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "18992:7:59",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 21634,
                      "name": "freeze",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20466,
                      "src": "18993:6:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21751,
                  "nodeType": "IfStatement",
                  "src": "18988:1061:59",
                  "trueBody": {
                    "id": 21750,
                    "nodeType": "Block",
                    "src": "19001:1048:59",
                    "statements": [
                      {
                        "assignments": [
                          21637
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 21637,
                            "name": "isTransfer",
                            "nodeType": "VariableDeclaration",
                            "scope": 21755,
                            "src": "19015:15:59",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 21636,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "19015:4:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 21639,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 21638,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19033:5:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19015:23:59"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 21640,
                            "name": "transferFunctions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20494,
                            "src": "19056:17:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$",
                              "typeString": "mapping(bytes4 => bool)"
                            }
                          },
                          "id": 21645,
                          "indexExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 21642,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 23131,
                                  "src": "19081:3:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 21643,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "data",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "19081:8:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              ],
                              "id": 21641,
                              "name": "getSig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22147,
                              "src": "19074:6:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                "typeString": "function (bytes memory) pure returns (bytes4)"
                              }
                            },
                            "id": 21644,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19074:16:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "19056:35:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 21651,
                        "nodeType": "IfStatement",
                        "src": "19052:89:59",
                        "trueBody": {
                          "id": 21650,
                          "nodeType": "Block",
                          "src": "19093:48:59",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 21648,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 21646,
                                  "name": "isTransfer",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21637,
                                  "src": "19109:10:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 21647,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "19122:4:59",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "19109:17:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 21649,
                              "nodeType": "ExpressionStatement",
                              "src": "19109:17:59"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 21657,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 21652,
                                "name": "modules",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20499,
                                "src": "19158:7:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                  "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                }
                              },
                              "id": 21654,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 21653,
                                "name": "TRANSFERMANAGER_KEY",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10084,
                                "src": "19166:19:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "19158:28:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                              }
                            },
                            "id": 21655,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "19158:35:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 21656,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19197:1:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "19158:40:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 21661,
                        "nodeType": "IfStatement",
                        "src": "19154:90:59",
                        "trueBody": {
                          "id": 21660,
                          "nodeType": "Block",
                          "src": "19200:44:59",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "74727565",
                                "id": 21658,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "19225:4:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "functionReturnParameters": 21633,
                              "id": 21659,
                              "nodeType": "Return",
                              "src": "19218:11:59"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          21663
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 21663,
                            "name": "isInvalid",
                            "nodeType": "VariableDeclaration",
                            "scope": 21755,
                            "src": "19257:14:59",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 21662,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "19257:4:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 21665,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 21664,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19274:5:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19257:22:59"
                      },
                      {
                        "assignments": [
                          21667
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 21667,
                            "name": "isValid",
                            "nodeType": "VariableDeclaration",
                            "scope": 21755,
                            "src": "19293:12:59",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 21666,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "19293:4:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 21669,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 21668,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19308:5:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19293:20:59"
                      },
                      {
                        "assignments": [
                          21671
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 21671,
                            "name": "isForceValid",
                            "nodeType": "VariableDeclaration",
                            "scope": 21755,
                            "src": "19327:17:59",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 21670,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "19327:4:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 21673,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 21672,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19347:5:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19327:25:59"
                      },
                      {
                        "body": {
                          "id": 21739,
                          "nodeType": "Block",
                          "src": "19430:539:59",
                          "statements": [
                            {
                              "assignments": [
                                21690
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 21690,
                                  "name": "valid",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 21755,
                                  "src": "19448:29:59",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Result_$18358",
                                    "typeString": "enum ITransferManager.Result"
                                  },
                                  "typeName": {
                                    "contractScope": null,
                                    "id": 21689,
                                    "name": "ITransferManager.Result",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 18358,
                                    "src": "19448:23:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Result_$18358",
                                      "typeString": "enum ITransferManager.Result"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 21705,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 21700,
                                    "name": "_from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 21622,
                                    "src": "19559:5:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 21701,
                                    "name": "_to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 21624,
                                    "src": "19566:3:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 21702,
                                    "name": "_amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 21626,
                                    "src": "19571:7:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 21703,
                                    "name": "isTransfer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 21637,
                                    "src": "19580:10:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 21692,
                                              "name": "modules",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 20499,
                                              "src": "19497:7:59",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                                "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                              }
                                            },
                                            "id": 21694,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 21693,
                                              "name": "TRANSFERMANAGER_KEY",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 10084,
                                              "src": "19505:19:59",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "19497:28:59",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                              "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                            }
                                          },
                                          "id": 21696,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 21695,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 21675,
                                            "src": "19526:1:59",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint8",
                                              "typeString": "uint8"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "19497:31:59",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                                            "typeString": "struct SecurityToken.ModuleData storage ref"
                                          }
                                        },
                                        "id": 21697,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "moduleAddress",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 20470,
                                        "src": "19497:45:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 21691,
                                      "name": "ITransferManager",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 18394,
                                      "src": "19480:16:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ITransferManager_$18394_$",
                                        "typeString": "type(contract ITransferManager)"
                                      }
                                    },
                                    "id": 21698,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "19480:63:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ITransferManager_$18394",
                                      "typeString": "contract ITransferManager"
                                    }
                                  },
                                  "id": 21699,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "verifyTransfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 18371,
                                  "src": "19480:78:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$_t_enum$_Result_$18358_$",
                                    "typeString": "function (address,address,uint256,bool) external returns (enum ITransferManager.Result)"
                                  }
                                },
                                "id": 21704,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "19480:111:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_Result_$18358",
                                  "typeString": "enum ITransferManager.Result"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "19448:143:59"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_enum$_Result_$18358",
                                  "typeString": "enum ITransferManager.Result"
                                },
                                "id": 21710,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 21706,
                                  "name": "valid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21690,
                                  "src": "19613:5:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Result_$18358",
                                    "typeString": "enum ITransferManager.Result"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 21707,
                                      "name": "ITransferManager",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 18394,
                                      "src": "19622:16:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ITransferManager_$18394_$",
                                        "typeString": "type(contract ITransferManager)"
                                      }
                                    },
                                    "id": 21708,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "Result",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 18358,
                                    "src": "19622:23:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_Result_$18358_$",
                                      "typeString": "type(enum ITransferManager.Result)"
                                    }
                                  },
                                  "id": 21709,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "INVALID",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "19622:31:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Result_$18358",
                                    "typeString": "enum ITransferManager.Result"
                                  }
                                },
                                "src": "19613:40:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 21716,
                              "nodeType": "IfStatement",
                              "src": "19609:103:59",
                              "trueBody": {
                                "id": 21715,
                                "nodeType": "Block",
                                "src": "19655:57:59",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 21713,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 21711,
                                        "name": "isInvalid",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 21663,
                                        "src": "19677:9:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "74727565",
                                        "id": 21712,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "19689:4:59",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        "value": "true"
                                      },
                                      "src": "19677:16:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 21714,
                                    "nodeType": "ExpressionStatement",
                                    "src": "19677:16:59"
                                  }
                                ]
                              }
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_enum$_Result_$18358",
                                  "typeString": "enum ITransferManager.Result"
                                },
                                "id": 21721,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 21717,
                                  "name": "valid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21690,
                                  "src": "19733:5:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Result_$18358",
                                    "typeString": "enum ITransferManager.Result"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 21718,
                                      "name": "ITransferManager",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 18394,
                                      "src": "19742:16:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ITransferManager_$18394_$",
                                        "typeString": "type(contract ITransferManager)"
                                      }
                                    },
                                    "id": 21719,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "Result",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 18358,
                                    "src": "19742:23:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_Result_$18358_$",
                                      "typeString": "type(enum ITransferManager.Result)"
                                    }
                                  },
                                  "id": 21720,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "VALID",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "19742:29:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Result_$18358",
                                    "typeString": "enum ITransferManager.Result"
                                  }
                                },
                                "src": "19733:38:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 21727,
                              "nodeType": "IfStatement",
                              "src": "19729:99:59",
                              "trueBody": {
                                "id": 21726,
                                "nodeType": "Block",
                                "src": "19773:55:59",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 21724,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 21722,
                                        "name": "isValid",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 21667,
                                        "src": "19795:7:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "74727565",
                                        "id": 21723,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "19805:4:59",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        "value": "true"
                                      },
                                      "src": "19795:14:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 21725,
                                    "nodeType": "ExpressionStatement",
                                    "src": "19795:14:59"
                                  }
                                ]
                              }
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_enum$_Result_$18358",
                                  "typeString": "enum ITransferManager.Result"
                                },
                                "id": 21732,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 21728,
                                  "name": "valid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21690,
                                  "src": "19849:5:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Result_$18358",
                                    "typeString": "enum ITransferManager.Result"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 21729,
                                      "name": "ITransferManager",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 18394,
                                      "src": "19858:16:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ITransferManager_$18394_$",
                                        "typeString": "type(contract ITransferManager)"
                                      }
                                    },
                                    "id": 21730,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "Result",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 18358,
                                    "src": "19858:23:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_Result_$18358_$",
                                      "typeString": "type(enum ITransferManager.Result)"
                                    }
                                  },
                                  "id": 21731,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "FORCE_VALID",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "19858:35:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Result_$18358",
                                    "typeString": "enum ITransferManager.Result"
                                  }
                                },
                                "src": "19849:44:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 21738,
                              "nodeType": "IfStatement",
                              "src": "19845:110:59",
                              "trueBody": {
                                "id": 21737,
                                "nodeType": "Block",
                                "src": "19895:60:59",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 21735,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 21733,
                                        "name": "isForceValid",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 21671,
                                        "src": "19917:12:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "74727565",
                                        "id": 21734,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "19932:4:59",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        "value": "true"
                                      },
                                      "src": "19917:19:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 21736,
                                    "nodeType": "ExpressionStatement",
                                    "src": "19917:19:59"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 21683,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 21678,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21675,
                            "src": "19384:1:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 21679,
                                "name": "modules",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20499,
                                "src": "19388:7:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                  "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                }
                              },
                              "id": 21681,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 21680,
                                "name": "TRANSFERMANAGER_KEY",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10084,
                                "src": "19396:19:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "19388:28:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                              }
                            },
                            "id": 21682,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "19388:35:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "19384:39:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 21740,
                        "initializationExpression": {
                          "assignments": [
                            21675
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 21675,
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 21755,
                              "src": "19371:7:59",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              "typeName": {
                                "id": 21674,
                                "name": "uint8",
                                "nodeType": "ElementaryTypeName",
                                "src": "19371:5:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 21677,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 21676,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19381:1:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "19371:11:59"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 21685,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "19425:3:59",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 21684,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21675,
                              "src": "19425:1:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "id": 21686,
                          "nodeType": "ExpressionStatement",
                          "src": "19425:3:59"
                        },
                        "nodeType": "ForStatement",
                        "src": "19366:603:59"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "id": 21741,
                            "name": "isForceValid",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21671,
                            "src": "19989:12:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "id": 21743,
                                  "name": "isInvalid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21663,
                                  "src": "20012:9:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "id": 21745,
                                  "name": "isValid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21667,
                                  "src": "20032:7:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "id": 21746,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "20012:27:59",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "66616c7365",
                                  "id": 21744,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "20024:5:59",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "false"
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 21747,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "20011:29:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 21748,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "19989:51:59",
                          "trueExpression": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 21742,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20004:4:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 21633,
                        "id": 21749,
                        "nodeType": "Return",
                        "src": "19982:58:59"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 21752,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "20063:5:59",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 21633,
                  "id": 21753,
                  "nodeType": "Return",
                  "src": "20056:12:59"
                }
              ]
            },
            "documentation": "@notice validate transfer with TransferManager module if it exists\n@dev TransferManager module has a key of 2\n@param _from sender of transfer\n@param _to receiver of transfer\n@param _amount value of transfer\n@return bool",
            "id": 21755,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 21629,
                    "name": "_amount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 21626,
                    "src": "18954:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 21630,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21628,
                  "name": "checkGranularity",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 20672,
                  "src": "18937:16:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18937:25:59"
              }
            ],
            "name": "verifyTransfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21627,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21622,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 21755,
                  "src": "18885:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21621,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18885:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21624,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 21755,
                  "src": "18900:11:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21623,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18900:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21626,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 21755,
                  "src": "18913:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21625,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18913:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18884:45:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21633,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21632,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 21755,
                  "src": "18972:4:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21631,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18972:4:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18971:6:59"
            },
            "scope": 22357,
            "src": "18861:1214:59",
            "stateMutability": "nonpayable",
            "superFunction": 10021,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21768,
              "nodeType": "Block",
              "src": "20208:87:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21760,
                      "name": "finishedIssuerMinting",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20487,
                      "src": "20218:21:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 21761,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20242:4:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "20218:28:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21763,
                  "nodeType": "ExpressionStatement",
                  "src": "20218:28:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21765,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "20284:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21764,
                      "name": "LogFinishMintingIssuer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20566,
                      "src": "20261:22:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 21766,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20261:27:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21767,
                  "nodeType": "EmitStatement",
                  "src": "20256:32:59"
                }
              ]
            },
            "documentation": "@notice End token minting period permanently for Issuer",
            "id": 21769,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 21758,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21757,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "20198:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20198:9:59"
              }
            ],
            "name": "finishMintingIssuer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21756,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20188:2:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21759,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20208:0:59"
            },
            "scope": 22357,
            "src": "20160:135:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21782,
              "nodeType": "Block",
              "src": "20423:81:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21776,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21774,
                      "name": "finishedSTOMinting",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20490,
                      "src": "20433:18:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 21775,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20454:4:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "20433:25:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21777,
                  "nodeType": "ExpressionStatement",
                  "src": "20433:25:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21779,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "20493:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21778,
                      "name": "LogFinishMintingSTO",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20570,
                      "src": "20473:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 21780,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20473:24:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21781,
                  "nodeType": "EmitStatement",
                  "src": "20468:29:59"
                }
              ]
            },
            "documentation": "@notice End token minting period permanently for STOs",
            "id": 21783,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 21772,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21771,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "20413:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20413:9:59"
              }
            ],
            "name": "finishMintingSTO",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21770,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20403:2:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21773,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20423:0:59"
            },
            "scope": 22357,
            "src": "20378:126:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21869,
              "nodeType": "Block",
              "src": "21016:553:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 21806,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 21802,
                          "name": "_investor",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21785,
                          "src": "21034:9:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 21804,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "21055:1:59",
                              "subdenomination": null,
                              "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": 21803,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "21047:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 21805,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21047:10:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "21034:23:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e766573746f7220616464726573732073686f756c64206e6f74206265203078",
                        "id": 21807,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21059:35:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_92c9ad5839d9e6c845f0585522dbe71544d58a6d51db03cf580afd2032f01f8c",
                          "typeString": "literal_string \"Investor address should not be 0x\""
                        },
                        "value": "Investor address should not be 0x"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_92c9ad5839d9e6c845f0585522dbe71544d58a6d51db03cf580afd2032f01f8c",
                          "typeString": "literal_string \"Investor address should not be 0x\""
                        }
                      ],
                      "id": 21801,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "21026:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21808,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21026:69:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21809,
                  "nodeType": "ExpressionStatement",
                  "src": "21026:69:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 21812,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "21133:1:59",
                            "subdenomination": null,
                            "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": 21811,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21125:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 21813,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21125:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21814,
                        "name": "_investor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21785,
                        "src": "21137:9:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21815,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21787,
                        "src": "21148:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21810,
                      "name": "adjustInvestorCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21333,
                      "src": "21105:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 21816,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21105:51:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21817,
                  "nodeType": "ExpressionStatement",
                  "src": "21105:51:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 21821,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "21197:1:59",
                                "subdenomination": null,
                                "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": 21820,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "21189:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 21822,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21189:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21823,
                            "name": "_investor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21785,
                            "src": "21201:9:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21824,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21787,
                            "src": "21212:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 21819,
                          "name": "verifyTransfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            21755
                          ],
                          "referencedDeclaration": 21755,
                          "src": "21174:14:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) returns (bool)"
                          }
                        },
                        "id": 21825,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21174:46:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5472616e73666572206973206e6f742076616c6964",
                        "id": 21826,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21222:23:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c2b52aede81a61bfb2345b48703ab4dd0a83b05e6407bea4090bfcc23659ff5b",
                          "typeString": "literal_string \"Transfer is not valid\""
                        },
                        "value": "Transfer is not valid"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c2b52aede81a61bfb2345b48703ab4dd0a83b05e6407bea4090bfcc23659ff5b",
                          "typeString": "literal_string \"Transfer is not valid\""
                        }
                      ],
                      "id": 21818,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "21166:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21827,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21166:80:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21828,
                  "nodeType": "ExpressionStatement",
                  "src": "21166:80:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21830,
                        "name": "_investor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21785,
                        "src": "21281:9:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 21829,
                      "name": "adjustBalanceCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21476,
                      "src": "21256:24:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 21831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21256:35:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21832,
                  "nodeType": "ExpressionStatement",
                  "src": "21256:35:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 21833,
                      "name": "adjustTotalSupplyCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21461,
                      "src": "21301:28:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 21834,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21301:30:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21835,
                  "nodeType": "ExpressionStatement",
                  "src": "21301:30:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21841,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21836,
                      "name": "totalSupply_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22679,
                      "src": "21341:12:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 21839,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21787,
                          "src": "21373:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 21837,
                          "name": "totalSupply_",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22679,
                          "src": "21356:12:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 21838,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22577,
                        "src": "21356:16:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 21840,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "21356:25:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21341:40:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21842,
                  "nodeType": "ExpressionStatement",
                  "src": "21341:40:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21852,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 21843,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22677,
                        "src": "21391:8:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 21845,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 21844,
                        "name": "_investor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21785,
                        "src": "21400:9:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "21391:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 21850,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21787,
                          "src": "21437:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 21846,
                            "name": "balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22677,
                            "src": "21413:8:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 21848,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 21847,
                            "name": "_investor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21785,
                            "src": "21422:9:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "21413:19:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 21849,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22577,
                        "src": "21413:23:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 21851,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "21413:32:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21391:54:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21853,
                  "nodeType": "ExpressionStatement",
                  "src": "21391:54:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21855,
                        "name": "_investor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21785,
                        "src": "21467:9:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21856,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21787,
                        "src": "21478:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21854,
                      "name": "Minted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10041,
                      "src": "21460:6:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 21857,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21460:26:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21858,
                  "nodeType": "EmitStatement",
                  "src": "21455:31:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 21861,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "21518:1:59",
                            "subdenomination": null,
                            "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": 21860,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21510:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 21862,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21510:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21863,
                        "name": "_investor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21785,
                        "src": "21522:9:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21864,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21787,
                        "src": "21533:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21859,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22868,
                      "src": "21501:8:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 21865,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21501:40:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21866,
                  "nodeType": "EmitStatement",
                  "src": "21496:45:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 21867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "21558:4:59",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 21800,
                  "id": 21868,
                  "nodeType": "Return",
                  "src": "21551:11:59"
                }
              ]
            },
            "documentation": "@notice mints new tokens and assigns them to the target _investor.\n@dev Can only be called by the STO attached to the token (Or by the ST owner if there's no STO attached yet)\n@param _investor Address to whom the minted tokens will be dilivered\n@param _amount Number of tokens get minted\n@return success",
            "id": 21870,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 21790,
                    "name": "STO_KEY",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10087,
                    "src": "20933:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 21791,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "20942:4:59",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  }
                ],
                "id": 21792,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21789,
                  "name": "onlyModule",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 20657,
                  "src": "20922:10:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint8_$_t_bool_$",
                    "typeString": "modifier (uint8,bool)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20922:25:59"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 21794,
                    "name": "_amount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 21787,
                    "src": "20965:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 21795,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21793,
                  "name": "checkGranularity",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 20672,
                  "src": "20948:16:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20948:25:59"
              },
              {
                "arguments": [],
                "id": 21797,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21796,
                  "name": "isMintingAllowed",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 20695,
                  "src": "20974:16:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20974:18:59"
              }
            ],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21788,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21785,
                  "name": "_investor",
                  "nodeType": "VariableDeclaration",
                  "scope": 21870,
                  "src": "20879:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21784,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20879:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21787,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 21870,
                  "src": "20898:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21786,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20898:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20878:36:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21800,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21799,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 21870,
                  "src": "21002:12:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21798,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "21002:4:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21001:14:59"
            },
            "scope": 22357,
            "src": "20865:704:59",
            "stateMutability": "nonpayable",
            "superFunction": 10030,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21918,
              "nodeType": "Block",
              "src": "22142:238:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 21890,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21886,
                            "name": "_investors",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21873,
                            "src": "22160:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 21887,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "22160:17:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21888,
                            "name": "_amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21876,
                            "src": "22181:8:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 21889,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "22181:15:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "22160:36:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d69732d6d6174636820696e20746865206c656e677468206f662074686520617272617973",
                        "id": 21891,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22198:39:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e6e9985f4f54b573f3a5eba669f45bb98ec50cd60909ea443be6588371310a0e",
                          "typeString": "literal_string \"Mis-match in the length of the arrays\""
                        },
                        "value": "Mis-match in the length of the arrays"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e6e9985f4f54b573f3a5eba669f45bb98ec50cd60909ea443be6588371310a0e",
                          "typeString": "literal_string \"Mis-match in the length of the arrays\""
                        }
                      ],
                      "id": 21885,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "22152:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21892,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22152:86:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21893,
                  "nodeType": "ExpressionStatement",
                  "src": "22152:86:59"
                },
                {
                  "body": {
                    "id": 21914,
                    "nodeType": "Block",
                    "src": "22296:57:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 21906,
                                "name": "_investors",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21873,
                                "src": "22315:10:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 21908,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 21907,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21895,
                                "src": "22326:1:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "22315:13:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 21909,
                                "name": "_amounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21876,
                                "src": "22330:8:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 21911,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 21910,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21895,
                                "src": "22339:1:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "22330:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 21905,
                            "name": "mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              21870
                            ],
                            "referencedDeclaration": 21870,
                            "src": "22310:4:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) returns (bool)"
                            }
                          },
                          "id": 21912,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22310:32:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 21913,
                        "nodeType": "ExpressionStatement",
                        "src": "22310:32:59"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21901,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 21898,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21895,
                      "src": "22268:1:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 21899,
                        "name": "_investors",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21873,
                        "src": "22272:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 21900,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "22272:17:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22268:21:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21915,
                  "initializationExpression": {
                    "assignments": [
                      21895
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 21895,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 21919,
                        "src": "22253:9:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 21894,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "22253:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 21897,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 21896,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22265:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "22253:13:59"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 21903,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "22291:3:59",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 21902,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21895,
                        "src": "22291:1:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 21904,
                    "nodeType": "ExpressionStatement",
                    "src": "22291:3:59"
                  },
                  "nodeType": "ForStatement",
                  "src": "22248:105:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 21916,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "22369:4:59",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 21884,
                  "id": 21917,
                  "nodeType": "Return",
                  "src": "22362:11:59"
                }
              ]
            },
            "documentation": "@notice mints new tokens and assigns them to the target _investor.\nCan only be called by the STO attached to the token (Or by the ST owner if there's no STO attached yet)\n@param _investors A list of addresses to whom the minted tokens will be dilivered\n@param _amounts A list of number of tokens get minted and transfer to corresponding address of the investor from _investor[] list\n@return success",
            "id": 21919,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 21879,
                    "name": "STO_KEY",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10087,
                    "src": "22104:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 21880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "22113:4:59",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  }
                ],
                "id": 21881,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21878,
                  "name": "onlyModule",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 20657,
                  "src": "22093:10:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint8_$_t_bool_$",
                    "typeString": "modifier (uint8,bool)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22093:25:59"
              }
            ],
            "name": "mintMulti",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21877,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21873,
                  "name": "_investors",
                  "nodeType": "VariableDeclaration",
                  "scope": 21919,
                  "src": "22044:20:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 21871,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "22044:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 21872,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "22044:9:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21876,
                  "name": "_amounts",
                  "nodeType": "VariableDeclaration",
                  "scope": 21919,
                  "src": "22066:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 21874,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "22066:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 21875,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "22066:9:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22043:42:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21884,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21883,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 21919,
                  "src": "22128:12:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21882,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22128:4:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22127:14:59"
            },
            "scope": 22357,
            "src": "22025:355:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21972,
              "nodeType": "Block",
              "src": "22966:361:59",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21935,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 21930,
                          "name": "modules",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20499,
                          "src": "22980:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                            "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                          }
                        },
                        "id": 21932,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 21931,
                          "name": "PERMISSIONMANAGER_KEY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10081,
                          "src": "22988:21:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "22980:30:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                        }
                      },
                      "id": 21933,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "22980:37:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 21934,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23021:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "22980:42:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21939,
                  "nodeType": "IfStatement",
                  "src": "22976:85:59",
                  "trueBody": {
                    "id": 21938,
                    "nodeType": "Block",
                    "src": "23024:37:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 21936,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "23045:5:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 21929,
                        "id": 21937,
                        "nodeType": "Return",
                        "src": "23038:12:59"
                      }
                    ]
                  }
                },
                {
                  "body": {
                    "id": 21970,
                    "nodeType": "Block",
                    "src": "23137:184:59",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 21962,
                              "name": "_delegate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21921,
                              "src": "23239:9:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 21963,
                              "name": "_module",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21923,
                              "src": "23250:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 21964,
                              "name": "_perm",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21925,
                              "src": "23259:5:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 21954,
                                        "name": "modules",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20499,
                                        "src": "23174:7:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                          "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                        }
                                      },
                                      "id": 21956,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 21955,
                                        "name": "PERMISSIONMANAGER_KEY",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10081,
                                        "src": "23182:21:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "23174:30:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                        "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                      }
                                    },
                                    "id": 21958,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 21957,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 21941,
                                      "src": "23205:1:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "23174:33:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                                      "typeString": "struct SecurityToken.ModuleData storage ref"
                                    }
                                  },
                                  "id": 21959,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "moduleAddress",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 20470,
                                  "src": "23174:47:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 21953,
                                "name": "IPermissionManager",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13324,
                                "src": "23155:18:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IPermissionManager_$13324_$",
                                  "typeString": "type(contract IPermissionManager)"
                                }
                              },
                              "id": 21960,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "23155:67:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IPermissionManager_$13324",
                                "typeString": "contract IPermissionManager"
                              }
                            },
                            "id": 21961,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "checkPermission",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 13303,
                            "src": "23155:83:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (address,address,bytes32) view external returns (bool)"
                            }
                          },
                          "id": 21965,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23155:110:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 21969,
                        "nodeType": "IfStatement",
                        "src": "23151:160:59",
                        "trueBody": {
                          "id": 21968,
                          "nodeType": "Block",
                          "src": "23267:44:59",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "74727565",
                                "id": 21966,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "23292:4:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "functionReturnParameters": 21929,
                              "id": 21967,
                              "nodeType": "Return",
                              "src": "23285:11:59"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 21944,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21941,
                      "src": "23089:1:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 21945,
                          "name": "modules",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20499,
                          "src": "23093:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                            "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                          }
                        },
                        "id": 21947,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 21946,
                          "name": "PERMISSIONMANAGER_KEY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10081,
                          "src": "23101:21:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "23093:30:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                        }
                      },
                      "id": 21948,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "23093:37:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23089:41:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21971,
                  "initializationExpression": {
                    "assignments": [
                      21941
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 21941,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 21973,
                        "src": "23076:7:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 21940,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "23076:5:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 21943,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 21942,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23086:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "23076:11:59"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 21951,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "23132:3:59",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 21950,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21941,
                        "src": "23132:1:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 21952,
                    "nodeType": "ExpressionStatement",
                    "src": "23132:3:59"
                  },
                  "nodeType": "ForStatement",
                  "src": "23071:250:59"
                }
              ]
            },
            "documentation": "@notice Validate permissions with PermissionManager if it exists, If no Permission return false\n@dev Note that IModule withPerm will allow ST owner all permissions anyway\n@dev this allows individual modules to override this logic if needed (to not allow ST owner all permissions)\n@param _delegate address of delegate\n@param _module address of PermissionManager module\n@param _perm the permissions\n@return success",
            "id": 21973,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21926,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21921,
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "scope": 21973,
                  "src": "22889:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21920,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22889:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21923,
                  "name": "_module",
                  "nodeType": "VariableDeclaration",
                  "scope": 21973,
                  "src": "22908:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21922,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22908:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21925,
                  "name": "_perm",
                  "nodeType": "VariableDeclaration",
                  "scope": 21973,
                  "src": "22925:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21924,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "22925:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22888:51:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21929,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21928,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 21973,
                  "src": "22960:4:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21927,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22960:4:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22959:6:59"
            },
            "scope": 22357,
            "src": "22864:463:59",
            "stateMutability": "view",
            "superFunction": 10110,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21986,
              "nodeType": "Block",
              "src": "23560:57:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21984,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21980,
                      "name": "tokenBurner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20463,
                      "src": "23570:11:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ITokenBurner_$10295",
                        "typeString": "contract ITokenBurner"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 21982,
                          "name": "_tokenBurner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21975,
                          "src": "23597:12:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 21981,
                        "name": "ITokenBurner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10295,
                        "src": "23584:12:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ITokenBurner_$10295_$",
                          "typeString": "type(contract ITokenBurner)"
                        }
                      },
                      "id": 21983,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23584:26:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ITokenBurner_$10295",
                        "typeString": "contract ITokenBurner"
                      }
                    },
                    "src": "23570:40:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ITokenBurner_$10295",
                      "typeString": "contract ITokenBurner"
                    }
                  },
                  "id": 21985,
                  "nodeType": "ExpressionStatement",
                  "src": "23570:40:59"
                }
              ]
            },
            "documentation": "@notice used to set the token Burner address. It only be called by the owner\n@param _tokenBurner Address of the token burner contract",
            "id": 21987,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 21978,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21977,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "23550:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "23550:9:59"
              }
            ],
            "name": "setTokenBurner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21976,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21975,
                  "name": "_tokenBurner",
                  "nodeType": "VariableDeclaration",
                  "scope": 21987,
                  "src": "23521:20:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21974,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23521:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23520:22:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21979,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23560:0:59"
            },
            "scope": 22357,
            "src": "23497:120:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 22088,
              "nodeType": "Block",
              "src": "23811:931:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 21996,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "23841:3:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 21997,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "23841:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 21999,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "23861:1:59",
                            "subdenomination": null,
                            "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": 21998,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "23853:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 22000,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "23853:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 22001,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21989,
                        "src": "23865:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21995,
                      "name": "adjustInvestorCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21333,
                      "src": "23821:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 22002,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23821:51:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22003,
                  "nodeType": "ExpressionStatement",
                  "src": "23821:51:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 22009,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 22005,
                          "name": "tokenBurner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20463,
                          "src": "23890:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ITokenBurner_$10295",
                            "typeString": "contract ITokenBurner"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 22007,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "23913:1:59",
                              "subdenomination": null,
                              "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": 22006,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "23905:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 22008,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23905:10:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "23890:25:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "546f6b656e204275726e657220636f6e74726163742061646472657373206973206e6f742073657420796574",
                        "id": 22010,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "23917:46:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b1e20e36cf137ffa348b540450b55b5e970f06fe4fc7c40c3990ff61e4871e2f",
                          "typeString": "literal_string \"Token Burner contract address is not set yet\""
                        },
                        "value": "Token Burner contract address is not set yet"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b1e20e36cf137ffa348b540450b55b5e970f06fe4fc7c40c3990ff61e4871e2f",
                          "typeString": "literal_string \"Token Burner contract address is not set yet\""
                        }
                      ],
                      "id": 22004,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "23882:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 22011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23882:82:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22012,
                  "nodeType": "ExpressionStatement",
                  "src": "23882:82:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 22015,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "23997:3:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 22016,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "23997:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 22018,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "24017:1:59",
                                "subdenomination": null,
                                "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": 22017,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "24009:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 22019,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "24009:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 22020,
                            "name": "_value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21989,
                            "src": "24021:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 22014,
                          "name": "verifyTransfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            21755
                          ],
                          "referencedDeclaration": 21755,
                          "src": "23982:14:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) returns (bool)"
                          }
                        },
                        "id": 22021,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "23982:46:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5472616e73666572206973206e6f742076616c6964",
                        "id": 22022,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24030:23:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c2b52aede81a61bfb2345b48703ab4dd0a83b05e6407bea4090bfcc23659ff5b",
                          "typeString": "literal_string \"Transfer is not valid\""
                        },
                        "value": "Transfer is not valid"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c2b52aede81a61bfb2345b48703ab4dd0a83b05e6407bea4090bfcc23659ff5b",
                          "typeString": "literal_string \"Transfer is not valid\""
                        }
                      ],
                      "id": 22013,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "23974:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 22023,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23974:80:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22024,
                  "nodeType": "ExpressionStatement",
                  "src": "23974:80:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 22031,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 22026,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21989,
                          "src": "24072:6:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 22027,
                            "name": "balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22677,
                            "src": "24082:8:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 22030,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 22028,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "24091:3:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 22029,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "24091:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "24082:20:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "24072:30:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "56616c75652073686f756c64206e6f2062652067726561746572207468616e207468652062616c616e6365206f66206d73672e73656e646572",
                        "id": 22032,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24104:59:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b61a8271ddd9a6e3d197611651578d62cfc7171b9d88bf350a7c0ea036caf1ea",
                          "typeString": "literal_string \"Value should no be greater than the balance of msg.sender\""
                        },
                        "value": "Value should no be greater than the balance of msg.sender"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b61a8271ddd9a6e3d197611651578d62cfc7171b9d88bf350a7c0ea036caf1ea",
                          "typeString": "literal_string \"Value should no be greater than the balance of msg.sender\""
                        }
                      ],
                      "id": 22025,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "24064:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 22033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24064:100:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22034,
                  "nodeType": "ExpressionStatement",
                  "src": "24064:100:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 22036,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "24199:3:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 22037,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "24199:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 22035,
                      "name": "adjustBalanceCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21476,
                      "src": "24174:24:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 22038,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24174:36:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22039,
                  "nodeType": "ExpressionStatement",
                  "src": "24174:36:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 22040,
                      "name": "adjustTotalSupplyCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21461,
                      "src": "24220:28:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 22041,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24220:30:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22042,
                  "nodeType": "ExpressionStatement",
                  "src": "24220:30:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 22054,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 22043,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22677,
                        "src": "24440:8:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 22046,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 22044,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "24449:3:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 22045,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "24449:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "24440:20:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 22052,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21989,
                          "src": "24488:6:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 22047,
                            "name": "balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22677,
                            "src": "24463:8:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 22050,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 22048,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "24472:3:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 22049,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "24472:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "24463:20:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 22051,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22553,
                        "src": "24463:24:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 22053,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24463:32:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24440:55:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 22055,
                  "nodeType": "ExpressionStatement",
                  "src": "24440:55:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 22059,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "24530:3:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 22060,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "24530:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 22061,
                            "name": "_value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21989,
                            "src": "24542:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 22057,
                            "name": "tokenBurner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20463,
                            "src": "24513:11:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ITokenBurner_$10295",
                              "typeString": "contract ITokenBurner"
                            }
                          },
                          "id": 22058,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "burn",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10294,
                          "src": "24513:16:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 22062,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24513:36:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "546f6b656e206275726e65722070726f63657373206973206e6f742076616c696461746564",
                        "id": 22063,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24551:39:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5ccda958cac3717658218d89784f10f8d0a910ee0bbde8a05008990ae73f253b",
                          "typeString": "literal_string \"Token burner process is not validated\""
                        },
                        "value": "Token burner process is not validated"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5ccda958cac3717658218d89784f10f8d0a910ee0bbde8a05008990ae73f253b",
                          "typeString": "literal_string \"Token burner process is not validated\""
                        }
                      ],
                      "id": 22056,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "24505:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 22064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24505:86:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22065,
                  "nodeType": "ExpressionStatement",
                  "src": "24505:86:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 22071,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 22066,
                      "name": "totalSupply_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22679,
                      "src": "24601:12:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 22069,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21989,
                          "src": "24633:6:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 22067,
                          "name": "totalSupply_",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22679,
                          "src": "24616:12:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 22068,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22553,
                        "src": "24616:16:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 22070,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24616:24:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24601:39:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 22072,
                  "nodeType": "ExpressionStatement",
                  "src": "24601:39:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 22074,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "24661:3:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 22075,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "24661:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 22076,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21989,
                        "src": "24673:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 22073,
                      "name": "Burnt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10047,
                      "src": "24655:5:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 22077,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24655:25:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22078,
                  "nodeType": "EmitStatement",
                  "src": "24650:30:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 22080,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "24704:3:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 22081,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "24704:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 22083,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "24724:1:59",
                            "subdenomination": null,
                            "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": 22082,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "24716:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 22084,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24716:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 22085,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21989,
                        "src": "24728:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 22079,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22868,
                      "src": "24695:8:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 22086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24695:40:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22087,
                  "nodeType": "EmitStatement",
                  "src": "24690:45:59"
                }
              ]
            },
            "documentation": "@notice Burn function used to burn the securityToken\n@param _value No. of token that get burned",
            "id": 22089,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 21992,
                    "name": "_value",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 21989,
                    "src": "23796:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 21993,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21991,
                  "name": "checkGranularity",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 20672,
                  "src": "23779:16:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "23779:24:59"
              }
            ],
            "name": "burn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21990,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21989,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 22089,
                  "src": "23763:14:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21988,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23763:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23762:16:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21994,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23811:0:59"
            },
            "scope": 22357,
            "src": "23749:993:59",
            "stateMutability": "nonpayable",
            "superFunction": 10035,
            "visibility": "public"
          },
          {
            "body": {
              "id": 22146,
              "nodeType": "Block",
              "src": "24935:197:59",
              "statements": [
                {
                  "assignments": [
                    22097
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 22097,
                      "name": "len",
                      "nodeType": "VariableDeclaration",
                      "scope": 22147,
                      "src": "24945:8:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 22096,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "24945:4:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 22106,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 22101,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 22098,
                          "name": "_data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22091,
                          "src": "24956:5:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 22099,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "24956:12:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "34",
                        "id": 22100,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24971:1:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_4_by_1",
                          "typeString": "int_const 4"
                        },
                        "value": "4"
                      },
                      "src": "24956:16:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "hexValue": "34",
                      "id": 22104,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24990:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_4_by_1",
                        "typeString": "int_const 4"
                      },
                      "value": "4"
                    },
                    "id": 22105,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "24956:35:59",
                    "trueExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 22102,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22091,
                        "src": "24975:5:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 22103,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "24975:12:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24945:46:59"
                },
                {
                  "body": {
                    "id": 22144,
                    "nodeType": "Block",
                    "src": "25032:94:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 22142,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 22117,
                            "name": "sig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22094,
                            "src": "25046:3:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 22140,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 22120,
                                      "name": "sig",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 22094,
                                      "src": "25064:3:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    ],
                                    "id": 22119,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "25059:4:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint"
                                  },
                                  "id": 22121,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "25059:9:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 22139,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 22123,
                                          "name": "_data",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 22091,
                                          "src": "25076:5:59",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 22125,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 22124,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 22108,
                                          "src": "25082:1:59",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "25076:8:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      ],
                                      "id": 22122,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "25071:4:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": "uint"
                                    },
                                    "id": 22126,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "25071:14:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 22137,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "32",
                                          "id": 22127,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "25089:1:59",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_2_by_1",
                                            "typeString": "int_const 2"
                                          },
                                          "value": "2"
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "**",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "components": [
                                            {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "id": 22135,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "argumentTypes": null,
                                                "hexValue": "38",
                                                "id": 22128,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "25095:1:59",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_rational_8_by_1",
                                                  "typeString": "int_const 8"
                                                },
                                                "value": "8"
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "*",
                                              "rightExpression": {
                                                "argumentTypes": null,
                                                "components": [
                                                  {
                                                    "argumentTypes": null,
                                                    "commonType": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    },
                                                    "id": 22133,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                      "argumentTypes": null,
                                                      "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      "id": 22131,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "leftExpression": {
                                                        "argumentTypes": null,
                                                        "id": 22129,
                                                        "name": "len",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 22097,
                                                        "src": "25100:3:59",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "nodeType": "BinaryOperation",
                                                      "operator": "-",
                                                      "rightExpression": {
                                                        "argumentTypes": null,
                                                        "hexValue": "31",
                                                        "id": 22130,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "25106:1:59",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_rational_1_by_1",
                                                          "typeString": "int_const 1"
                                                        },
                                                        "value": "1"
                                                      },
                                                      "src": "25100:7:59",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "-",
                                                    "rightExpression": {
                                                      "argumentTypes": null,
                                                      "id": 22132,
                                                      "name": "i",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 22108,
                                                      "src": "25110:1:59",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    },
                                                    "src": "25100:11:59",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  }
                                                ],
                                                "id": 22134,
                                                "isConstant": false,
                                                "isInlineArray": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "TupleExpression",
                                                "src": "25099:13:59",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "src": "25095:17:59",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "id": 22136,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "25094:19:59",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "25089:24:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 22138,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "25088:26:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "25071:43:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "25059:55:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 22118,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "25052:6:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 22141,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "25052:63:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "25046:69:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "id": 22143,
                        "nodeType": "ExpressionStatement",
                        "src": "25046:69:59"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 22113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 22111,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22108,
                      "src": "25018:1:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 22112,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22097,
                      "src": "25022:3:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25018:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 22145,
                  "initializationExpression": {
                    "assignments": [
                      22108
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 22108,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 22147,
                        "src": "25006:6:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 22107,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "25006:4:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 22110,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 22109,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25015:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "25006:10:59"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 22115,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "25027:3:59",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 22114,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22108,
                        "src": "25027:1:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 22116,
                    "nodeType": "ExpressionStatement",
                    "src": "25027:3:59"
                  },
                  "nodeType": "ForStatement",
                  "src": "25001:125:59"
                }
              ]
            },
            "documentation": "@notice Get function signature from _data\n@param _data passed data\n@return bytes4 sig",
            "id": 22147,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getSig",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22092,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22091,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 22147,
                  "src": "24887:11:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 22090,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "24887:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24886:13:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 22095,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22094,
                  "name": "sig",
                  "nodeType": "VariableDeclaration",
                  "scope": 22147,
                  "src": "24923:10:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 22093,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "24923:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24922:12:59"
            },
            "scope": 22357,
            "src": "24871:261:59",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 22179,
              "nodeType": "Block",
              "src": "25357:210:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 22163,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 22157,
                          "name": "currentCheckpointId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10094,
                          "src": "25375:19:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                            "typeString": "int_const 1157...(70 digits omitted)...9935"
                          },
                          "id": 22162,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639936_by_1",
                              "typeString": "int_const 1157...(70 digits omitted)...9936"
                            },
                            "id": 22160,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "hexValue": "32",
                              "id": 22158,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25397:1:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "**",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "323536",
                              "id": 22159,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25400:3:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_256_by_1",
                                "typeString": "int_const 256"
                              },
                              "value": "256"
                            },
                            "src": "25397:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639936_by_1",
                              "typeString": "int_const 1157...(70 digits omitted)...9936"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 22161,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "25406:1:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "25397:10:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                            "typeString": "int_const 1157...(70 digits omitted)...9935"
                          }
                        },
                        "src": "25375:32:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 22156,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "25367:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 22164,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25367:41:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22165,
                  "nodeType": "ExpressionStatement",
                  "src": "25367:41:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 22170,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 22166,
                      "name": "currentCheckpointId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10094,
                      "src": "25418:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 22169,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 22167,
                        "name": "currentCheckpointId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10094,
                        "src": "25440:19:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 22168,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "25462:1:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "25440:23:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25418:45:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 22171,
                  "nodeType": "ExpressionStatement",
                  "src": "25418:45:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 22173,
                        "name": "currentCheckpointId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10094,
                        "src": "25499:19:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 22174,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "25520:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 22172,
                      "name": "LogCheckpointCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20562,
                      "src": "25478:20:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 22175,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25478:46:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22176,
                  "nodeType": "EmitStatement",
                  "src": "25473:51:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 22177,
                    "name": "currentCheckpointId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10094,
                    "src": "25541:19:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 22155,
                  "id": 22178,
                  "nodeType": "Return",
                  "src": "25534:26:59"
                }
              ]
            },
            "documentation": "@notice Creates a checkpoint that can be used to query historical balances / totalSuppy\n@return uint256",
            "id": 22180,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 22150,
                    "name": "CHECKPOINT_KEY",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10090,
                    "src": "25318:14:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 22151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "25334:4:59",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  }
                ],
                "id": 22152,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 22149,
                  "name": "onlyModule",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 20657,
                  "src": "25307:10:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint8_$_t_bool_$",
                    "typeString": "modifier (uint8,bool)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "25307:32:59"
              }
            ],
            "name": "createCheckpoint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22148,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25297:2:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 22155,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22154,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 22180,
                  "src": "25348:7:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22153,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25348:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25347:9:59"
            },
            "scope": 22357,
            "src": "25272:295:59",
            "stateMutability": "nonpayable",
            "superFunction": 10153,
            "visibility": "public"
          },
          {
            "body": {
              "id": 22194,
              "nodeType": "Block",
              "src": "25800:87:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 22188,
                        "name": "checkpointTotalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20484,
                        "src": "25828:21:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 22189,
                        "name": "_checkpointId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22182,
                        "src": "25851:13:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 22190,
                          "name": "totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            22687
                          ],
                          "referencedDeclaration": 22687,
                          "src": "25866:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 22191,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "25866:13:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 22187,
                      "name": "getValueAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22336,
                      "src": "25817:10:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (struct SecurityToken.Checkpoint storage ref[] storage pointer,uint256,uint256) view returns (uint256)"
                      }
                    },
                    "id": 22192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25817:63:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 22186,
                  "id": 22193,
                  "nodeType": "Return",
                  "src": "25810:70:59"
                }
              ]
            },
            "documentation": "@notice Queries totalSupply as of a defined checkpoint\n@param _checkpointId Checkpoint ID to query\n@return uint256",
            "id": 22195,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "totalSupplyAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22183,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22182,
                  "name": "_checkpointId",
                  "nodeType": "VariableDeclaration",
                  "scope": 22195,
                  "src": "25748:21:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22181,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25748:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25747:23:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 22186,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22185,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 22195,
                  "src": "25791:7:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22184,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25791:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25790:9:59"
            },
            "scope": 22357,
            "src": "25725:162:59",
            "stateMutability": "view",
            "superFunction": 10139,
            "visibility": "public"
          },
          {
            "body": {
              "id": 22335,
              "nodeType": "Block",
              "src": "26280:1167:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 22210,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 22208,
                          "name": "_checkpointId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22200,
                          "src": "26298:13:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 22209,
                          "name": "currentCheckpointId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10094,
                          "src": "26315:19:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "26298:36:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 22207,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "26290:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 22211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26290:45:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22212,
                  "nodeType": "ExpressionStatement",
                  "src": "26290:45:59"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 22215,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 22213,
                      "name": "_checkpointId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22200,
                      "src": "26440:13:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 22214,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26457:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "26440:18:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 22219,
                  "nodeType": "IfStatement",
                  "src": "26436:55:59",
                  "trueBody": {
                    "id": 22218,
                    "nodeType": "Block",
                    "src": "26460:31:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 22216,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "26479:1:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 22206,
                        "id": 22217,
                        "nodeType": "Return",
                        "src": "26472:8:59"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 22223,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 22220,
                        "name": "checkpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22198,
                        "src": "26504:11:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                        }
                      },
                      "id": 22221,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "26504:18:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 22222,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26526:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "26504:23:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 22227,
                  "nodeType": "IfStatement",
                  "src": "26500:74:59",
                  "trueBody": {
                    "id": 22226,
                    "nodeType": "Block",
                    "src": "26529:45:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 22224,
                          "name": "_currentValue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22202,
                          "src": "26550:13:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 22206,
                        "id": 22225,
                        "nodeType": "Return",
                        "src": "26543:20:59"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 22233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 22228,
                          "name": "checkpoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22198,
                          "src": "26587:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                            "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                          }
                        },
                        "id": 22230,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 22229,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "26599:1:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "26587:14:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$20476_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref"
                        }
                      },
                      "id": 22231,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "checkpointId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20473,
                      "src": "26587:27:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 22232,
                      "name": "_checkpointId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22200,
                      "src": "26618:13:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26587:44:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 22240,
                  "nodeType": "IfStatement",
                  "src": "26583:102:59",
                  "trueBody": {
                    "id": 22239,
                    "nodeType": "Block",
                    "src": "26633:52:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 22234,
                              "name": "checkpoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22198,
                              "src": "26654:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                                "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                              }
                            },
                            "id": 22236,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 22235,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "26666:1:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "26654:14:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Checkpoint_$20476_storage",
                              "typeString": "struct SecurityToken.Checkpoint storage ref"
                            }
                          },
                          "id": 22237,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 20475,
                          "src": "26654:20:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 22206,
                        "id": 22238,
                        "nodeType": "Return",
                        "src": "26647:27:59"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 22249,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 22241,
                          "name": "checkpoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22198,
                          "src": "26698:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                            "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                          }
                        },
                        "id": 22246,
                        "indexExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 22245,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 22242,
                              "name": "checkpoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22198,
                              "src": "26710:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                                "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                              }
                            },
                            "id": 22243,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "26710:18:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 22244,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "26731:1:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "26710:22:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "26698:35:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$20476_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref"
                        }
                      },
                      "id": 22247,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "checkpointId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20473,
                      "src": "26698:48:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 22248,
                      "name": "_checkpointId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22200,
                      "src": "26749:13:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26698:64:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 22253,
                  "nodeType": "IfStatement",
                  "src": "26694:115:59",
                  "trueBody": {
                    "id": 22252,
                    "nodeType": "Block",
                    "src": "26764:45:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 22250,
                          "name": "_currentValue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22202,
                          "src": "26785:13:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 22206,
                        "id": 22251,
                        "nodeType": "Return",
                        "src": "26778:20:59"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 22262,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 22254,
                          "name": "checkpoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22198,
                          "src": "26822:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                            "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                          }
                        },
                        "id": 22259,
                        "indexExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 22258,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 22255,
                              "name": "checkpoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22198,
                              "src": "26834:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                                "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                              }
                            },
                            "id": 22256,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "26834:18:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 22257,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "26855:1:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "26834:22:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "26822:35:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$20476_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref"
                        }
                      },
                      "id": 22260,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "checkpointId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20473,
                      "src": "26822:48:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 22261,
                      "name": "_checkpointId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22200,
                      "src": "26874:13:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26822:65:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 22272,
                  "nodeType": "IfStatement",
                  "src": "26818:144:59",
                  "trueBody": {
                    "id": 22271,
                    "nodeType": "Block",
                    "src": "26889:73:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 22263,
                              "name": "checkpoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22198,
                              "src": "26910:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                                "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                              }
                            },
                            "id": 22268,
                            "indexExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 22267,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 22264,
                                  "name": "checkpoints",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22198,
                                  "src": "26922:11:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                                    "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                                  }
                                },
                                "id": 22265,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "26922:18:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 22266,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "26943:1:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "26922:22:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "26910:35:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Checkpoint_$20476_storage",
                              "typeString": "struct SecurityToken.Checkpoint storage ref"
                            }
                          },
                          "id": 22269,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 20475,
                          "src": "26910:41:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 22206,
                        "id": 22270,
                        "nodeType": "Return",
                        "src": "26903:48:59"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    22274
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 22274,
                      "name": "min",
                      "nodeType": "VariableDeclaration",
                      "scope": 22336,
                      "src": "26971:11:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 22273,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "26971:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 22276,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 22275,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "26985:1:59",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26971:15:59"
                },
                {
                  "assignments": [
                    22278
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 22278,
                      "name": "max",
                      "nodeType": "VariableDeclaration",
                      "scope": 22336,
                      "src": "26996:11:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 22277,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "26996:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 22283,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 22282,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 22279,
                        "name": "checkpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22198,
                        "src": "27010:11:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                        }
                      },
                      "id": 22280,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "27010:18:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 22281,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27031:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "27010:22:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26996:36:59"
                },
                {
                  "body": {
                    "id": 22328,
                    "nodeType": "Block",
                    "src": "27060:342:59",
                    "statements": [
                      {
                        "assignments": [
                          22288
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 22288,
                            "name": "mid",
                            "nodeType": "VariableDeclaration",
                            "scope": 22336,
                            "src": "27074:11:59",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 22287,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "27074:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 22295,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 22294,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 22291,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 22289,
                                  "name": "max",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22278,
                                  "src": "27089:3:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 22290,
                                  "name": "min",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22274,
                                  "src": "27095:3:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "27089:9:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 22292,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "27088:11:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 22293,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "27102:1:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "27088:15:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "27074:29:59"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 22301,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 22296,
                                "name": "checkpoints",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22198,
                                "src": "27121:11:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                                  "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                                }
                              },
                              "id": 22298,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 22297,
                                "name": "mid",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22288,
                                "src": "27133:3:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "27121:16:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$20476_storage",
                                "typeString": "struct SecurityToken.Checkpoint storage ref"
                              }
                            },
                            "id": 22299,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "checkpointId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 20473,
                            "src": "27121:29:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 22300,
                            "name": "_checkpointId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22200,
                            "src": "27154:13:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "27121:46:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 22308,
                        "nodeType": "IfStatement",
                        "src": "27117:117:59",
                        "trueBody": {
                          "id": 22307,
                          "nodeType": "Block",
                          "src": "27169:65:59",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 22304,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 22302,
                                  "name": "max",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22278,
                                  "src": "27187:3:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 22303,
                                  "name": "mid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22288,
                                  "src": "27193:3:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "27187:9:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 22305,
                              "nodeType": "ExpressionStatement",
                              "src": "27187:9:59"
                            },
                            {
                              "id": 22306,
                              "nodeType": "Break",
                              "src": "27214:5:59"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 22314,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 22309,
                                "name": "checkpoints",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22198,
                                "src": "27251:11:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                                  "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                                }
                              },
                              "id": 22311,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 22310,
                                "name": "mid",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22288,
                                "src": "27263:3:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "27251:16:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$20476_storage",
                                "typeString": "struct SecurityToken.Checkpoint storage ref"
                              }
                            },
                            "id": 22312,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "checkpointId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 20473,
                            "src": "27251:29:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 22313,
                            "name": "_checkpointId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22200,
                            "src": "27283:13:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "27251:45:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 22326,
                          "nodeType": "Block",
                          "src": "27350:42:59",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 22324,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 22322,
                                  "name": "max",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22278,
                                  "src": "27368:3:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 22323,
                                  "name": "mid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22288,
                                  "src": "27374:3:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "27368:9:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 22325,
                              "nodeType": "ExpressionStatement",
                              "src": "27368:9:59"
                            }
                          ]
                        },
                        "id": 22327,
                        "nodeType": "IfStatement",
                        "src": "27247:145:59",
                        "trueBody": {
                          "id": 22321,
                          "nodeType": "Block",
                          "src": "27298:46:59",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 22319,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 22315,
                                  "name": "min",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22274,
                                  "src": "27316:3:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 22318,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 22316,
                                    "name": "mid",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22288,
                                    "src": "27322:3:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 22317,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "27328:1:59",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "27322:7:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "27316:13:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 22320,
                              "nodeType": "ExpressionStatement",
                              "src": "27316:13:59"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 22286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 22284,
                      "name": "max",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22278,
                      "src": "27049:3:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 22285,
                      "name": "min",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22274,
                      "src": "27055:3:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "27049:9:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 22329,
                  "nodeType": "WhileStatement",
                  "src": "27042:360:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 22330,
                        "name": "checkpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22198,
                        "src": "27418:11:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                        }
                      },
                      "id": 22332,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 22331,
                        "name": "max",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22278,
                        "src": "27430:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "27418:16:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Checkpoint_$20476_storage",
                        "typeString": "struct SecurityToken.Checkpoint storage ref"
                      }
                    },
                    "id": 22333,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 20475,
                    "src": "27418:22:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 22206,
                  "id": 22334,
                  "nodeType": "Return",
                  "src": "27411:29:59"
                }
              ]
            },
            "documentation": "@notice Queries value at a defined checkpoint\n@param checkpoints is array of Checkpoint objects\n@param _checkpointId Checkpoint ID to query\n@param _currentValue Current value of checkpoint\n@return uint256",
            "id": 22336,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getValueAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22203,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22198,
                  "name": "checkpoints",
                  "nodeType": "VariableDeclaration",
                  "scope": 22336,
                  "src": "26169:32:59",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                    "typeString": "struct SecurityToken.Checkpoint[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 22196,
                      "name": "Checkpoint",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 20476,
                      "src": "26169:10:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Checkpoint_$20476_storage_ptr",
                        "typeString": "struct SecurityToken.Checkpoint"
                      }
                    },
                    "id": 22197,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "26169:12:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                      "typeString": "struct SecurityToken.Checkpoint[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22200,
                  "name": "_checkpointId",
                  "nodeType": "VariableDeclaration",
                  "scope": 22336,
                  "src": "26203:21:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22199,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26203:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22202,
                  "name": "_currentValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 22336,
                  "src": "26226:21:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22201,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26226:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26168:80:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 22206,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22205,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 22336,
                  "src": "26271:7:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22204,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26271:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26270:9:59"
            },
            "scope": 22357,
            "src": "26149:1298:59",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 22355,
              "nodeType": "Block",
              "src": "27731:102:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 22346,
                          "name": "checkpointBalances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20481,
                          "src": "27759:18:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct SecurityToken.Checkpoint storage ref[] storage ref)"
                          }
                        },
                        "id": 22348,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 22347,
                          "name": "_investor",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22338,
                          "src": "27778:9:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "27759:29:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 22349,
                        "name": "_checkpointId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22340,
                        "src": "27790:13:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 22351,
                            "name": "_investor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22338,
                            "src": "27815:9:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 22350,
                          "name": "balanceOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            22759
                          ],
                          "referencedDeclaration": 22759,
                          "src": "27805:9:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view returns (uint256)"
                          }
                        },
                        "id": 22352,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "27805:20:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 22345,
                      "name": "getValueAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22336,
                      "src": "27748:10:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (struct SecurityToken.Checkpoint storage ref[] storage pointer,uint256,uint256) view returns (uint256)"
                      }
                    },
                    "id": 22353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27748:78:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 22344,
                  "id": 22354,
                  "nodeType": "Return",
                  "src": "27741:85:59"
                }
              ]
            },
            "documentation": "@notice Queries balances as of a defined checkpoint\n@param _investor Investor to query balance for\n@param _checkpointId Checkpoint ID to query as of",
            "id": 22356,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "balanceOfAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22341,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22338,
                  "name": "_investor",
                  "nodeType": "VariableDeclaration",
                  "scope": 22356,
                  "src": "27660:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22337,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27660:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22340,
                  "name": "_checkpointId",
                  "nodeType": "VariableDeclaration",
                  "scope": 22356,
                  "src": "27679:21:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22339,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27679:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27659:42:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 22344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22343,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 22356,
                  "src": "27722:7:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22342,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27722:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27721:9:59"
            },
            "scope": 22357,
            "src": "27639:194:59",
            "stateMutability": "view",
            "superFunction": 10148,
            "visibility": "public"
          }
        ],
        "scope": 22358,
        "src": "928:26908:59"
      }
    ],
    "src": "0:27837:59"
  },
  "legacyAST": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/tokens/SecurityToken.sol",
    "exportedSymbols": {
      "SecurityToken": [
        22357
      ]
    },
    "id": 22358,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 20437,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:59"
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/Math.sol",
        "file": "openzeppelin-solidity/contracts/math/Math.sol",
        "id": 20438,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 22485,
        "src": "26:55:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IERC20.sol",
        "file": "../interfaces/IERC20.sol",
        "id": 20439,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 9553,
        "src": "82:34:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/ISecurityToken.sol",
        "file": "../interfaces/ISecurityToken.sol",
        "id": 20440,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 10160,
        "src": "117:42:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModule.sol",
        "file": "../interfaces/IModule.sol",
        "id": 20441,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 9718,
        "src": "160:35:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModuleFactory.sol",
        "file": "../interfaces/IModuleFactory.sol",
        "id": 20442,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 9955,
        "src": "196:42:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IModuleRegistry.sol",
        "file": "../interfaces/IModuleRegistry.sol",
        "id": 20443,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 9978,
        "src": "239:43:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IST20.sol",
        "file": "../interfaces/IST20.sol",
        "id": 20444,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 10049,
        "src": "283:33:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/TransferManager/ITransferManager.sol",
        "file": "../modules/TransferManager/ITransferManager.sol",
        "id": 20445,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 18395,
        "src": "317:57:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/PermissionManager/IPermissionManager.sol",
        "file": "../modules/PermissionManager/IPermissionManager.sol",
        "id": 20446,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 13325,
        "src": "375:61:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/ITokenBurner.sol",
        "file": "../interfaces/ITokenBurner.sol",
        "id": 20447,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 10296,
        "src": "437:40:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/RegistryUpdater.sol",
        "file": "../RegistryUpdater.sol",
        "id": 20448,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 677,
        "src": "478:32:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/ReentrancyGuard.sol",
        "file": "openzeppelin-solidity/contracts/ReentrancyGuard.sol",
        "id": 20449,
        "nodeType": "ImportDirective",
        "scope": 22358,
        "sourceUnit": 22414,
        "src": "511:61:59",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 20450,
              "name": "ISecurityToken",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10159,
              "src": "954:14:59",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                "typeString": "contract ISecurityToken"
              }
            },
            "id": 20451,
            "nodeType": "InheritanceSpecifier",
            "src": "954:14:59"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 20452,
              "name": "ReentrancyGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22413,
              "src": "970:15:59",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ReentrancyGuard_$22413",
                "typeString": "contract ReentrancyGuard"
              }
            },
            "id": 20453,
            "nodeType": "InheritanceSpecifier",
            "src": "970:15:59"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 20454,
              "name": "RegistryUpdater",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 676,
              "src": "987:15:59",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_RegistryUpdater_$676",
                "typeString": "contract RegistryUpdater"
              }
            },
            "id": 20455,
            "nodeType": "InheritanceSpecifier",
            "src": "987:15:59"
          }
        ],
        "contractDependencies": [
          676,
          10048,
          10159,
          22413,
          22664,
          22760,
          22794,
          22837,
          22869,
          23116
        ],
        "contractKind": "contract",
        "documentation": "@title Security Token contract\n@notice SecurityToken is an ERC20 token with added capabilities:\n@notice - Implements the ST-20 Interface\n@notice - Transfers are restricted\n@notice - Modules can be attached to it to control its behaviour\n@notice - ST should not be deployed directly, but rather the SecurityTokenRegistry should be used",
        "fullyImplemented": true,
        "id": 22357,
        "linearizedBaseContracts": [
          22357,
          676,
          22413,
          10159,
          22664,
          10048,
          22794,
          23116,
          22760,
          22837,
          22869
        ],
        "name": "SecurityToken",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 20458,
            "libraryName": {
              "contractScope": null,
              "id": 20456,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22578,
              "src": "1015:8:59",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$22578",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1009:27:59",
            "typeName": {
              "id": 20457,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1028:7:59",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "id": 20461,
            "name": "securityTokenVersion",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1042:54:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 20459,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1042:7:59",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "302e302e31",
              "id": 20460,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1089:7:59",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_ae209a0b48f21c054280f2455d32cf309387644879d9acbd8ffc199163811885",
                "typeString": "literal_string \"0.0.1\""
              },
              "value": "0.0.1"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 20463,
            "name": "tokenBurner",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1145:31:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_ITokenBurner_$10295",
              "typeString": "contract ITokenBurner"
            },
            "typeName": {
              "contractScope": null,
              "id": 20462,
              "name": "ITokenBurner",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 10295,
              "src": "1145:12:59",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ITokenBurner_$10295",
                "typeString": "contract ITokenBurner"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 20466,
            "name": "freeze",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1223:26:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 20464,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "1223:4:59",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "66616c7365",
              "id": 20465,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "bool",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1244:5:59",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "value": "false"
            },
            "visibility": "public"
          },
          {
            "canonicalName": "SecurityToken.ModuleData",
            "id": 20471,
            "members": [
              {
                "constant": false,
                "id": 20468,
                "name": "name",
                "nodeType": "VariableDeclaration",
                "scope": 20471,
                "src": "1284:12:59",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 20467,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1284:7:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 20470,
                "name": "moduleAddress",
                "nodeType": "VariableDeclaration",
                "scope": 20471,
                "src": "1306:21:59",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 20469,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1306:7:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "ModuleData",
            "nodeType": "StructDefinition",
            "scope": 22357,
            "src": "1256:78:59",
            "visibility": "public"
          },
          {
            "canonicalName": "SecurityToken.Checkpoint",
            "id": 20476,
            "members": [
              {
                "constant": false,
                "id": 20473,
                "name": "checkpointId",
                "nodeType": "VariableDeclaration",
                "scope": 20476,
                "src": "1449:20:59",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 20472,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1449:7:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 20475,
                "name": "value",
                "nodeType": "VariableDeclaration",
                "scope": 20476,
                "src": "1479:13:59",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 20474,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1479:7:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Checkpoint",
            "nodeType": "StructDefinition",
            "scope": 22357,
            "src": "1421:78:59",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 20481,
            "name": "checkpointBalances",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1505:59:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_$",
              "typeString": "mapping(address => struct SecurityToken.Checkpoint[])"
            },
            "typeName": {
              "id": 20480,
              "keyType": {
                "id": 20477,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1514:7:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1505:33:59",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_$",
                "typeString": "mapping(address => struct SecurityToken.Checkpoint[])"
              },
              "valueType": {
                "baseType": {
                  "contractScope": null,
                  "id": 20478,
                  "name": "Checkpoint",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 20476,
                  "src": "1525:10:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Checkpoint_$20476_storage_ptr",
                    "typeString": "struct SecurityToken.Checkpoint"
                  }
                },
                "id": 20479,
                "length": null,
                "nodeType": "ArrayTypeName",
                "src": "1525:12:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                  "typeString": "struct SecurityToken.Checkpoint[]"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 20484,
            "name": "checkpointTotalSupply",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1570:41:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage",
              "typeString": "struct SecurityToken.Checkpoint[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 20482,
                "name": "Checkpoint",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 20476,
                "src": "1570:10:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Checkpoint_$20476_storage_ptr",
                  "typeString": "struct SecurityToken.Checkpoint"
                }
              },
              "id": 20483,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "1570:12:59",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                "typeString": "struct SecurityToken.Checkpoint[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 20487,
            "name": "finishedIssuerMinting",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1618:41:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 20485,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "1618:4:59",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "66616c7365",
              "id": 20486,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "bool",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1654:5:59",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "value": "false"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 20490,
            "name": "finishedSTOMinting",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1665:38:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 20488,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "1665:4:59",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "66616c7365",
              "id": 20489,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "bool",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1698:5:59",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              },
              "value": "false"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 20494,
            "name": "transferFunctions",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1710:42:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$",
              "typeString": "mapping(bytes4 => bool)"
            },
            "typeName": {
              "id": 20493,
              "keyType": {
                "id": 20491,
                "name": "bytes4",
                "nodeType": "ElementaryTypeName",
                "src": "1719:6:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes4",
                  "typeString": "bytes4"
                }
              },
              "nodeType": "Mapping",
              "src": "1710:24:59",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$",
                "typeString": "mapping(bytes4 => bool)"
              },
              "valueType": {
                "id": 20492,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "1729:4:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 20499,
            "name": "modules",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1804:46:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
              "typeString": "mapping(uint8 => struct SecurityToken.ModuleData[])"
            },
            "typeName": {
              "id": 20498,
              "keyType": {
                "id": 20495,
                "name": "uint8",
                "nodeType": "ElementaryTypeName",
                "src": "1813:5:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint8",
                  "typeString": "uint8"
                }
              },
              "nodeType": "Mapping",
              "src": "1804:31:59",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                "typeString": "mapping(uint8 => struct SecurityToken.ModuleData[])"
              },
              "valueType": {
                "baseType": {
                  "contractScope": null,
                  "id": 20496,
                  "name": "ModuleData",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 20471,
                  "src": "1822:10:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_ModuleData_$20471_storage_ptr",
                    "typeString": "struct SecurityToken.ModuleData"
                  }
                },
                "id": 20497,
                "length": null,
                "nodeType": "ArrayTypeName",
                "src": "1822:12:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_ptr",
                  "typeString": "struct SecurityToken.ModuleData[]"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": true,
            "id": 20502,
            "name": "MAX_MODULES",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1857:38:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint8",
              "typeString": "uint8"
            },
            "typeName": {
              "id": 20500,
              "name": "uint8",
              "nodeType": "ElementaryTypeName",
              "src": "1857:5:59",
              "typeDescriptions": {
                "typeIdentifier": "t_uint8",
                "typeString": "uint8"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3230",
              "id": 20501,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "1893:2:59",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_20_by_1",
                "typeString": "int_const 20"
              },
              "value": "20"
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 20506,
            "name": "investorListed",
            "nodeType": "VariableDeclaration",
            "scope": 22357,
            "src": "1902:47:59",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 20505,
              "keyType": {
                "id": 20503,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1911:7:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1902:25:59",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 20504,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "1922:4:59",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20522,
            "name": "LogModuleAdded",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20521,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20508,
                  "indexed": true,
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "scope": 20522,
                  "src": "2032:19:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 20507,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2032:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20510,
                  "indexed": false,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 20522,
                  "src": "2061:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 20509,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2061:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20512,
                  "indexed": false,
                  "name": "_moduleFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 20522,
                  "src": "2084:22:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20511,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2084:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20514,
                  "indexed": false,
                  "name": "_module",
                  "nodeType": "VariableDeclaration",
                  "scope": 20522,
                  "src": "2116:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20513,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2116:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20516,
                  "indexed": false,
                  "name": "_moduleCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 20522,
                  "src": "2141:19:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20515,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2141:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20518,
                  "indexed": false,
                  "name": "_budget",
                  "nodeType": "VariableDeclaration",
                  "scope": 20522,
                  "src": "2170:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20517,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2170:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20520,
                  "indexed": false,
                  "name": "_timestamp",
                  "nodeType": "VariableDeclaration",
                  "scope": 20522,
                  "src": "2195:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20519,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2195:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2022:197:59"
            },
            "src": "2002:218:59"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20528,
            "name": "LogUpdateTokenDetails",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20527,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20524,
                  "indexed": false,
                  "name": "_oldDetails",
                  "nodeType": "VariableDeclaration",
                  "scope": 20528,
                  "src": "2301:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 20523,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2301:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20526,
                  "indexed": false,
                  "name": "_newDetails",
                  "nodeType": "VariableDeclaration",
                  "scope": 20528,
                  "src": "2321:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 20525,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2321:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2300:40:59"
            },
            "src": "2273:68:59"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20534,
            "name": "LogGranularityChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20533,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20530,
                  "indexed": false,
                  "name": "_oldGranularity",
                  "nodeType": "VariableDeclaration",
                  "scope": 20534,
                  "src": "2419:23:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20529,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2419:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20532,
                  "indexed": false,
                  "name": "_newGranularity",
                  "nodeType": "VariableDeclaration",
                  "scope": 20534,
                  "src": "2444:23:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20531,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2444:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2418:50:59"
            },
            "src": "2391:78:59"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20542,
            "name": "LogModuleRemoved",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20541,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20536,
                  "indexed": true,
                  "name": "_type",
                  "nodeType": "VariableDeclaration",
                  "scope": 20542,
                  "src": "2556:19:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 20535,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2556:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20538,
                  "indexed": false,
                  "name": "_module",
                  "nodeType": "VariableDeclaration",
                  "scope": 20542,
                  "src": "2577:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20537,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2577:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20540,
                  "indexed": false,
                  "name": "_timestamp",
                  "nodeType": "VariableDeclaration",
                  "scope": 20542,
                  "src": "2594:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20539,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2594:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2555:58:59"
            },
            "src": "2533:81:59"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20550,
            "name": "LogModuleBudgetChanged",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20549,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20544,
                  "indexed": true,
                  "name": "_moduleType",
                  "nodeType": "VariableDeclaration",
                  "scope": 20550,
                  "src": "2709:25:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 20543,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2709:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20546,
                  "indexed": false,
                  "name": "_module",
                  "nodeType": "VariableDeclaration",
                  "scope": 20550,
                  "src": "2736:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20545,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2736:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20548,
                  "indexed": false,
                  "name": "_budget",
                  "nodeType": "VariableDeclaration",
                  "scope": 20550,
                  "src": "2753:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20547,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2753:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2708:61:59"
            },
            "src": "2680:90:59"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20556,
            "name": "LogFreezeTransfers",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20555,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20552,
                  "indexed": false,
                  "name": "_freeze",
                  "nodeType": "VariableDeclaration",
                  "scope": 20556,
                  "src": "2846:12:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20551,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2846:4:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20554,
                  "indexed": false,
                  "name": "_timestamp",
                  "nodeType": "VariableDeclaration",
                  "scope": 20556,
                  "src": "2860:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20553,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2860:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2845:34:59"
            },
            "src": "2821:59:59"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20562,
            "name": "LogCheckpointCreated",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20561,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20558,
                  "indexed": true,
                  "name": "_checkpointId",
                  "nodeType": "VariableDeclaration",
                  "scope": 20562,
                  "src": "2952:29:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20557,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2952:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20560,
                  "indexed": false,
                  "name": "_timestamp",
                  "nodeType": "VariableDeclaration",
                  "scope": 20562,
                  "src": "2983:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20559,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2983:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2951:51:59"
            },
            "src": "2925:78:59"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20566,
            "name": "LogFinishMintingIssuer",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20565,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20564,
                  "indexed": false,
                  "name": "_timestamp",
                  "nodeType": "VariableDeclaration",
                  "scope": 20566,
                  "src": "3094:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20563,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3094:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3093:20:59"
            },
            "src": "3065:49:59"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20570,
            "name": "LogFinishMintingSTO",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20569,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20568,
                  "indexed": false,
                  "name": "_timestamp",
                  "nodeType": "VariableDeclaration",
                  "scope": 20570,
                  "src": "3200:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20567,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3200:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3199:20:59"
            },
            "src": "3174:46:59"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 20576,
            "name": "LogChangeSTRAddress",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 20575,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20572,
                  "indexed": true,
                  "name": "_oldAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 20576,
                  "src": "3307:27:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20571,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3307:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20574,
                  "indexed": true,
                  "name": "_newAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 20576,
                  "src": "3336:27:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20573,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3336:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3306:58:59"
            },
            "src": "3281:84:59"
          },
          {
            "body": {
              "id": 20656,
              "nodeType": "Block",
              "src": "3622:675:59",
              "statements": [
                {
                  "assignments": [
                    20583
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20583,
                      "name": "isModuleType",
                      "nodeType": "VariableDeclaration",
                      "scope": 20657,
                      "src": "3682:17:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 20582,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "3682:4:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20585,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 20584,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3702:5:59",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3682:25:59"
                },
                {
                  "body": {
                    "id": 20614,
                    "nodeType": "Block",
                    "src": "3773:109:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 20612,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 20599,
                            "name": "isModuleType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20583,
                            "src": "3787:12:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 20611,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 20600,
                              "name": "isModuleType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20583,
                              "src": "3802:12:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "||",
                            "rightExpression": {
                              "argumentTypes": null,
                              "components": [
                                {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "id": 20609,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 20601,
                                          "name": "modules",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 20499,
                                          "src": "3819:7:59",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                            "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                          }
                                        },
                                        "id": 20603,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 20602,
                                          "name": "_moduleType",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 20578,
                                          "src": "3827:11:59",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint8",
                                            "typeString": "uint8"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "3819:20:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                          "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                        }
                                      },
                                      "id": 20605,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 20604,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20587,
                                        "src": "3840:1:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "3819:23:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                                        "typeString": "struct SecurityToken.ModuleData storage ref"
                                      }
                                    },
                                    "id": 20606,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "moduleAddress",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 20470,
                                    "src": "3819:37:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20607,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 23131,
                                      "src": "3860:3:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 20608,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "3860:10:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "src": "3819:51:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                }
                              ],
                              "id": 20610,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "3818:53:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "3802:69:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "3787:84:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 20613,
                        "nodeType": "ExpressionStatement",
                        "src": "3787:84:59"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20595,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20590,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20587,
                      "src": "3735:1:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 20591,
                          "name": "modules",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20499,
                          "src": "3739:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                            "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                          }
                        },
                        "id": 20593,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 20592,
                          "name": "_moduleType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20578,
                          "src": "3747:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3739:20:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                        }
                      },
                      "id": 20594,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3739:27:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3735:31:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20615,
                  "initializationExpression": {
                    "assignments": [
                      20587
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 20587,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 20657,
                        "src": "3722:7:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 20586,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "3722:5:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 20589,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 20588,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3732:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "3722:11:59"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 20597,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "3768:3:59",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 20596,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20587,
                        "src": "3768:1:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 20598,
                    "nodeType": "ExpressionStatement",
                    "src": "3768:3:59"
                  },
                  "nodeType": "ForStatement",
                  "src": "3717:165:59"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 20619,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 20616,
                      "name": "_fallback",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20580,
                      "src": "3895:9:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 20618,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "3908:13:59",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 20617,
                        "name": "isModuleType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20583,
                        "src": "3909:12:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "3895:26:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 20653,
                    "nodeType": "Block",
                    "src": "4197:83:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 20649,
                              "name": "isModuleType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20583,
                              "src": "4219:12:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "53656e646572206973206e6f7420636f7272656374206d6f64756c652074797065",
                              "id": 20650,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4233:35:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_18ea84476249f5cf0264794bb4497de0f9386f65e85fd6aa7b9a26fda3f47826",
                                "typeString": "literal_string \"Sender is not correct module type\""
                              },
                              "value": "Sender is not correct module type"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_18ea84476249f5cf0264794bb4497de0f9386f65e85fd6aa7b9a26fda3f47826",
                                "typeString": "literal_string \"Sender is not correct module type\""
                              }
                            ],
                            "id": 20648,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              23134,
                              23135
                            ],
                            "referencedDeclaration": 23135,
                            "src": "4211:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 20651,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4211:58:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 20652,
                        "nodeType": "ExpressionStatement",
                        "src": "4211:58:59"
                      }
                    ]
                  },
                  "id": 20654,
                  "nodeType": "IfStatement",
                  "src": "3891:389:59",
                  "trueBody": {
                    "id": 20647,
                    "nodeType": "Block",
                    "src": "3923:268:59",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 20622,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 20620,
                            "name": "_moduleType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20578,
                            "src": "3941:11:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 20621,
                            "name": "STO_KEY",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10087,
                            "src": "3956:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "src": "3941:22:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                },
                                "id": 20642,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 20639,
                                    "name": "msg",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 23131,
                                    "src": "4137:3:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_magic_message",
                                      "typeString": "msg"
                                    }
                                  },
                                  "id": 20640,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "sender",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "4137:10:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 20641,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22582,
                                  "src": "4151:5:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "4137:19:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "hexValue": "53656e646572206973206e6f74206f776e6572",
                                "id": 20643,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4158:21:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_c31e61005312bc4f751533ef9aaa8e9a41448b72bb628fe51500ef66060b25c4",
                                  "typeString": "literal_string \"Sender is not owner\""
                                },
                                "value": "Sender is not owner"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_c31e61005312bc4f751533ef9aaa8e9a41448b72bb628fe51500ef66060b25c4",
                                  "typeString": "literal_string \"Sender is not owner\""
                                }
                              ],
                              "id": 20638,
                              "name": "require",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                23134,
                                23135
                              ],
                              "referencedDeclaration": 23135,
                              "src": "4129:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                "typeString": "function (bool,string memory) pure"
                              }
                            },
                            "id": 20644,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4129:51:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 20645,
                          "nodeType": "ExpressionStatement",
                          "src": "4129:51:59"
                        },
                        "id": 20646,
                        "nodeType": "IfStatement",
                        "src": "3937:243:59",
                        "trueBody": {
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "id": 20634,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 20629,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 20624,
                                        "name": "modules",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20499,
                                        "src": "3989:7:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                          "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                        }
                                      },
                                      "id": 20626,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 20625,
                                        "name": "_moduleType",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20578,
                                        "src": "3997:11:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "3989:20:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                        "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                      }
                                    },
                                    "id": 20627,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "length",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "3989:27:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 20628,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "4020:1:59",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "3989:32:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&&",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  "id": 20633,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 20630,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 23131,
                                      "src": "4025:3:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 20631,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "4025:10:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "==",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "id": 20632,
                                    "name": "owner",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22582,
                                    "src": "4039:5:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "src": "4025:19:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "src": "3989:55:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "hexValue": "53656e646572206973206e6f74206f776e6572206f722053544f206d6f64756c65206973206174746163686564",
                                "id": 20635,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "4046:47:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_27aa5ed9c12058eab3c15a7622391d8d8cf66ea7b8ce97824ef531556d7ebbe2",
                                  "typeString": "literal_string \"Sender is not owner or STO module is attached\""
                                },
                                "value": "Sender is not owner or STO module is attached"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_27aa5ed9c12058eab3c15a7622391d8d8cf66ea7b8ce97824ef531556d7ebbe2",
                                  "typeString": "literal_string \"Sender is not owner or STO module is attached\""
                                }
                              ],
                              "id": 20623,
                              "name": "require",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                23134,
                                23135
                              ],
                              "referencedDeclaration": 23135,
                              "src": "3981:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                "typeString": "function (bool,string memory) pure"
                              }
                            },
                            "id": 20636,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3981:113:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 20637,
                          "nodeType": "ExpressionStatement",
                          "src": "3981:113:59"
                        }
                      }
                    ]
                  }
                },
                {
                  "id": 20655,
                  "nodeType": "PlaceholderStatement",
                  "src": "4289:1:59"
                }
              ]
            },
            "documentation": null,
            "id": 20657,
            "name": "onlyModule",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 20581,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20578,
                  "name": "_moduleType",
                  "nodeType": "VariableDeclaration",
                  "scope": 20657,
                  "src": "3587:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 20577,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3587:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20580,
                  "name": "_fallback",
                  "nodeType": "VariableDeclaration",
                  "scope": 20657,
                  "src": "3606:14:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 20579,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3606:4:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3586:35:59"
            },
            "src": "3567:730:59",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20671,
              "nodeType": "Block",
              "src": "4346:118:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20666,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 20664,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 20662,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20659,
                            "src": "4364:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "%",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 20663,
                            "name": "granularity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10092,
                            "src": "4374:11:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "4364:21:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 20665,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "4389:1:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "4364:26:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "556e61626c6520746f206d6f6469667920746f6b656e2062616c616e6365732061742074686973206772616e756c6172697479",
                        "id": 20667,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4392:53:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_58b4cb5c3b872c2661ef43443d2a3bc9a81f03995da6b03c67ed8d670b6a9a2c",
                          "typeString": "literal_string \"Unable to modify token balances at this granularity\""
                        },
                        "value": "Unable to modify token balances at this granularity"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_58b4cb5c3b872c2661ef43443d2a3bc9a81f03995da6b03c67ed8d670b6a9a2c",
                          "typeString": "literal_string \"Unable to modify token balances at this granularity\""
                        }
                      ],
                      "id": 20661,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "4356:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20668,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4356:90:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20669,
                  "nodeType": "ExpressionStatement",
                  "src": "4356:90:59"
                },
                {
                  "id": 20670,
                  "nodeType": "PlaceholderStatement",
                  "src": "4456:1:59"
                }
              ]
            },
            "documentation": null,
            "id": 20672,
            "name": "checkGranularity",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 20660,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20659,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 20672,
                  "src": "4329:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20658,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4329:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4328:17:59"
            },
            "src": "4303:161:59",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20694,
              "nodeType": "Block",
              "src": "4703:233:59",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 20677,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 20674,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23131,
                        "src": "4717:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 20675,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4717:10:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 20676,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22582,
                      "src": "4731:5:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "4717:19:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 20691,
                    "nodeType": "Block",
                    "src": "4834:85:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 20687,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "4856:19:59",
                              "subExpression": {
                                "argumentTypes": null,
                                "id": 20686,
                                "name": "finishedSTOMinting",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20490,
                                "src": "4857:18:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4d696e74696e672069732066696e697368656420666f722053544f73",
                              "id": 20688,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4877:30:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_1b2eb8774382bd7c01e52ec9b26ebd3d636110a215a12592de5928013b58c623",
                                "typeString": "literal_string \"Minting is finished for STOs\""
                              },
                              "value": "Minting is finished for STOs"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_1b2eb8774382bd7c01e52ec9b26ebd3d636110a215a12592de5928013b58c623",
                                "typeString": "literal_string \"Minting is finished for STOs\""
                              }
                            ],
                            "id": 20685,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              23134,
                              23135
                            ],
                            "referencedDeclaration": 23135,
                            "src": "4848:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 20689,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4848:60:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 20690,
                        "nodeType": "ExpressionStatement",
                        "src": "4848:60:59"
                      }
                    ]
                  },
                  "id": 20692,
                  "nodeType": "IfStatement",
                  "src": "4713:206:59",
                  "trueBody": {
                    "id": 20684,
                    "nodeType": "Block",
                    "src": "4738:90:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 20680,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "4760:22:59",
                              "subExpression": {
                                "argumentTypes": null,
                                "id": 20679,
                                "name": "finishedIssuerMinting",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20487,
                                "src": "4761:21:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "4d696e74696e672069732066696e697368656420666f7220497373756572",
                              "id": 20681,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "4784:32:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c19de2e165bb1c8a94b3685a5659527ec56c0c30abe571d67de7f55d580e920e",
                                "typeString": "literal_string \"Minting is finished for Issuer\""
                              },
                              "value": "Minting is finished for Issuer"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_c19de2e165bb1c8a94b3685a5659527ec56c0c30abe571d67de7f55d580e920e",
                                "typeString": "literal_string \"Minting is finished for Issuer\""
                              }
                            ],
                            "id": 20678,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              23134,
                              23135
                            ],
                            "referencedDeclaration": 23135,
                            "src": "4752:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 20682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4752:65:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 20683,
                        "nodeType": "ExpressionStatement",
                        "src": "4752:65:59"
                      }
                    ]
                  }
                },
                {
                  "id": 20693,
                  "nodeType": "PlaceholderStatement",
                  "src": "4928:1:59"
                }
              ]
            },
            "documentation": null,
            "id": 20695,
            "name": "isMintingAllowed",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 20673,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4700:2:59"
            },
            "src": "4675:261:59",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20769,
              "nodeType": "Block",
              "src": "5628:486:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 20718,
                      "name": "updateFromRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 675,
                      "src": "5689:18:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 20719,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5689:20:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20720,
                  "nodeType": "ExpressionStatement",
                  "src": "5689:20:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20723,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20721,
                      "name": "tokenDetails",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10010,
                      "src": "5719:12:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20722,
                      "name": "_tokenDetails",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20705,
                      "src": "5734:13:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "5719:28:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 20724,
                  "nodeType": "ExpressionStatement",
                  "src": "5719:28:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20727,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 20725,
                      "name": "granularity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10092,
                      "src": "5757:11:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 20726,
                      "name": "_granularity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20703,
                      "src": "5771:12:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "5757:26:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20728,
                  "nodeType": "ExpressionStatement",
                  "src": "5757:26:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20737,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 20729,
                        "name": "transferFunctions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20494,
                        "src": "5793:17:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$",
                          "typeString": "mapping(bytes4 => bool)"
                        }
                      },
                      "id": 20735,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "7472616e7366657228616464726573732c75696e7432353629",
                                "id": 20732,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5828:27:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_a9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b",
                                  "typeString": "literal_string \"transfer(address,uint256)\""
                                },
                                "value": "transfer(address,uint256)"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_a9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b",
                                  "typeString": "literal_string \"transfer(address,uint256)\""
                                }
                              ],
                              "id": 20731,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23125,
                              "src": "5818:9:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                "typeString": "function () pure returns (bytes32)"
                              }
                            },
                            "id": 20733,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5818:38:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 20730,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5811:6:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes4_$",
                            "typeString": "type(bytes4)"
                          },
                          "typeName": "bytes4"
                        },
                        "id": 20734,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5811:46:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5793:65:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 20736,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5861:4:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "5793:72:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20738,
                  "nodeType": "ExpressionStatement",
                  "src": "5793:72:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 20739,
                        "name": "transferFunctions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20494,
                        "src": "5875:17:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$",
                          "typeString": "mapping(bytes4 => bool)"
                        }
                      },
                      "id": 20745,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "7472616e7366657246726f6d28616464726573732c616464726573732c75696e7432353629",
                                "id": 20742,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "5910:39:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_23b872dd7302113369cda2901243429419bec145408fa8b352b3dd92b66c680b",
                                  "typeString": "literal_string \"transferFrom(address,address,uint256)\""
                                },
                                "value": "transferFrom(address,address,uint256)"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_23b872dd7302113369cda2901243429419bec145408fa8b352b3dd92b66c680b",
                                  "typeString": "literal_string \"transferFrom(address,address,uint256)\""
                                }
                              ],
                              "id": 20741,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23125,
                              "src": "5900:9:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                "typeString": "function () pure returns (bytes32)"
                              }
                            },
                            "id": 20743,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5900:50:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 20740,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5893:6:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes4_$",
                            "typeString": "type(bytes4)"
                          },
                          "typeName": "bytes4"
                        },
                        "id": 20744,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5893:58:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5875:77:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 20746,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "5955:4:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "5875:84:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20748,
                  "nodeType": "ExpressionStatement",
                  "src": "5875:84:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20757,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 20749,
                        "name": "transferFunctions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20494,
                        "src": "5969:17:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$",
                          "typeString": "mapping(bytes4 => bool)"
                        }
                      },
                      "id": 20755,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "6d696e7428616464726573732c75696e7432353629",
                                "id": 20752,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6004:23:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_40c10f19c047ae7dfa66d6312b683d2ea3dfbcb4159e96b967c5f4b0a86f2842",
                                  "typeString": "literal_string \"mint(address,uint256)\""
                                },
                                "value": "mint(address,uint256)"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_40c10f19c047ae7dfa66d6312b683d2ea3dfbcb4159e96b967c5f4b0a86f2842",
                                  "typeString": "literal_string \"mint(address,uint256)\""
                                }
                              ],
                              "id": 20751,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23125,
                              "src": "5994:9:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                "typeString": "function () pure returns (bytes32)"
                              }
                            },
                            "id": 20753,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5994:34:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 20750,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "5987:6:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes4_$",
                            "typeString": "type(bytes4)"
                          },
                          "typeName": "bytes4"
                        },
                        "id": 20754,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5987:42:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "5969:61:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 20756,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6033:4:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "5969:68:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20758,
                  "nodeType": "ExpressionStatement",
                  "src": "5969:68:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20767,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 20759,
                        "name": "transferFunctions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20494,
                        "src": "6047:17:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$",
                          "typeString": "mapping(bytes4 => bool)"
                        }
                      },
                      "id": 20765,
                      "indexExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "6275726e2875696e7432353629",
                                "id": 20762,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6082:15:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_42966c689b5afe9b9b3f8a7103b2a19980d59629bfd6a20a60972312ed41d836",
                                  "typeString": "literal_string \"burn(uint256)\""
                                },
                                "value": "burn(uint256)"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_42966c689b5afe9b9b3f8a7103b2a19980d59629bfd6a20a60972312ed41d836",
                                  "typeString": "literal_string \"burn(uint256)\""
                                }
                              ],
                              "id": 20761,
                              "name": "keccak256",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23125,
                              "src": "6072:9:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                                "typeString": "function () pure returns (bytes32)"
                              }
                            },
                            "id": 20763,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6072:26:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 20760,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "6065:6:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes4_$",
                            "typeString": "type(bytes4)"
                          },
                          "typeName": "bytes4"
                        },
                        "id": 20764,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6065:34:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes4",
                          "typeString": "bytes4"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6047:53:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 20766,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6103:4:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "6047:60:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 20768,
                  "nodeType": "ExpressionStatement",
                  "src": "6047:60:59"
                }
              ]
            },
            "documentation": "@notice Constructor\n@param _name Name of the SecurityToken\n@param _symbol Symbol of the Token\n@param _decimals Decimals for the securityToken\n@param _granularity granular level of the token\n@param _tokenDetails Details of the token that are stored off-chain (IPFS hash)\n@param _polymathRegistry Contract address of the polymath registry",
            "id": 20770,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 20710,
                    "name": "_name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 20697,
                    "src": "5558:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 20711,
                    "name": "_symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 20699,
                    "src": "5565:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 20712,
                    "name": "_decimals",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 20701,
                    "src": "5574:9:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  }
                ],
                "id": 20713,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20709,
                  "name": "DetailedERC20",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22794,
                  "src": "5544:13:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_DetailedERC20_$22794_$",
                    "typeString": "type(contract DetailedERC20)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5544:40:59"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 20715,
                    "name": "_polymathRegistry",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 20707,
                    "src": "5605:17:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 20716,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20714,
                  "name": "RegistryUpdater",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 676,
                  "src": "5589:15:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_RegistryUpdater_$676_$",
                    "typeString": "type(contract RegistryUpdater)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5589:34:59"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20708,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20697,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 20770,
                  "src": "5366:12:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 20696,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5366:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20699,
                  "name": "_symbol",
                  "nodeType": "VariableDeclaration",
                  "scope": 20770,
                  "src": "5388:14:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 20698,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5388:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20701,
                  "name": "_decimals",
                  "nodeType": "VariableDeclaration",
                  "scope": 20770,
                  "src": "5412:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 20700,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "5412:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20703,
                  "name": "_granularity",
                  "nodeType": "VariableDeclaration",
                  "scope": 20770,
                  "src": "5437:20:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20702,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5437:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20705,
                  "name": "_tokenDetails",
                  "nodeType": "VariableDeclaration",
                  "scope": 20770,
                  "src": "5467:20:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 20704,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5467:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20707,
                  "name": "_polymathRegistry",
                  "nodeType": "VariableDeclaration",
                  "scope": 20770,
                  "src": "5497:25:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20706,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5497:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5356:172:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 20717,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5628:0:59"
            },
            "scope": 22357,
            "src": "5344:770:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 20792,
              "nodeType": "Block",
              "src": "6652:69:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20786,
                        "name": "_moduleFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20772,
                        "src": "6673:14:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20787,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20774,
                        "src": "6689:5:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20788,
                        "name": "_maxCost",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20776,
                        "src": "6696:8:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20789,
                        "name": "_budget",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20778,
                        "src": "6706:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes_calldata_ptr",
                          "typeString": "bytes calldata"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20785,
                      "name": "_addModule",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20902,
                      "src": "6662:10:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,bytes memory,uint256,uint256)"
                      }
                    },
                    "id": 20790,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6662:52:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20791,
                  "nodeType": "ExpressionStatement",
                  "src": "6662:52:59"
                }
              ]
            },
            "documentation": "@notice Function used to attach the module in security token\n@param _moduleFactory Contract address of the module factory that needs to be attached\n@param _data Data used for the intialization of the module factory variables\n@param _maxCost Maximum cost of the Module factory\n@param _budget Budget of the Module factory",
            "id": 20793,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 20781,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20780,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "6629:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6629:9:59"
              },
              {
                "arguments": null,
                "id": 20783,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20782,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22412,
                  "src": "6639:12:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6639:12:59"
              }
            ],
            "name": "addModule",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20779,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20772,
                  "name": "_moduleFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 20793,
                  "src": "6519:22:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20771,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6519:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20774,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 20793,
                  "src": "6551:11:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 20773,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6551:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20776,
                  "name": "_maxCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 20793,
                  "src": "6572:16:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20775,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6572:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20778,
                  "name": "_budget",
                  "nodeType": "VariableDeclaration",
                  "scope": 20793,
                  "src": "6598:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20777,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6598:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6509:110:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 20784,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6652:0:59"
            },
            "scope": 22357,
            "src": "6491:230:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 20901,
              "nodeType": "Block",
              "src": "7506:1172:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20808,
                        "name": "_moduleFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20795,
                        "src": "7628:14:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 20805,
                            "name": "moduleRegistry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 609,
                            "src": "7602:14:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 20804,
                          "name": "IModuleRegistry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9977,
                          "src": "7586:15:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IModuleRegistry_$9977_$",
                            "typeString": "type(contract IModuleRegistry)"
                          }
                        },
                        "id": 20806,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7586:31:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IModuleRegistry_$9977",
                          "typeString": "contract IModuleRegistry"
                        }
                      },
                      "id": 20807,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "useModule",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9961,
                      "src": "7586:41:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address) external"
                      }
                    },
                    "id": 20809,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7586:57:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20810,
                  "nodeType": "ExpressionStatement",
                  "src": "7586:57:59"
                },
                {
                  "assignments": [
                    20812
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20812,
                      "name": "moduleFactory",
                      "nodeType": "VariableDeclaration",
                      "scope": 20902,
                      "src": "7653:28:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                        "typeString": "contract IModuleFactory"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 20811,
                        "name": "IModuleFactory",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 9954,
                        "src": "7653:14:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                          "typeString": "contract IModuleFactory"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20816,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20814,
                        "name": "_moduleFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20795,
                        "src": "7699:14:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 20813,
                      "name": "IModuleFactory",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9954,
                      "src": "7684:14:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_contract$_IModuleFactory_$9954_$",
                        "typeString": "type(contract IModuleFactory)"
                      }
                    },
                    "id": 20815,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7684:30:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                      "typeString": "contract IModuleFactory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7653:61:59"
                },
                {
                  "assignments": [
                    20818
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20818,
                      "name": "moduleType",
                      "nodeType": "VariableDeclaration",
                      "scope": 20902,
                      "src": "7724:16:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      },
                      "typeName": {
                        "id": 20817,
                        "name": "uint8",
                        "nodeType": "ElementaryTypeName",
                        "src": "7724:5:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20822,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 20819,
                        "name": "moduleFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20812,
                        "src": "7743:13:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                          "typeString": "contract IModuleFactory"
                        }
                      },
                      "id": 20820,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getType",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9809,
                      "src": "7743:21:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint8_$",
                        "typeString": "function () view external returns (uint8)"
                      }
                    },
                    "id": 20821,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7743:23:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7724:42:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20829,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 20824,
                              "name": "modules",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20499,
                              "src": "7784:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                              }
                            },
                            "id": 20826,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 20825,
                              "name": "moduleType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20818,
                              "src": "7792:10:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7784:19:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                              "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                            }
                          },
                          "id": 20827,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "7784:26:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 20828,
                          "name": "MAX_MODULES",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20502,
                          "src": "7813:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "src": "7784:40:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4c696d6974206f66204d4158204d4f44554c45532069732072656163686564",
                        "id": 20830,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7826:33:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_22dca6cc98b2f56663821f48152354d934949af366941128c128092fc385789b",
                          "typeString": "literal_string \"Limit of MAX MODULES is reached\""
                        },
                        "value": "Limit of MAX MODULES is reached"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_22dca6cc98b2f56663821f48152354d934949af366941128c128092fc385789b",
                          "typeString": "literal_string \"Limit of MAX MODULES is reached\""
                        }
                      ],
                      "id": 20823,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "7776:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7776:84:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20832,
                  "nodeType": "ExpressionStatement",
                  "src": "7776:84:59"
                },
                {
                  "assignments": [
                    20834
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20834,
                      "name": "moduleCost",
                      "nodeType": "VariableDeclaration",
                      "scope": 20902,
                      "src": "7870:18:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 20833,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7870:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20838,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 20835,
                        "name": "moduleFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20812,
                        "src": "7891:13:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                          "typeString": "contract IModuleFactory"
                        }
                      },
                      "id": 20836,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setupCost",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9727,
                      "src": "7891:23:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 20837,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7891:25:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7870:46:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20842,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 20840,
                          "name": "moduleCost",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20834,
                          "src": "7934:10:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 20841,
                          "name": "_maxCost",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20799,
                          "src": "7948:8:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7934:22:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d617820436f737420697320616c776179732062652067726561746572207468616e206d6f64756c6520636f7374",
                        "id": 20843,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7958:48:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_90bdcbd1eae82678b05a05785b42cb078a37b23efb50052519b8f8f8daee9e4f",
                          "typeString": "literal_string \"Max Cost is always be greater than module cost\""
                        },
                        "value": "Max Cost is always be greater than module cost"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_90bdcbd1eae82678b05a05785b42cb078a37b23efb50052519b8f8f8daee9e4f",
                          "typeString": "literal_string \"Max Cost is always be greater than module cost\""
                        }
                      ],
                      "id": 20839,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "7926:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20844,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7926:81:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20845,
                  "nodeType": "ExpressionStatement",
                  "src": "7926:81:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 20851,
                            "name": "_moduleFactory",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20795,
                            "src": "8083:14:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 20852,
                            "name": "moduleCost",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20834,
                            "src": "8099:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20848,
                                "name": "polyToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 615,
                                "src": "8064:9:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 20847,
                              "name": "ERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22837,
                              "src": "8058:5:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC20_$22837_$",
                                "typeString": "type(contract ERC20)"
                              }
                            },
                            "id": 20849,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8058:16:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 20850,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "approve",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22828,
                          "src": "8058:24:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 20853,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8058:52:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f742061626c6520746f20617070726f766520746865206d6f64756c6520636f7374",
                        "id": 20854,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8112:37:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_11ebda84b718c1e17032ff96739c6d6235706a8e1578218e5e6f4a7e2005eab5",
                          "typeString": "literal_string \"Not able to approve the module cost\""
                        },
                        "value": "Not able to approve the module cost"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_11ebda84b718c1e17032ff96739c6d6235706a8e1578218e5e6f4a7e2005eab5",
                          "typeString": "literal_string \"Not able to approve the module cost\""
                        }
                      ],
                      "id": 20846,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "8050:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8050:100:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20856,
                  "nodeType": "ExpressionStatement",
                  "src": "8050:100:59"
                },
                {
                  "assignments": [
                    20858
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20858,
                      "name": "module",
                      "nodeType": "VariableDeclaration",
                      "scope": 20902,
                      "src": "8210:14:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 20857,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "8210:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20863,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20861,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20797,
                        "src": "8248:5:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 20859,
                        "name": "moduleFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20812,
                        "src": "8227:13:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                          "typeString": "contract IModuleFactory"
                        }
                      },
                      "id": 20860,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "deploy",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9804,
                      "src": "8227:20:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_address_$",
                        "typeString": "function (bytes memory) external returns (address)"
                      }
                    },
                    "id": 20862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8227:27:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8210:44:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 20869,
                            "name": "module",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20858,
                            "src": "8330:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 20870,
                            "name": "_budget",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20801,
                            "src": "8338:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 20866,
                                "name": "polyToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 615,
                                "src": "8311:9:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 20865,
                              "name": "ERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22837,
                              "src": "8305:5:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC20_$22837_$",
                                "typeString": "type(contract ERC20)"
                              }
                            },
                            "id": 20867,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8305:16:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 20868,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "approve",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22828,
                          "src": "8305:24:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 20871,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8305:41:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f742061626c6520746f20617070726f76652074686520627564676574",
                        "id": 20872,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8348:32:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_524ae74447c5c157d26c458a70f19c36827828baf5b9a2964a7996292f367fcf",
                          "typeString": "literal_string \"Not able to approve the budget\""
                        },
                        "value": "Not able to approve the budget"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_524ae74447c5c157d26c458a70f19c36827828baf5b9a2964a7996292f367fcf",
                          "typeString": "literal_string \"Not able to approve the budget\""
                        }
                      ],
                      "id": 20864,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "8297:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20873,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8297:84:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20874,
                  "nodeType": "ExpressionStatement",
                  "src": "8297:84:59"
                },
                {
                  "assignments": [
                    20876
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 20876,
                      "name": "moduleName",
                      "nodeType": "VariableDeclaration",
                      "scope": 20902,
                      "src": "8433:18:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 20875,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "8433:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 20880,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 20877,
                        "name": "moduleFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20812,
                        "src": "8454:13:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IModuleFactory_$9954",
                          "typeString": "contract IModuleFactory"
                        }
                      },
                      "id": 20878,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getName",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 9814,
                      "src": "8454:21:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$",
                        "typeString": "function () view external returns (bytes32)"
                      }
                    },
                    "id": 20879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8454:23:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8433:44:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 20886,
                            "name": "moduleName",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20876,
                            "src": "8523:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 20887,
                            "name": "module",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20858,
                            "src": "8535:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 20885,
                          "name": "ModuleData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20471,
                          "src": "8512:10:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_ModuleData_$20471_storage_ptr_$",
                            "typeString": "type(struct SecurityToken.ModuleData storage pointer)"
                          }
                        },
                        "id": 20888,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8512:30:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_ModuleData_$20471_memory",
                          "typeString": "struct SecurityToken.ModuleData memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_ModuleData_$20471_memory",
                          "typeString": "struct SecurityToken.ModuleData memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 20881,
                          "name": "modules",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20499,
                          "src": "8487:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                            "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                          }
                        },
                        "id": 20883,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 20882,
                          "name": "moduleType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20818,
                          "src": "8495:10:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "8487:19:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                        }
                      },
                      "id": 20884,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "8487:24:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_ModuleData_$20471_storage_$returns$_t_uint256_$",
                        "typeString": "function (struct SecurityToken.ModuleData storage ref) returns (uint256)"
                      }
                    },
                    "id": 20889,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8487:56:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20890,
                  "nodeType": "ExpressionStatement",
                  "src": "8487:56:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20892,
                        "name": "moduleType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20818,
                        "src": "8598:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20893,
                        "name": "moduleName",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20876,
                        "src": "8610:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20894,
                        "name": "_moduleFactory",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20795,
                        "src": "8622:14:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20895,
                        "name": "module",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20858,
                        "src": "8638:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20896,
                        "name": "moduleCost",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20834,
                        "src": "8646:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20897,
                        "name": "_budget",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20801,
                        "src": "8658:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20898,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "8667:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20891,
                      "name": "LogModuleAdded",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20522,
                      "src": "8583:14:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_bytes32_$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint8,bytes32,address,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 20899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8583:88:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20900,
                  "nodeType": "EmitStatement",
                  "src": "8578:93:59"
                }
              ]
            },
            "documentation": "@notice _addModule handles the attachment (or replacement) of modules for the ST\n@dev  E.G.: On deployment (through the STR) ST gets a TransferManager module attached to it\n@dev to control restrictions on transfers.\n@dev You are allowed to add a new moduleType if:\n@dev - there is no existing module of that type yet added\n@dev - the last member of the module list is replacable\n@param _moduleFactory is the address of the module factory to be added\n@param _data is data packed into bytes used to further configure the module (See STO usage)\n@param _maxCost max amount of POLY willing to pay to module. (WIP)",
            "id": 20902,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_addModule",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20802,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20795,
                  "name": "_moduleFactory",
                  "nodeType": "VariableDeclaration",
                  "scope": 20902,
                  "src": "7425:22:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20794,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7425:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20797,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 20902,
                  "src": "7449:11:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 20796,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7449:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20799,
                  "name": "_maxCost",
                  "nodeType": "VariableDeclaration",
                  "scope": 20902,
                  "src": "7462:16:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20798,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7462:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20801,
                  "name": "_budget",
                  "nodeType": "VariableDeclaration",
                  "scope": 20902,
                  "src": "7480:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20800,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7480:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7424:72:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 20803,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7506:0:59"
            },
            "scope": 22357,
            "src": "7405:1273:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 20975,
              "nodeType": "Block",
              "src": "8989:649:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20917,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 20912,
                          "name": "_moduleIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20906,
                          "src": "9007:12:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 20913,
                              "name": "modules",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20499,
                              "src": "9022:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                              }
                            },
                            "id": 20915,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 20914,
                              "name": "_moduleType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20904,
                              "src": "9030:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9022:20:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                              "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                            }
                          },
                          "id": 20916,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9022:27:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "9007:42:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6f64756c6520696e64657820646f65736e277420657869737420617320706572207468652063686f6f73656e206d6f64756c652074797065",
                        "id": 20918,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9059:59:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2c2b71fb37297b532fe6ad2499a7624af6231a453bb6b813ec9dd531487fa7d5",
                          "typeString": "literal_string \"Module index doesn't exist as per the choosen module type\""
                        },
                        "value": "Module index doesn't exist as per the choosen module type"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2c2b71fb37297b532fe6ad2499a7624af6231a453bb6b813ec9dd531487fa7d5",
                          "typeString": "literal_string \"Module index doesn't exist as per the choosen module type\""
                        }
                      ],
                      "id": 20911,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "8999:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20919,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8999:120:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20920,
                  "nodeType": "ExpressionStatement",
                  "src": "8999:120:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 20931,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 20922,
                                "name": "modules",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20499,
                                "src": "9137:7:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                  "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                }
                              },
                              "id": 20924,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 20923,
                                "name": "_moduleType",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20904,
                                "src": "9145:11:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "9137:20:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                              }
                            },
                            "id": 20926,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 20925,
                              "name": "_moduleIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20906,
                              "src": "9158:12:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9137:34:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                              "typeString": "struct SecurityToken.ModuleData storage ref"
                            }
                          },
                          "id": 20927,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "moduleAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 20470,
                          "src": "9137:48:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 20929,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9197:1:59",
                              "subdenomination": null,
                              "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": 20928,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "9189:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 20930,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "9189:10:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "9137:62:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6f64756c6520636f6e747261637420616464726573732073686f756c64206e6f74206265203078",
                        "id": 20932,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9209:42:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2079f97d089efa5c6ae574cb5c749cfd9f6fe18b9702363bcb14091aec9a3ff9",
                          "typeString": "literal_string \"Module contract address should not be 0x\""
                        },
                        "value": "Module contract address should not be 0x"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2079f97d089efa5c6ae574cb5c749cfd9f6fe18b9702363bcb14091aec9a3ff9",
                          "typeString": "literal_string \"Module contract address should not be 0x\""
                        }
                      ],
                      "id": 20921,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "9129:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 20933,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9129:123:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20934,
                  "nodeType": "ExpressionStatement",
                  "src": "9129:123:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 20936,
                        "name": "_moduleType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20904,
                        "src": "9393:11:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 20937,
                              "name": "modules",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20499,
                              "src": "9406:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                              }
                            },
                            "id": 20939,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 20938,
                              "name": "_moduleType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20904,
                              "src": "9414:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9406:20:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                              "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                            }
                          },
                          "id": 20941,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20940,
                            "name": "_moduleIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20906,
                            "src": "9427:12:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9406:34:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                            "typeString": "struct SecurityToken.ModuleData storage ref"
                          }
                        },
                        "id": 20942,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "moduleAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 20470,
                        "src": "9406:48:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 20943,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "9456:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 20935,
                      "name": "LogModuleRemoved",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20542,
                      "src": "9376:16:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (uint8,address,uint256)"
                      }
                    },
                    "id": 20944,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9376:84:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 20945,
                  "nodeType": "EmitStatement",
                  "src": "9371:89:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20961,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 20946,
                          "name": "modules",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20499,
                          "src": "9470:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                            "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                          }
                        },
                        "id": 20949,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 20947,
                          "name": "_moduleType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20904,
                          "src": "9478:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9470:20:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                        }
                      },
                      "id": 20950,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 20948,
                        "name": "_moduleIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20906,
                        "src": "9491:12:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9470:34:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                        "typeString": "struct SecurityToken.ModuleData storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 20951,
                          "name": "modules",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20499,
                          "src": "9507:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                            "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                          }
                        },
                        "id": 20953,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 20952,
                          "name": "_moduleType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20904,
                          "src": "9515:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9507:20:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                        }
                      },
                      "id": 20960,
                      "indexExpression": {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 20959,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 20954,
                              "name": "modules",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20499,
                              "src": "9528:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                              }
                            },
                            "id": 20956,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 20955,
                              "name": "_moduleType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20904,
                              "src": "9536:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9528:20:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                              "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                            }
                          },
                          "id": 20957,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "9528:27:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "31",
                          "id": 20958,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9558:1:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "9528:31:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "9507:53:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                        "typeString": "struct SecurityToken.ModuleData storage ref"
                      }
                    },
                    "src": "9470:90:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                      "typeString": "struct SecurityToken.ModuleData storage ref"
                    }
                  },
                  "id": 20962,
                  "nodeType": "ExpressionStatement",
                  "src": "9470:90:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 20973,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 20963,
                          "name": "modules",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20499,
                          "src": "9570:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                            "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                          }
                        },
                        "id": 20965,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 20964,
                          "name": "_moduleType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20904,
                          "src": "9578:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9570:20:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                        }
                      },
                      "id": 20966,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "9570:27:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 20972,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 20967,
                            "name": "modules",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20499,
                            "src": "9600:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                              "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                            }
                          },
                          "id": 20969,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 20968,
                            "name": "_moduleType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20904,
                            "src": "9608:11:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "9600:20:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                            "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                          }
                        },
                        "id": 20970,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9600:27:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 20971,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9630:1:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "9600:31:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9570:61:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 20974,
                  "nodeType": "ExpressionStatement",
                  "src": "9570:61:59"
                }
              ]
            },
            "documentation": "@notice Removes a module attached to the SecurityToken\n@param _moduleType is which type of module we are trying to remove\n@param _moduleIndex is the index of the module within the chosen type",
            "id": 20976,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 20909,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 20908,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "8979:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8979:9:59"
              }
            ],
            "name": "removeModule",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20907,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20904,
                  "name": "_moduleType",
                  "nodeType": "VariableDeclaration",
                  "scope": 20976,
                  "src": "8931:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 20903,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "8931:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20906,
                  "name": "_moduleIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 20976,
                  "src": "8950:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 20905,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "8950:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8930:39:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 20910,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8989:0:59"
            },
            "scope": 22357,
            "src": "8909:729:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 21016,
              "nodeType": "Block",
              "src": "10003:277:59",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 20992,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 20987,
                          "name": "modules",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20499,
                          "src": "10017:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                            "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                          }
                        },
                        "id": 20989,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 20988,
                          "name": "_moduleType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20978,
                          "src": "10025:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10017:20:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                        }
                      },
                      "id": 20990,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "10017:27:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 20991,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10047:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "10017:31:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 21014,
                    "nodeType": "Block",
                    "src": "10225:48:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "hexValue": "",
                              "id": 21008,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10247:2:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 21010,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10259:1:59",
                                  "subdenomination": null,
                                  "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": 21009,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "10251:7:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 21011,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "10251:10:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "id": 21012,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "10246:16:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_$_t_address_$",
                            "typeString": "tuple(literal_string \"\",address)"
                          }
                        },
                        "functionReturnParameters": 20986,
                        "id": 21013,
                        "nodeType": "Return",
                        "src": "10239:23:59"
                      }
                    ]
                  },
                  "id": 21015,
                  "nodeType": "IfStatement",
                  "src": "10013:260:59",
                  "trueBody": {
                    "id": 21007,
                    "nodeType": "Block",
                    "src": "10050:169:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20993,
                                    "name": "modules",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20499,
                                    "src": "10089:7:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                      "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                    }
                                  },
                                  "id": 20995,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 20994,
                                    "name": "_moduleType",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20978,
                                    "src": "10097:11:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "10089:20:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                    "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                  }
                                },
                                "id": 20997,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 20996,
                                  "name": "_moduleIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20980,
                                  "src": "10110:12:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "10089:34:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                                  "typeString": "struct SecurityToken.ModuleData storage ref"
                                }
                              },
                              "id": 20998,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "name",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 20468,
                              "src": "10089:39:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "baseExpression": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 20999,
                                    "name": "modules",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20499,
                                    "src": "10146:7:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                      "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                    }
                                  },
                                  "id": 21001,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 21000,
                                    "name": "_moduleType",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20978,
                                    "src": "10154:11:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "10146:20:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                    "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                  }
                                },
                                "id": 21003,
                                "indexExpression": {
                                  "argumentTypes": null,
                                  "id": 21002,
                                  "name": "_moduleIndex",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 20980,
                                  "src": "10167:12:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "10146:34:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                                  "typeString": "struct SecurityToken.ModuleData storage ref"
                                }
                              },
                              "id": 21004,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "moduleAddress",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 20470,
                              "src": "10146:48:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "id": 21005,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "10071:137:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bytes32_$_t_address_$",
                            "typeString": "tuple(bytes32,address)"
                          }
                        },
                        "functionReturnParameters": 20986,
                        "id": 21006,
                        "nodeType": "Return",
                        "src": "10064:144:59"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Returns module list for a module type\n@param _moduleType is which type of module we are trying to get\n@param _moduleIndex is the index of the module within the chosen type\n@return bytes32\n@return address",
            "id": 21017,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getModule",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 20981,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20978,
                  "name": "_moduleType",
                  "nodeType": "VariableDeclaration",
                  "scope": 21017,
                  "src": "9926:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 20977,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "9926:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20980,
                  "name": "_moduleIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 21017,
                  "src": "9945:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 20979,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "9945:4:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9925:38:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 20986,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 20983,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 21017,
                  "src": "9985:7:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 20982,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9985:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 20985,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 21017,
                  "src": "9994:7:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 20984,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9994:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9984:18:59"
            },
            "scope": 22357,
            "src": "9907:373:59",
            "stateMutability": "view",
            "superFunction": 10121,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21088,
              "nodeType": "Block",
              "src": "10665:480:59",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 21028,
                          "name": "modules",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20499,
                          "src": "10679:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                            "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                          }
                        },
                        "id": 21030,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 21029,
                          "name": "_moduleType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21019,
                          "src": "10687:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10679:20:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                        }
                      },
                      "id": 21031,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "10679:27:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 21032,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10709:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "10679:31:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 21086,
                    "nodeType": "Block",
                    "src": "11091:48:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "hexValue": "",
                              "id": 21080,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11113:2:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 21082,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11125:1:59",
                                  "subdenomination": null,
                                  "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": 21081,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "11117:7:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 21083,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11117:10:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "id": 21084,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "11112:16:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_$_t_address_$",
                            "typeString": "tuple(literal_string \"\",address)"
                          }
                        },
                        "functionReturnParameters": 21027,
                        "id": 21085,
                        "nodeType": "Return",
                        "src": "11105:23:59"
                      }
                    ]
                  },
                  "id": 21087,
                  "nodeType": "IfStatement",
                  "src": "10675:464:59",
                  "trueBody": {
                    "id": 21079,
                    "nodeType": "Block",
                    "src": "10712:373:59",
                    "statements": [
                      {
                        "body": {
                          "id": 21071,
                          "nodeType": "Block",
                          "src": "10784:254:59",
                          "statements": [
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 21054,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 21047,
                                        "name": "modules",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20499,
                                        "src": "10806:7:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                          "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                        }
                                      },
                                      "id": 21049,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 21048,
                                        "name": "_moduleType",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 21019,
                                        "src": "10814:11:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "10806:20:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                        "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                      }
                                    },
                                    "id": 21051,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 21050,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 21035,
                                      "src": "10827:1:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "10806:23:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                                      "typeString": "struct SecurityToken.ModuleData storage ref"
                                    }
                                  },
                                  "id": 21052,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "name",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 20468,
                                  "src": "10806:28:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 21053,
                                  "name": "_name",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21021,
                                  "src": "10838:5:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "10806:37:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 21070,
                              "nodeType": "IfStatement",
                              "src": "10802:222:59",
                              "trueBody": {
                                "id": 21069,
                                "nodeType": "Block",
                                "src": "10845:179:59",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 21055,
                                                "name": "modules",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20499,
                                                "src": "10896:7:59",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                                  "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                                }
                                              },
                                              "id": 21057,
                                              "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 21056,
                                                "name": "_moduleType",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 21019,
                                                "src": "10904:11:59",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "10896:20:59",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                                "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                              }
                                            },
                                            "id": 21059,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 21058,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 21035,
                                              "src": "10917:1:59",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "10896:23:59",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                                              "typeString": "struct SecurityToken.ModuleData storage ref"
                                            }
                                          },
                                          "id": 21060,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "name",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 20468,
                                          "src": "10896:28:59",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "baseExpression": {
                                                "argumentTypes": null,
                                                "id": 21061,
                                                "name": "modules",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 20499,
                                                "src": "10948:7:59",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                                  "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                                }
                                              },
                                              "id": 21063,
                                              "indexExpression": {
                                                "argumentTypes": null,
                                                "id": 21062,
                                                "name": "_moduleType",
                                                "nodeType": "Identifier",
                                                "overloadedDeclarations": [],
                                                "referencedDeclaration": 21019,
                                                "src": "10956:11:59",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint8",
                                                  "typeString": "uint8"
                                                }
                                              },
                                              "isConstant": false,
                                              "isLValue": true,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "IndexAccess",
                                              "src": "10948:20:59",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                                "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                              }
                                            },
                                            "id": 21065,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 21064,
                                              "name": "i",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 21035,
                                              "src": "10969:1:59",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "10948:23:59",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                                              "typeString": "struct SecurityToken.ModuleData storage ref"
                                            }
                                          },
                                          "id": 21066,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "moduleAddress",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 20470,
                                          "src": "10948:37:59",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                          }
                                        }
                                      ],
                                      "id": 21067,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "10872:133:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$_t_bytes32_$_t_address_$",
                                        "typeString": "tuple(bytes32,address)"
                                      }
                                    },
                                    "functionReturnParameters": 21027,
                                    "id": 21068,
                                    "nodeType": "Return",
                                    "src": "10865:140:59"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 21043,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 21038,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21035,
                            "src": "10746:1:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 21039,
                                "name": "modules",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20499,
                                "src": "10750:7:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                  "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                }
                              },
                              "id": 21041,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 21040,
                                "name": "_moduleType",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21019,
                                "src": "10758:11:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10750:20:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                              }
                            },
                            "id": 21042,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "10750:27:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10746:31:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 21072,
                        "initializationExpression": {
                          "assignments": [
                            21035
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 21035,
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 21089,
                              "src": "10731:9:59",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 21034,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "10731:7:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 21037,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 21036,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10743:1:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "10731:13:59"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 21045,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "10779:3:59",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 21044,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21035,
                              "src": "10779:1:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 21046,
                          "nodeType": "ExpressionStatement",
                          "src": "10779:3:59"
                        },
                        "nodeType": "ForStatement",
                        "src": "10726:312:59"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "components": [
                            {
                              "argumentTypes": null,
                              "hexValue": "",
                              "id": 21073,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11059:2:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 21075,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11071:1:59",
                                  "subdenomination": null,
                                  "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": 21074,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "11063:7:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": "address"
                              },
                              "id": 21076,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "11063:10:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "id": 21077,
                          "isConstant": false,
                          "isInlineArray": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "TupleExpression",
                          "src": "11058:16:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470_$_t_address_$",
                            "typeString": "tuple(literal_string \"\",address)"
                          }
                        },
                        "functionReturnParameters": 21027,
                        "id": 21078,
                        "nodeType": "Return",
                        "src": "11051:23:59"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice returns module list for a module name - will return first match\n@param _moduleType is which type of module we are trying to get\n@param _name is the name of the module within the chosen type\n@return bytes32\n@return address",
            "id": 21089,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getModuleByName",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21022,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21019,
                  "name": "_moduleType",
                  "nodeType": "VariableDeclaration",
                  "scope": 21089,
                  "src": "10592:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 21018,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "10592:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21021,
                  "name": "_name",
                  "nodeType": "VariableDeclaration",
                  "scope": 21089,
                  "src": "10611:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21020,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10611:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10591:34:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21027,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21024,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 21089,
                  "src": "10647:7:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21023,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10647:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21026,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 21089,
                  "src": "10656:7:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21025,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10656:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10646:18:59"
            },
            "scope": 22357,
            "src": "10567:578:59",
            "stateMutability": "view",
            "superFunction": 10132,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21107,
              "nodeType": "Block",
              "src": "11460:92:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21101,
                            "name": "owner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22582,
                            "src": "11504:5:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21102,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21091,
                            "src": "11511:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 21098,
                                "name": "polyToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 615,
                                "src": "11484:9:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 21097,
                              "name": "ERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22837,
                              "src": "11478:5:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC20_$22837_$",
                                "typeString": "type(contract ERC20)"
                              }
                            },
                            "id": 21099,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "11478:16:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 21100,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22860,
                          "src": "11478:25:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 21103,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11478:41:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e2d73756666696369656e742062616c616e6365",
                        "id": 21104,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11521:23:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_30a1bb60a0c6caf3e6f6f7b8691b64b76aa0d2ff7478fc897cfd6f5a122b1b2b",
                          "typeString": "literal_string \"In-sufficient balance\""
                        },
                        "value": "In-sufficient balance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_30a1bb60a0c6caf3e6f6f7b8691b64b76aa0d2ff7478fc897cfd6f5a122b1b2b",
                          "typeString": "literal_string \"In-sufficient balance\""
                        }
                      ],
                      "id": 21096,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "11470:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21105,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11470:75:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21106,
                  "nodeType": "ExpressionStatement",
                  "src": "11470:75:59"
                }
              ]
            },
            "documentation": "@notice allows the owner to withdraw unspent POLY stored by them on the ST.\n@dev Owner can transfer POLY to the ST which will be used to pay for modules that require a POLY fee.\n@param _amount amount of POLY to withdraw",
            "id": 21108,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 21094,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21093,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "11450:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11450:9:59"
              }
            ],
            "name": "withdrawPoly",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21092,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21091,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 21108,
                  "src": "11426:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21090,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11426:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11425:17:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21095,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11460:0:59"
            },
            "scope": 22357,
            "src": "11404:148:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21208,
              "nodeType": "Block",
              "src": "11852:835:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "id": 21122,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 21120,
                          "name": "_moduleType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21110,
                          "src": "11870:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 21121,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11885:1:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "11870:16:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d6f64756c6520747970652063616e6e6f74206265207a65726f",
                        "id": 21123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11888:28:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_22e5fe8e01473d297e25a2a1aee7f758126121ff74d7fafb2b5bccf21dbd9682",
                          "typeString": "literal_string \"Module type cannot be zero\""
                        },
                        "value": "Module type cannot be zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_22e5fe8e01473d297e25a2a1aee7f758126121ff74d7fafb2b5bccf21dbd9682",
                          "typeString": "literal_string \"Module type cannot be zero\""
                        }
                      ],
                      "id": 21119,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "11862:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21124,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11862:55:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21125,
                  "nodeType": "ExpressionStatement",
                  "src": "11862:55:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 21132,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 21127,
                          "name": "_moduleIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21112,
                          "src": "11935:12:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 21128,
                              "name": "modules",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20499,
                              "src": "11950:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                              }
                            },
                            "id": 21130,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21129,
                              "name": "_moduleType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21110,
                              "src": "11958:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "11950:20:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                              "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                            }
                          },
                          "id": 21131,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "11950:27:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "11935:42:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e636f727272656374206d6f64756c6520696e646578",
                        "id": 21133,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11979:25:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_246e30dbb9a00692967b4085cbb5fa5d23ee41ba746d906437cdc6324b067ad6",
                          "typeString": "literal_string \"Incorrrect module index\""
                        },
                        "value": "Incorrrect module index"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_246e30dbb9a00692967b4085cbb5fa5d23ee41ba746d906437cdc6324b067ad6",
                          "typeString": "literal_string \"Incorrrect module index\""
                        }
                      ],
                      "id": 21126,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "11927:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21134,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11927:78:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21135,
                  "nodeType": "ExpressionStatement",
                  "src": "11927:78:59"
                },
                {
                  "assignments": [
                    21137
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 21137,
                      "name": "_currentAllowance",
                      "nodeType": "VariableDeclaration",
                      "scope": 21209,
                      "src": "12015:25:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 21136,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "12015:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 21152,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21143,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23196,
                            "src": "12079:4:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_SecurityToken_$22357",
                              "typeString": "contract SecurityToken"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_SecurityToken_$22357",
                              "typeString": "contract SecurityToken"
                            }
                          ],
                          "id": 21142,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "12071:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 21144,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12071:13:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 21145,
                              "name": "modules",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20499,
                              "src": "12086:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                              }
                            },
                            "id": 21147,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21146,
                              "name": "_moduleType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21110,
                              "src": "12094:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "12086:20:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                              "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                            }
                          },
                          "id": 21149,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 21148,
                            "name": "_moduleIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21112,
                            "src": "12107:12:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12086:34:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                            "typeString": "struct SecurityToken.ModuleData storage ref"
                          }
                        },
                        "id": 21150,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "moduleAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 20470,
                        "src": "12086:48:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21139,
                            "name": "polyToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 615,
                            "src": "12050:9:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 21138,
                          "name": "IERC20",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 9552,
                          "src": "12043:6:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IERC20_$9552_$",
                            "typeString": "type(contract IERC20)"
                          }
                        },
                        "id": 21140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12043:17:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC20_$9552",
                          "typeString": "contract IERC20"
                        }
                      },
                      "id": 21141,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "allowance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22808,
                      "src": "12043:27:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address,address) view external returns (uint256)"
                      }
                    },
                    "id": 21151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12043:92:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12015:120:59"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21155,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 21153,
                      "name": "_budget",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21114,
                      "src": "12149:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 21154,
                      "name": "_currentAllowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21137,
                      "src": "12159:17:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12149:27:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 21195,
                    "nodeType": "Block",
                    "src": "12378:194:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 21181,
                                        "name": "modules",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20499,
                                        "src": "12435:7:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                          "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                        }
                                      },
                                      "id": 21183,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 21182,
                                        "name": "_moduleType",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 21110,
                                        "src": "12443:11:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "12435:20:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                        "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                      }
                                    },
                                    "id": 21185,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 21184,
                                      "name": "_moduleIndex",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 21112,
                                      "src": "12456:12:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "12435:34:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                                      "typeString": "struct SecurityToken.ModuleData storage ref"
                                    }
                                  },
                                  "id": 21186,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "moduleAddress",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 20470,
                                  "src": "12435:48:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 21189,
                                      "name": "_currentAllowance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 21137,
                                      "src": "12497:17:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 21187,
                                      "name": "_budget",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 21114,
                                      "src": "12485:7:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 21188,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sub",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22553,
                                    "src": "12485:11:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 21190,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "12485:30:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 21178,
                                      "name": "polyToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 615,
                                      "src": "12407:9:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 21177,
                                    "name": "IERC20",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9552,
                                    "src": "12400:6:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IERC20_$9552_$",
                                      "typeString": "type(contract IERC20)"
                                    }
                                  },
                                  "id": 21179,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "12400:17:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$9552",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 21180,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "increaseApproval",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9551,
                                "src": "12400:34:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) external returns (bool)"
                                }
                              },
                              "id": 21191,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12400:116:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "496e73756666696369656e742062616c616e636520746f20696e637265617365417070726f76616c",
                              "id": 21192,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12518:42:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_3b00cfda6eac0d5cac672a125e339ba8d9ee08603d0d23f305665757678226dc",
                                "typeString": "literal_string \"Insufficient balance to increaseApproval\""
                              },
                              "value": "Insufficient balance to increaseApproval"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_3b00cfda6eac0d5cac672a125e339ba8d9ee08603d0d23f305665757678226dc",
                                "typeString": "literal_string \"Insufficient balance to increaseApproval\""
                              }
                            ],
                            "id": 21176,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              23134,
                              23135
                            ],
                            "referencedDeclaration": 23135,
                            "src": "12392:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 21193,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12392:169:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 21194,
                        "nodeType": "ExpressionStatement",
                        "src": "12392:169:59"
                      }
                    ]
                  },
                  "id": 21196,
                  "nodeType": "IfStatement",
                  "src": "12145:427:59",
                  "trueBody": {
                    "id": 21175,
                    "nodeType": "Block",
                    "src": "12178:194:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 21161,
                                        "name": "modules",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20499,
                                        "src": "12235:7:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                          "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                        }
                                      },
                                      "id": 21163,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 21162,
                                        "name": "_moduleType",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 21110,
                                        "src": "12243:11:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "12235:20:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                        "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                      }
                                    },
                                    "id": 21165,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 21164,
                                      "name": "_moduleIndex",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 21112,
                                      "src": "12256:12:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "12235:34:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                                      "typeString": "struct SecurityToken.ModuleData storage ref"
                                    }
                                  },
                                  "id": 21166,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "moduleAddress",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 20470,
                                  "src": "12235:48:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 21169,
                                      "name": "_budget",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 21114,
                                      "src": "12307:7:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 21167,
                                      "name": "_currentAllowance",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 21137,
                                      "src": "12285:17:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 21168,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sub",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 22553,
                                    "src": "12285:21:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 21170,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "12285:30:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 21158,
                                      "name": "polyToken",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 615,
                                      "src": "12207:9:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 21157,
                                    "name": "IERC20",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9552,
                                    "src": "12200:6:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_IERC20_$9552_$",
                                      "typeString": "type(contract IERC20)"
                                    }
                                  },
                                  "id": 21159,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "12200:17:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_IERC20_$9552",
                                    "typeString": "contract IERC20"
                                  }
                                },
                                "id": 21160,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "decreaseApproval",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 9542,
                                "src": "12200:34:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) external returns (bool)"
                                }
                              },
                              "id": 21171,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "12200:116:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "496e73756666696369656e742062616c616e636520746f206465637265617365417070726f76616c",
                              "id": 21172,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12318:42:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f1a242750d5ca62923d53471e92c457415e83478e55fbb541dc14993793b903d",
                                "typeString": "literal_string \"Insufficient balance to decreaseApproval\""
                              },
                              "value": "Insufficient balance to decreaseApproval"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f1a242750d5ca62923d53471e92c457415e83478e55fbb541dc14993793b903d",
                                "typeString": "literal_string \"Insufficient balance to decreaseApproval\""
                              }
                            ],
                            "id": 21156,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              23134,
                              23135
                            ],
                            "referencedDeclaration": 23135,
                            "src": "12192:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 21173,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12192:169:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 21174,
                        "nodeType": "ExpressionStatement",
                        "src": "12192:169:59"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21198,
                        "name": "_moduleType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21110,
                        "src": "12609:11:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 21199,
                              "name": "modules",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20499,
                              "src": "12622:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                              }
                            },
                            "id": 21201,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21200,
                              "name": "_moduleType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21110,
                              "src": "12630:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "12622:20:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                              "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                            }
                          },
                          "id": 21203,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 21202,
                            "name": "_moduleIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21112,
                            "src": "12643:12:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "12622:34:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                            "typeString": "struct SecurityToken.ModuleData storage ref"
                          }
                        },
                        "id": 21204,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "moduleAddress",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 20470,
                        "src": "12622:48:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21205,
                        "name": "_budget",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21114,
                        "src": "12672:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21197,
                      "name": "LogModuleBudgetChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20550,
                      "src": "12586:22:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint8_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (uint8,address,uint256)"
                      }
                    },
                    "id": 21206,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12586:94:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21207,
                  "nodeType": "EmitStatement",
                  "src": "12581:99:59"
                }
              ]
            },
            "documentation": "@notice allows owner to approve more POLY to one of the modules\n@param _moduleType module type\n@param _moduleIndex module index\n@param _budget new budget",
            "id": 21209,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 21117,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21116,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "11842:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "11842:9:59"
              }
            ],
            "name": "changeModuleBudget",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21115,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21110,
                  "name": "_moduleType",
                  "nodeType": "VariableDeclaration",
                  "scope": 21209,
                  "src": "11779:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 21109,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "11779:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21112,
                  "name": "_moduleIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 21209,
                  "src": "11798:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 21111,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "11798:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21114,
                  "name": "_budget",
                  "nodeType": "VariableDeclaration",
                  "scope": 21209,
                  "src": "11818:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21113,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11818:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11778:56:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21118,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11852:0:59"
            },
            "scope": 22357,
            "src": "11751:936:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21225,
              "nodeType": "Block",
              "src": "12867:116:59",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21217,
                        "name": "tokenDetails",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10010,
                        "src": "12904:12:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21218,
                        "name": "_newTokenDetails",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21211,
                        "src": "12918:16:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_storage",
                          "typeString": "string storage ref"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 21216,
                      "name": "LogUpdateTokenDetails",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20528,
                      "src": "12882:21:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory,string memory)"
                      }
                    },
                    "id": 21219,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12882:53:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21220,
                  "nodeType": "EmitStatement",
                  "src": "12877:58:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21223,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21221,
                      "name": "tokenDetails",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10010,
                      "src": "12945:12:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21222,
                      "name": "_newTokenDetails",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21211,
                      "src": "12960:16:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "12945:31:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 21224,
                  "nodeType": "ExpressionStatement",
                  "src": "12945:31:59"
                }
              ]
            },
            "documentation": "@notice change the tokenDetails\n@param _newTokenDetails New token details",
            "id": 21226,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 21214,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21213,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "12857:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12857:9:59"
              }
            ],
            "name": "updateTokenDetails",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21212,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21211,
                  "name": "_newTokenDetails",
                  "nodeType": "VariableDeclaration",
                  "scope": 21226,
                  "src": "12825:23:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 21210,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "12825:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "12824:25:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21215,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12867:0:59"
            },
            "scope": 22357,
            "src": "12797:186:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21249,
              "nodeType": "Block",
              "src": "13182:170:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 21236,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 21234,
                          "name": "_granularity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21228,
                          "src": "13200:12:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 21235,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13216:1:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "13200:17:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4772616e756c61726974792063616e206e6f742062652030",
                        "id": 21237,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13219:26:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2d4731cbc00328ab390123e785f8142f724cfe715c557f1d89e769da378906ce",
                          "typeString": "literal_string \"Granularity can not be 0\""
                        },
                        "value": "Granularity can not be 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2d4731cbc00328ab390123e785f8142f724cfe715c557f1d89e769da378906ce",
                          "typeString": "literal_string \"Granularity can not be 0\""
                        }
                      ],
                      "id": 21233,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "13192:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21238,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13192:54:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21239,
                  "nodeType": "ExpressionStatement",
                  "src": "13192:54:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21241,
                        "name": "granularity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10092,
                        "src": "13283:11:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21242,
                        "name": "_granularity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21228,
                        "src": "13296:12:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21240,
                      "name": "LogGranularityChanged",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20534,
                      "src": "13261:21:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 21243,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13261:48:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21244,
                  "nodeType": "EmitStatement",
                  "src": "13256:53:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21247,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21245,
                      "name": "granularity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10092,
                      "src": "13319:11:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 21246,
                      "name": "_granularity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21228,
                      "src": "13333:12:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13319:26:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21248,
                  "nodeType": "ExpressionStatement",
                  "src": "13319:26:59"
                }
              ]
            },
            "documentation": "@notice allows owner to change token granularity\n@param _granularity granularity level of the token",
            "id": 21250,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 21231,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21230,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "13172:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "13172:9:59"
              }
            ],
            "name": "changeGranularity",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21228,
                  "name": "_granularity",
                  "nodeType": "VariableDeclaration",
                  "scope": 21250,
                  "src": "13143:20:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21227,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13143:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13142:22:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21232,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13182:0:59"
            },
            "scope": 22357,
            "src": "13116:236:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21332,
              "nodeType": "Block",
              "src": "13635:603:59",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 21267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 21261,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 21259,
                            "name": "_value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21256,
                            "src": "13650:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 21260,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13660:1:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "13650:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 21262,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "13649:13:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 21265,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 21263,
                            "name": "_from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21252,
                            "src": "13667:5:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 21264,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21254,
                            "src": "13676:3:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "13667:12:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 21266,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "13666:14:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "13649:31:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21270,
                  "nodeType": "IfStatement",
                  "src": "13645:68:59",
                  "trueBody": {
                    "id": 21269,
                    "nodeType": "Block",
                    "src": "13682:31:59",
                    "statements": [
                      {
                        "expression": null,
                        "functionReturnParameters": 21258,
                        "id": 21268,
                        "nodeType": "Return",
                        "src": "13696:7:59"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 21283,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 21275,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 21272,
                                "name": "_to",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21254,
                                "src": "13793:3:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 21271,
                              "name": "balanceOf",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                22759
                              ],
                              "referencedDeclaration": 22759,
                              "src": "13783:9:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                "typeString": "function (address) view returns (uint256)"
                              }
                            },
                            "id": 21273,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13783:14:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 21274,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13801:1:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "13783:19:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 21276,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "13782:21:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 21281,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 21277,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21254,
                            "src": "13808:3:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 21279,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13823:1:59",
                                "subdenomination": null,
                                "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": 21278,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "13815:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 21280,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13815:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "13808:17:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 21282,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "13807:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "13782:44:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21292,
                  "nodeType": "IfStatement",
                  "src": "13778:111:59",
                  "trueBody": {
                    "id": 21291,
                    "nodeType": "Block",
                    "src": "13828:61:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 21289,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 21284,
                            "name": "investorCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10096,
                            "src": "13842:13:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 21287,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "13876:1:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 21285,
                                "name": "investorCount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10096,
                                "src": "13858:13:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 21286,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "add",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22577,
                              "src": "13858:17:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 21288,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13858:20:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13842:36:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 21290,
                        "nodeType": "ExpressionStatement",
                        "src": "13842:36:59"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21297,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 21293,
                      "name": "_value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21256,
                      "src": "13964:6:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 21295,
                          "name": "_from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21252,
                          "src": "13984:5:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 21294,
                        "name": "balanceOf",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          22759
                        ],
                        "referencedDeclaration": 22759,
                        "src": "13974:9:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                          "typeString": "function (address) view returns (uint256)"
                        }
                      },
                      "id": 21296,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13974:16:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13964:26:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21306,
                  "nodeType": "IfStatement",
                  "src": "13960:93:59",
                  "trueBody": {
                    "id": 21305,
                    "nodeType": "Block",
                    "src": "13992:61:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 21303,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 21298,
                            "name": "investorCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10096,
                            "src": "14006:13:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 21301,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14040:1:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 21299,
                                "name": "investorCount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10096,
                                "src": "14022:13:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 21300,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 22553,
                              "src": "14022:17:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 21302,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14022:20:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14006:36:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 21304,
                        "nodeType": "ExpressionStatement",
                        "src": "14006:36:59"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 21317,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 21310,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "!",
                      "prefix": true,
                      "src": "14102:20:59",
                      "subExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 21307,
                          "name": "investorListed",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20506,
                          "src": "14103:14:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 21309,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 21308,
                          "name": "_to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21254,
                          "src": "14118:3:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14103:19:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "argumentTypes": null,
                      "components": [
                        {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          },
                          "id": 21315,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 21311,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21254,
                            "src": "14127:3:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 21313,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "14142:1:59",
                                "subdenomination": null,
                                "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": 21312,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "14134:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 21314,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14134:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "src": "14127:17:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        }
                      ],
                      "id": 21316,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "14126:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "14102:43:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21331,
                  "nodeType": "IfStatement",
                  "src": "14098:133:59",
                  "trueBody": {
                    "id": 21330,
                    "nodeType": "Block",
                    "src": "14147:84:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 21321,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21254,
                              "src": "14176:3:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 21318,
                              "name": "investors",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10099,
                              "src": "14161:9:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                "typeString": "address[] storage ref"
                              }
                            },
                            "id": 21320,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "14161:14:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_address_$returns$_t_uint256_$",
                              "typeString": "function (address) returns (uint256)"
                            }
                          },
                          "id": 21322,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14161:19:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 21323,
                        "nodeType": "ExpressionStatement",
                        "src": "14161:19:59"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 21328,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 21324,
                              "name": "investorListed",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 20506,
                              "src": "14194:14:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 21326,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 21325,
                              "name": "_to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21254,
                              "src": "14209:3:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "14194:19:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 21327,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14216:4:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "14194:26:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 21329,
                        "nodeType": "ExpressionStatement",
                        "src": "14194:26:59"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice keeps track of the number of non-zero token holders\n@param _from sender of transfer\n@param _to receiver of transfer\n@param _value value of transfer",
            "id": 21333,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "adjustInvestorCount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21257,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21252,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 21333,
                  "src": "13582:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21251,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13582:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21254,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 21333,
                  "src": "13597:11:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21253,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13597:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21256,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 21333,
                  "src": "13610:14:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21255,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13610:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "13581:44:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21258,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13635:0:59"
            },
            "scope": 22357,
            "src": "13553:685:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21402,
              "nodeType": "Block",
              "src": "14676:356:59",
              "statements": [
                {
                  "body": {
                    "id": 21400,
                    "nodeType": "Block",
                    "src": "14771:255:59",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "id": 21373,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 21363,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 21360,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21343,
                                  "src": "14790:1:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 21361,
                                    "name": "investors",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10099,
                                    "src": "14794:9:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                      "typeString": "address[] storage ref"
                                    }
                                  },
                                  "id": 21362,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "14794:16:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "14790:20:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 21364,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "14789:22:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "&&",
                          "rightExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 21371,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 21366,
                                        "name": "investors",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10099,
                                        "src": "14826:9:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                          "typeString": "address[] storage ref"
                                        }
                                      },
                                      "id": 21368,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 21367,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 21343,
                                        "src": "14836:1:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "14826:12:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 21365,
                                    "name": "balanceOf",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [
                                      22759
                                    ],
                                    "referencedDeclaration": 22759,
                                    "src": "14816:9:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                                      "typeString": "function (address) view returns (uint256)"
                                    }
                                  },
                                  "id": 21369,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "14816:23:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "30",
                                  "id": 21370,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "14843:1:59",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "14816:28:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 21372,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "14815:30:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "src": "14789:56:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 21399,
                        "nodeType": "IfStatement",
                        "src": "14785:231:59",
                        "trueBody": {
                          "id": 21398,
                          "nodeType": "Block",
                          "src": "14847:169:59",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 21380,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 21374,
                                    "name": "investorListed",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 20506,
                                    "src": "14865:14:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                      "typeString": "mapping(address => bool)"
                                    }
                                  },
                                  "id": 21378,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 21375,
                                      "name": "investors",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 10099,
                                      "src": "14880:9:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                        "typeString": "address[] storage ref"
                                      }
                                    },
                                    "id": 21377,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 21376,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 21343,
                                      "src": "14890:1:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "14880:12:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "14865:28:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "66616c7365",
                                  "id": 21379,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "14896:5:59",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "false"
                                },
                                "src": "14865:36:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 21381,
                              "nodeType": "ExpressionStatement",
                              "src": "14865:36:59"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 21391,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 21382,
                                    "name": "investors",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10099,
                                    "src": "14919:9:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                      "typeString": "address[] storage ref"
                                    }
                                  },
                                  "id": 21384,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 21383,
                                    "name": "i",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 21343,
                                    "src": "14929:1:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "14919:12:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 21385,
                                    "name": "investors",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10099,
                                    "src": "14934:9:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                      "typeString": "address[] storage ref"
                                    }
                                  },
                                  "id": 21390,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 21389,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 21386,
                                        "name": "investors",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10099,
                                        "src": "14944:9:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                          "typeString": "address[] storage ref"
                                        }
                                      },
                                      "id": 21387,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "length",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "14944:16:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "-",
                                    "rightExpression": {
                                      "argumentTypes": null,
                                      "hexValue": "31",
                                      "id": 21388,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "14963:1:59",
                                      "subdenomination": null,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "src": "14944:20:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "14934:31:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "src": "14919:46:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 21392,
                              "nodeType": "ExpressionStatement",
                              "src": "14919:46:59"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 21396,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "--",
                                "prefix": false,
                                "src": "14983:18:59",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 21393,
                                    "name": "investors",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 10099,
                                    "src": "14983:9:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                                      "typeString": "address[] storage ref"
                                    }
                                  },
                                  "id": 21395,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "length",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "14983:16:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 21397,
                              "nodeType": "ExpressionStatement",
                              "src": "14983:18:59"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21356,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 21346,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21343,
                      "src": "14711:1:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 21351,
                              "name": "_iters",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21337,
                              "src": "14738:6:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 21349,
                              "name": "_start",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21335,
                              "src": "14727:6:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 21350,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22577,
                            "src": "14727:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 21352,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14727:18:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21353,
                            "name": "investors",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10099,
                            "src": "14747:9:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_storage",
                              "typeString": "address[] storage ref"
                            }
                          },
                          "id": 21354,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "14747:16:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 21347,
                          "name": "Math",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22484,
                          "src": "14715:4:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Math_$22484_$",
                            "typeString": "type(library Math)"
                          }
                        },
                        "id": 21348,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "min256",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22483,
                        "src": "14715:11:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 21355,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "14715:49:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14711:53:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21401,
                  "initializationExpression": {
                    "assignments": [
                      21343
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 21343,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 21403,
                        "src": "14691:9:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 21342,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "14691:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 21345,
                    "initialValue": {
                      "argumentTypes": null,
                      "id": 21344,
                      "name": "_start",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21335,
                      "src": "14703:6:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "14691:18:59"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 21358,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "14766:3:59",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 21357,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21343,
                        "src": "14766:1:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 21359,
                    "nodeType": "ExpressionStatement",
                    "src": "14766:3:59"
                  },
                  "nodeType": "ForStatement",
                  "src": "14686:340:59"
                }
              ]
            },
            "documentation": "@notice removes addresses with zero balances from the investors list\n@param _start Index in investor list at which to start removing zero balances\n@param _iters Max number of iterations of the for loop\nNB - pruning this list will mean you may not be able to iterate over investors on-chain as of a historical checkpoint",
            "id": 21403,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 21340,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21339,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "14666:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "14666:9:59"
              }
            ],
            "name": "pruneInvestors",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21338,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21335,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 21403,
                  "src": "14627:14:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21334,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14627:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21337,
                  "name": "_iters",
                  "nodeType": "VariableDeclaration",
                  "scope": 21403,
                  "src": "14643:14:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21336,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14643:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "14626:32:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21341,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14676:0:59"
            },
            "scope": 22357,
            "src": "14603:429:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21411,
              "nodeType": "Block",
              "src": "15289:40:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 21408,
                      "name": "investors",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10099,
                      "src": "15306:9:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                        "typeString": "address[] storage ref"
                      }
                    },
                    "id": 21409,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "15306:16:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 21407,
                  "id": 21410,
                  "nodeType": "Return",
                  "src": "15299:23:59"
                }
              ]
            },
            "documentation": "@notice gets length of investors array\nNB - this length may differ from investorCount if list has not been pruned of zero balance investors\n@return length",
            "id": 21412,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInvestorsLength",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21404,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15257:2:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21407,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21406,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 21412,
                  "src": "15280:7:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21405,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15280:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "15279:9:59"
            },
            "scope": 22357,
            "src": "15230:99:59",
            "stateMutability": "view",
            "superFunction": 10158,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21431,
              "nodeType": "Block",
              "src": "15435:102:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21419,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "15453:7:59",
                        "subExpression": {
                          "argumentTypes": null,
                          "id": 21418,
                          "name": "freeze",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20466,
                          "src": "15454:6:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 21417,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "15445:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 21420,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15445:16:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21421,
                  "nodeType": "ExpressionStatement",
                  "src": "15445:16:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21424,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21422,
                      "name": "freeze",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20466,
                      "src": "15471:6:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 21423,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15480:4:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "15471:13:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21425,
                  "nodeType": "ExpressionStatement",
                  "src": "15471:13:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21427,
                        "name": "freeze",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20466,
                        "src": "15518:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21428,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "15526:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21426,
                      "name": "LogFreezeTransfers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20556,
                      "src": "15499:18:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bool_$_t_uint256_$returns$__$",
                        "typeString": "function (bool,uint256)"
                      }
                    },
                    "id": 21429,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15499:31:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21430,
                  "nodeType": "EmitStatement",
                  "src": "15494:36:59"
                }
              ]
            },
            "documentation": "@notice freeze all the transfers",
            "id": 21432,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 21415,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21414,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "15425:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15425:9:59"
              }
            ],
            "name": "freezeTransfers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21413,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15415:2:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21416,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15435:0:59"
            },
            "scope": 22357,
            "src": "15391:146:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21450,
              "nodeType": "Block",
              "src": "15648:102:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21438,
                        "name": "freeze",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20466,
                        "src": "15666:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 21437,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "15658:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 21439,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15658:15:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21440,
                  "nodeType": "ExpressionStatement",
                  "src": "15658:15:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21443,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21441,
                      "name": "freeze",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20466,
                      "src": "15683:6:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "66616c7365",
                      "id": 21442,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "15692:5:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "false"
                    },
                    "src": "15683:14:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21444,
                  "nodeType": "ExpressionStatement",
                  "src": "15683:14:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21446,
                        "name": "freeze",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20466,
                        "src": "15731:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21447,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "15739:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21445,
                      "name": "LogFreezeTransfers",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20556,
                      "src": "15712:18:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bool_$_t_uint256_$returns$__$",
                        "typeString": "function (bool,uint256)"
                      }
                    },
                    "id": 21448,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15712:31:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21449,
                  "nodeType": "EmitStatement",
                  "src": "15707:36:59"
                }
              ]
            },
            "documentation": "@notice un-freeze all the transfers",
            "id": 21451,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 21435,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21434,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "15638:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "15638:9:59"
              }
            ],
            "name": "unfreezeTransfers",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21433,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15628:2:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21436,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15648:0:59"
            },
            "scope": 22357,
            "src": "15602:148:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21460,
              "nodeType": "Block",
              "src": "15901:72:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21455,
                        "name": "checkpointTotalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20484,
                        "src": "15929:21:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 21456,
                          "name": "totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            22687
                          ],
                          "referencedDeclaration": 22687,
                          "src": "15952:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 21457,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "15952:13:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21454,
                      "name": "adjustCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21528,
                      "src": "15911:17:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct SecurityToken.Checkpoint storage ref[] storage pointer,uint256)"
                      }
                    },
                    "id": 21458,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15911:55:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21459,
                  "nodeType": "ExpressionStatement",
                  "src": "15911:55:59"
                }
              ]
            },
            "documentation": "@notice adjust totalsupply at checkpoint after minting or burning tokens",
            "id": 21461,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "adjustTotalSupplyCheckpoints",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21452,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15889:2:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21453,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15901:0:59"
            },
            "scope": 22357,
            "src": "15852:121:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21475,
              "nodeType": "Block",
              "src": "16198:87:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 21467,
                          "name": "checkpointBalances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20481,
                          "src": "16226:18:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct SecurityToken.Checkpoint storage ref[] storage ref)"
                          }
                        },
                        "id": 21469,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 21468,
                          "name": "_investor",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21463,
                          "src": "16245:9:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "16226:29:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21471,
                            "name": "_investor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21463,
                            "src": "16267:9:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 21470,
                          "name": "balanceOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            22759
                          ],
                          "referencedDeclaration": 22759,
                          "src": "16257:9:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view returns (uint256)"
                          }
                        },
                        "id": 21472,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "16257:20:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21466,
                      "name": "adjustCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21528,
                      "src": "16208:17:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (struct SecurityToken.Checkpoint storage ref[] storage pointer,uint256)"
                      }
                    },
                    "id": 21473,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16208:70:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21474,
                  "nodeType": "ExpressionStatement",
                  "src": "16208:70:59"
                }
              ]
            },
            "documentation": "@notice adjust token holder balance at checkpoint after a token transfer\n@param _investor address of the token holder affected",
            "id": 21476,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "adjustBalanceCheckpoints",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21463,
                  "name": "_investor",
                  "nodeType": "VariableDeclaration",
                  "scope": 21476,
                  "src": "16170:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21462,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16170:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16169:19:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21465,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16198:0:59"
            },
            "scope": 22357,
            "src": "16136:149:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21527,
              "nodeType": "Block",
              "src": "16582:817:59",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21486,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 21484,
                      "name": "currentCheckpointId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10094,
                      "src": "16629:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 21485,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16652:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "16629:24:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21489,
                  "nodeType": "IfStatement",
                  "src": "16625:61:59",
                  "trueBody": {
                    "id": 21488,
                    "nodeType": "Block",
                    "src": "16655:31:59",
                    "statements": [
                      {
                        "expression": null,
                        "functionReturnParameters": 21483,
                        "id": 21487,
                        "nodeType": "Return",
                        "src": "16669:7:59"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21493,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 21490,
                        "name": "_checkpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21479,
                        "src": "16778:12:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                        }
                      },
                      "id": 21491,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "16778:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 21492,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "16801:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "16778:24:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21505,
                  "nodeType": "IfStatement",
                  "src": "16774:247:59",
                  "trueBody": {
                    "id": 21504,
                    "nodeType": "Block",
                    "src": "16804:217:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 21498,
                                  "name": "currentCheckpointId",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 10094,
                                  "src": "16900:19:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 21499,
                                  "name": "_newValue",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21481,
                                  "src": "16948:9:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "id": 21497,
                                "name": "Checkpoint",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20476,
                                "src": "16853:10:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_struct$_Checkpoint_$20476_storage_ptr_$",
                                  "typeString": "type(struct SecurityToken.Checkpoint storage pointer)"
                                }
                              },
                              "id": 21500,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "structConstructorCall",
                              "lValueRequested": false,
                              "names": [
                                "checkpointId",
                                "value"
                              ],
                              "nodeType": "FunctionCall",
                              "src": "16853:123:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$20476_memory",
                                "typeString": "struct SecurityToken.Checkpoint memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Checkpoint_$20476_memory",
                                "typeString": "struct SecurityToken.Checkpoint memory"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 21494,
                              "name": "_checkpoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21479,
                              "src": "16818:12:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                                "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                              }
                            },
                            "id": 21496,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "push",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "16818:17:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_Checkpoint_$20476_storage_$returns$_t_uint256_$",
                              "typeString": "function (struct SecurityToken.Checkpoint storage ref) returns (uint256)"
                            }
                          },
                          "id": 21501,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16818:172:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 21502,
                        "nodeType": "ExpressionStatement",
                        "src": "16818:172:59"
                      },
                      {
                        "expression": null,
                        "functionReturnParameters": 21483,
                        "id": 21503,
                        "nodeType": "Return",
                        "src": "17004:7:59"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21514,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 21506,
                          "name": "_checkpoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21479,
                          "src": "17081:12:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                            "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                          }
                        },
                        "id": 21511,
                        "indexExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 21510,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21507,
                              "name": "_checkpoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21479,
                              "src": "17094:12:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                                "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                              }
                            },
                            "id": 21508,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "17094:19:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 21509,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "17116:1:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "17094:23:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "17081:37:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$20476_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref"
                        }
                      },
                      "id": 21512,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "checkpointId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20473,
                      "src": "17081:50:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 21513,
                      "name": "currentCheckpointId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10094,
                      "src": "17135:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17081:73:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21517,
                  "nodeType": "IfStatement",
                  "src": "17077:110:59",
                  "trueBody": {
                    "id": 21516,
                    "nodeType": "Block",
                    "src": "17156:31:59",
                    "statements": [
                      {
                        "expression": null,
                        "functionReturnParameters": 21483,
                        "id": 21515,
                        "nodeType": "Return",
                        "src": "17170:7:59"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21522,
                            "name": "currentCheckpointId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 10094,
                            "src": "17314:19:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21523,
                            "name": "_newValue",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21481,
                            "src": "17358:9:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 21521,
                          "name": "Checkpoint",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20476,
                          "src": "17271:10:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Checkpoint_$20476_storage_ptr_$",
                            "typeString": "type(struct SecurityToken.Checkpoint storage pointer)"
                          }
                        },
                        "id": 21524,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [
                          "checkpointId",
                          "value"
                        ],
                        "nodeType": "FunctionCall",
                        "src": "17271:111:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$20476_memory",
                          "typeString": "struct SecurityToken.Checkpoint memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Checkpoint_$20476_memory",
                          "typeString": "struct SecurityToken.Checkpoint memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 21518,
                        "name": "_checkpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21479,
                        "src": "17240:12:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                        }
                      },
                      "id": 21520,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "17240:17:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_Checkpoint_$20476_storage_$returns$_t_uint256_$",
                        "typeString": "function (struct SecurityToken.Checkpoint storage ref) returns (uint256)"
                      }
                    },
                    "id": 21525,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17240:152:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21526,
                  "nodeType": "ExpressionStatement",
                  "src": "17240:152:59"
                }
              ]
            },
            "documentation": "@notice store the changes to the checkpoint objects\n@param _checkpoints the affected checkpoint object array\n@param _newValue the new value that needs to be stored",
            "id": 21528,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "adjustCheckpoints",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21482,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21479,
                  "name": "_checkpoints",
                  "nodeType": "VariableDeclaration",
                  "scope": 21528,
                  "src": "16519:33:59",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                    "typeString": "struct SecurityToken.Checkpoint[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 21477,
                      "name": "Checkpoint",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 20476,
                      "src": "16519:10:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Checkpoint_$20476_storage_ptr",
                        "typeString": "struct SecurityToken.Checkpoint"
                      }
                    },
                    "id": 21478,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "16519:12:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                      "typeString": "struct SecurityToken.Checkpoint[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21481,
                  "name": "_newValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 21528,
                  "src": "16554:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21480,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16554:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16518:54:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21483,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16582:0:59"
            },
            "scope": 22357,
            "src": "16492:907:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 21573,
              "nodeType": "Block",
              "src": "17663:296:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 21538,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "17693:3:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 21539,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "17693:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21540,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21530,
                        "src": "17705:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21541,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21532,
                        "src": "17710:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21537,
                      "name": "adjustInvestorCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21333,
                      "src": "17673:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 21542,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17673:44:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21543,
                  "nodeType": "ExpressionStatement",
                  "src": "17673:44:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 21546,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "17750:3:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 21547,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "17750:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21548,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21530,
                            "src": "17762:3:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21549,
                            "name": "_value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21532,
                            "src": "17767:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 21545,
                          "name": "verifyTransfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            21755
                          ],
                          "referencedDeclaration": 21755,
                          "src": "17735:14:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) returns (bool)"
                          }
                        },
                        "id": 21550,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17735:39:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5472616e73666572206973206e6f742076616c6964",
                        "id": 21551,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17776:23:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c2b52aede81a61bfb2345b48703ab4dd0a83b05e6407bea4090bfcc23659ff5b",
                          "typeString": "literal_string \"Transfer is not valid\""
                        },
                        "value": "Transfer is not valid"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c2b52aede81a61bfb2345b48703ab4dd0a83b05e6407bea4090bfcc23659ff5b",
                          "typeString": "literal_string \"Transfer is not valid\""
                        }
                      ],
                      "id": 21544,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "17727:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17727:73:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21553,
                  "nodeType": "ExpressionStatement",
                  "src": "17727:73:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 21555,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "17835:3:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 21556,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "17835:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 21554,
                      "name": "adjustBalanceCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21476,
                      "src": "17810:24:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 21557,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17810:36:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21558,
                  "nodeType": "ExpressionStatement",
                  "src": "17810:36:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21560,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21530,
                        "src": "17881:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 21559,
                      "name": "adjustBalanceCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21476,
                      "src": "17856:24:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 21561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17856:29:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21562,
                  "nodeType": "ExpressionStatement",
                  "src": "17856:29:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21566,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21530,
                            "src": "17918:3:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21567,
                            "name": "_value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21532,
                            "src": "17923:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 21564,
                            "name": "super",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23197,
                            "src": "17903:5:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_super$_SecurityToken_$22357",
                              "typeString": "contract super SecurityToken"
                            }
                          },
                          "id": 21565,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22747,
                          "src": "17903:14:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) returns (bool)"
                          }
                        },
                        "id": 21568,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17903:27:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 21563,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "17895:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 21569,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17895:36:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21570,
                  "nodeType": "ExpressionStatement",
                  "src": "17895:36:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 21571,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "17948:4:59",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 21536,
                  "id": 21572,
                  "nodeType": "Return",
                  "src": "17941:11:59"
                }
              ]
            },
            "documentation": "@notice Overloaded version of the transfer function\n@param _to receiver of transfer\n@param _value value of transfer\n@return bool success",
            "id": 21574,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "transfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21533,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21530,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 21574,
                  "src": "17604:11:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21529,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17604:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21532,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 21574,
                  "src": "17617:14:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21531,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17617:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17603:29:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21536,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21535,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 21574,
                  "src": "17649:12:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21534,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "17649:4:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "17648:14:59"
            },
            "scope": 22357,
            "src": "17586:373:59",
            "stateMutability": "nonpayable",
            "superFunction": 22747,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21619,
              "nodeType": "Block",
              "src": "18285:292:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21586,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21576,
                        "src": "18315:5:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21587,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21578,
                        "src": "18322:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21588,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21580,
                        "src": "18327:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21585,
                      "name": "adjustInvestorCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21333,
                      "src": "18295:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 21589,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18295:39:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21590,
                  "nodeType": "ExpressionStatement",
                  "src": "18295:39:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21593,
                            "name": "_from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21576,
                            "src": "18367:5:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21594,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21578,
                            "src": "18374:3:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21595,
                            "name": "_value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21580,
                            "src": "18379:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 21592,
                          "name": "verifyTransfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            21755
                          ],
                          "referencedDeclaration": 21755,
                          "src": "18352:14:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) returns (bool)"
                          }
                        },
                        "id": 21596,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18352:34:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5472616e73666572206973206e6f742076616c6964",
                        "id": 21597,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "18388:23:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c2b52aede81a61bfb2345b48703ab4dd0a83b05e6407bea4090bfcc23659ff5b",
                          "typeString": "literal_string \"Transfer is not valid\""
                        },
                        "value": "Transfer is not valid"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c2b52aede81a61bfb2345b48703ab4dd0a83b05e6407bea4090bfcc23659ff5b",
                          "typeString": "literal_string \"Transfer is not valid\""
                        }
                      ],
                      "id": 21591,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "18344:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18344:68:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21599,
                  "nodeType": "ExpressionStatement",
                  "src": "18344:68:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21601,
                        "name": "_from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21576,
                        "src": "18447:5:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 21600,
                      "name": "adjustBalanceCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21476,
                      "src": "18422:24:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 21602,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18422:31:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21603,
                  "nodeType": "ExpressionStatement",
                  "src": "18422:31:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21605,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21578,
                        "src": "18488:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 21604,
                      "name": "adjustBalanceCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21476,
                      "src": "18463:24:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 21606,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18463:29:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21607,
                  "nodeType": "ExpressionStatement",
                  "src": "18463:29:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 21611,
                            "name": "_from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21576,
                            "src": "18529:5:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21612,
                            "name": "_to",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21578,
                            "src": "18536:3:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21613,
                            "name": "_value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21580,
                            "src": "18541:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 21609,
                            "name": "super",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23197,
                            "src": "18510:5:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_super$_SecurityToken_$22357",
                              "typeString": "contract super SecurityToken"
                            }
                          },
                          "id": 21610,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22969,
                          "src": "18510:18:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) returns (bool)"
                          }
                        },
                        "id": 21614,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "18510:38:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 21608,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "18502:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 21615,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18502:47:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21616,
                  "nodeType": "ExpressionStatement",
                  "src": "18502:47:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 21617,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "18566:4:59",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 21584,
                  "id": 21618,
                  "nodeType": "Return",
                  "src": "18559:11:59"
                }
              ]
            },
            "documentation": "@notice Overloaded version of the transferFrom function\n@param _from sender of transfer\n@param _to receiver of transfer\n@param _value value of transfer\n@return bool success",
            "id": 21620,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "transferFrom",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21581,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21576,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 21620,
                  "src": "18211:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21575,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18211:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21578,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 21620,
                  "src": "18226:11:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21577,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18226:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21580,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 21620,
                  "src": "18239:14:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21579,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18239:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18210:44:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21584,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21583,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 21620,
                  "src": "18271:12:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21582,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18271:4:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18270:14:59"
            },
            "scope": 22357,
            "src": "18189:388:59",
            "stateMutability": "nonpayable",
            "superFunction": 22969,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21754,
              "nodeType": "Block",
              "src": "18978:1097:59",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 21635,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "18992:7:59",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 21634,
                      "name": "freeze",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20466,
                      "src": "18993:6:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21751,
                  "nodeType": "IfStatement",
                  "src": "18988:1061:59",
                  "trueBody": {
                    "id": 21750,
                    "nodeType": "Block",
                    "src": "19001:1048:59",
                    "statements": [
                      {
                        "assignments": [
                          21637
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 21637,
                            "name": "isTransfer",
                            "nodeType": "VariableDeclaration",
                            "scope": 21755,
                            "src": "19015:15:59",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 21636,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "19015:4:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 21639,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 21638,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19033:5:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19015:23:59"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 21640,
                            "name": "transferFunctions",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20494,
                            "src": "19056:17:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes4_$_t_bool_$",
                              "typeString": "mapping(bytes4 => bool)"
                            }
                          },
                          "id": 21645,
                          "indexExpression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 21642,
                                  "name": "msg",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 23131,
                                  "src": "19081:3:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_magic_message",
                                    "typeString": "msg"
                                  }
                                },
                                "id": 21643,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "data",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "19081:8:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bytes_calldata_ptr",
                                  "typeString": "bytes calldata"
                                }
                              ],
                              "id": 21641,
                              "name": "getSig",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22147,
                              "src": "19074:6:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
                                "typeString": "function (bytes memory) pure returns (bytes4)"
                              }
                            },
                            "id": 21644,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "19074:16:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "19056:35:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 21651,
                        "nodeType": "IfStatement",
                        "src": "19052:89:59",
                        "trueBody": {
                          "id": 21650,
                          "nodeType": "Block",
                          "src": "19093:48:59",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 21648,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 21646,
                                  "name": "isTransfer",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21637,
                                  "src": "19109:10:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "hexValue": "74727565",
                                  "id": 21647,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "19122:4:59",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "true"
                                },
                                "src": "19109:17:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 21649,
                              "nodeType": "ExpressionStatement",
                              "src": "19109:17:59"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 21657,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 21652,
                                "name": "modules",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20499,
                                "src": "19158:7:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                  "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                }
                              },
                              "id": 21654,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 21653,
                                "name": "TRANSFERMANAGER_KEY",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10084,
                                "src": "19166:19:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "19158:28:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                              }
                            },
                            "id": 21655,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "19158:35:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 21656,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19197:1:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "19158:40:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 21661,
                        "nodeType": "IfStatement",
                        "src": "19154:90:59",
                        "trueBody": {
                          "id": 21660,
                          "nodeType": "Block",
                          "src": "19200:44:59",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "74727565",
                                "id": 21658,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "19225:4:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "functionReturnParameters": 21633,
                              "id": 21659,
                              "nodeType": "Return",
                              "src": "19218:11:59"
                            }
                          ]
                        }
                      },
                      {
                        "assignments": [
                          21663
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 21663,
                            "name": "isInvalid",
                            "nodeType": "VariableDeclaration",
                            "scope": 21755,
                            "src": "19257:14:59",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 21662,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "19257:4:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 21665,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 21664,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19274:5:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19257:22:59"
                      },
                      {
                        "assignments": [
                          21667
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 21667,
                            "name": "isValid",
                            "nodeType": "VariableDeclaration",
                            "scope": 21755,
                            "src": "19293:12:59",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 21666,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "19293:4:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 21669,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 21668,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19308:5:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19293:20:59"
                      },
                      {
                        "assignments": [
                          21671
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 21671,
                            "name": "isForceValid",
                            "nodeType": "VariableDeclaration",
                            "scope": 21755,
                            "src": "19327:17:59",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 21670,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "19327:4:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 21673,
                        "initialValue": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 21672,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "19347:5:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19327:25:59"
                      },
                      {
                        "body": {
                          "id": 21739,
                          "nodeType": "Block",
                          "src": "19430:539:59",
                          "statements": [
                            {
                              "assignments": [
                                21690
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 21690,
                                  "name": "valid",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 21755,
                                  "src": "19448:29:59",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Result_$18358",
                                    "typeString": "enum ITransferManager.Result"
                                  },
                                  "typeName": {
                                    "contractScope": null,
                                    "id": 21689,
                                    "name": "ITransferManager.Result",
                                    "nodeType": "UserDefinedTypeName",
                                    "referencedDeclaration": 18358,
                                    "src": "19448:23:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_enum$_Result_$18358",
                                      "typeString": "enum ITransferManager.Result"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                }
                              ],
                              "id": 21705,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 21700,
                                    "name": "_from",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 21622,
                                    "src": "19559:5:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 21701,
                                    "name": "_to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 21624,
                                    "src": "19566:3:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 21702,
                                    "name": "_amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 21626,
                                    "src": "19571:7:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 21703,
                                    "name": "isTransfer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 21637,
                                    "src": "19580:10:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "baseExpression": {
                                            "argumentTypes": null,
                                            "baseExpression": {
                                              "argumentTypes": null,
                                              "id": 21692,
                                              "name": "modules",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 20499,
                                              "src": "19497:7:59",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                                "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                              }
                                            },
                                            "id": 21694,
                                            "indexExpression": {
                                              "argumentTypes": null,
                                              "id": 21693,
                                              "name": "TRANSFERMANAGER_KEY",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 10084,
                                              "src": "19505:19:59",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint8",
                                                "typeString": "uint8"
                                              }
                                            },
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "nodeType": "IndexAccess",
                                            "src": "19497:28:59",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                              "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                            }
                                          },
                                          "id": 21696,
                                          "indexExpression": {
                                            "argumentTypes": null,
                                            "id": 21695,
                                            "name": "i",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 21675,
                                            "src": "19526:1:59",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint8",
                                              "typeString": "uint8"
                                            }
                                          },
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "IndexAccess",
                                          "src": "19497:31:59",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                                            "typeString": "struct SecurityToken.ModuleData storage ref"
                                          }
                                        },
                                        "id": 21697,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "moduleAddress",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 20470,
                                        "src": "19497:45:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 21691,
                                      "name": "ITransferManager",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 18394,
                                      "src": "19480:16:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ITransferManager_$18394_$",
                                        "typeString": "type(contract ITransferManager)"
                                      }
                                    },
                                    "id": 21698,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "19480:63:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ITransferManager_$18394",
                                      "typeString": "contract ITransferManager"
                                    }
                                  },
                                  "id": 21699,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "verifyTransfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 18371,
                                  "src": "19480:78:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bool_$returns$_t_enum$_Result_$18358_$",
                                    "typeString": "function (address,address,uint256,bool) external returns (enum ITransferManager.Result)"
                                  }
                                },
                                "id": 21704,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "19480:111:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_Result_$18358",
                                  "typeString": "enum ITransferManager.Result"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "19448:143:59"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_enum$_Result_$18358",
                                  "typeString": "enum ITransferManager.Result"
                                },
                                "id": 21710,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 21706,
                                  "name": "valid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21690,
                                  "src": "19613:5:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Result_$18358",
                                    "typeString": "enum ITransferManager.Result"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 21707,
                                      "name": "ITransferManager",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 18394,
                                      "src": "19622:16:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ITransferManager_$18394_$",
                                        "typeString": "type(contract ITransferManager)"
                                      }
                                    },
                                    "id": 21708,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "Result",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 18358,
                                    "src": "19622:23:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_Result_$18358_$",
                                      "typeString": "type(enum ITransferManager.Result)"
                                    }
                                  },
                                  "id": 21709,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "INVALID",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "19622:31:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Result_$18358",
                                    "typeString": "enum ITransferManager.Result"
                                  }
                                },
                                "src": "19613:40:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 21716,
                              "nodeType": "IfStatement",
                              "src": "19609:103:59",
                              "trueBody": {
                                "id": 21715,
                                "nodeType": "Block",
                                "src": "19655:57:59",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 21713,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 21711,
                                        "name": "isInvalid",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 21663,
                                        "src": "19677:9:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "74727565",
                                        "id": 21712,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "19689:4:59",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        "value": "true"
                                      },
                                      "src": "19677:16:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 21714,
                                    "nodeType": "ExpressionStatement",
                                    "src": "19677:16:59"
                                  }
                                ]
                              }
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_enum$_Result_$18358",
                                  "typeString": "enum ITransferManager.Result"
                                },
                                "id": 21721,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 21717,
                                  "name": "valid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21690,
                                  "src": "19733:5:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Result_$18358",
                                    "typeString": "enum ITransferManager.Result"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 21718,
                                      "name": "ITransferManager",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 18394,
                                      "src": "19742:16:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ITransferManager_$18394_$",
                                        "typeString": "type(contract ITransferManager)"
                                      }
                                    },
                                    "id": 21719,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "Result",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 18358,
                                    "src": "19742:23:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_Result_$18358_$",
                                      "typeString": "type(enum ITransferManager.Result)"
                                    }
                                  },
                                  "id": 21720,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "VALID",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "19742:29:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Result_$18358",
                                    "typeString": "enum ITransferManager.Result"
                                  }
                                },
                                "src": "19733:38:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 21727,
                              "nodeType": "IfStatement",
                              "src": "19729:99:59",
                              "trueBody": {
                                "id": 21726,
                                "nodeType": "Block",
                                "src": "19773:55:59",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 21724,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 21722,
                                        "name": "isValid",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 21667,
                                        "src": "19795:7:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "74727565",
                                        "id": 21723,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "19805:4:59",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        "value": "true"
                                      },
                                      "src": "19795:14:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 21725,
                                    "nodeType": "ExpressionStatement",
                                    "src": "19795:14:59"
                                  }
                                ]
                              }
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_enum$_Result_$18358",
                                  "typeString": "enum ITransferManager.Result"
                                },
                                "id": 21732,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 21728,
                                  "name": "valid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21690,
                                  "src": "19849:5:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Result_$18358",
                                    "typeString": "enum ITransferManager.Result"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "==",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 21729,
                                      "name": "ITransferManager",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 18394,
                                      "src": "19858:16:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_ITransferManager_$18394_$",
                                        "typeString": "type(contract ITransferManager)"
                                      }
                                    },
                                    "id": 21730,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "Result",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 18358,
                                    "src": "19858:23:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_Result_$18358_$",
                                      "typeString": "type(enum ITransferManager.Result)"
                                    }
                                  },
                                  "id": 21731,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "FORCE_VALID",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "19858:35:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_Result_$18358",
                                    "typeString": "enum ITransferManager.Result"
                                  }
                                },
                                "src": "19849:44:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": null,
                              "id": 21738,
                              "nodeType": "IfStatement",
                              "src": "19845:110:59",
                              "trueBody": {
                                "id": 21737,
                                "nodeType": "Block",
                                "src": "19895:60:59",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 21735,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "id": 21733,
                                        "name": "isForceValid",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 21671,
                                        "src": "19917:12:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "74727565",
                                        "id": 21734,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "bool",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "19932:4:59",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bool",
                                          "typeString": "bool"
                                        },
                                        "value": "true"
                                      },
                                      "src": "19917:19:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 21736,
                                    "nodeType": "ExpressionStatement",
                                    "src": "19917:19:59"
                                  }
                                ]
                              }
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 21683,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 21678,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21675,
                            "src": "19384:1:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 21679,
                                "name": "modules",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 20499,
                                "src": "19388:7:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                  "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                }
                              },
                              "id": 21681,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 21680,
                                "name": "TRANSFERMANAGER_KEY",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10084,
                                "src": "19396:19:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "19388:28:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                              }
                            },
                            "id": 21682,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "19388:35:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "19384:39:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 21740,
                        "initializationExpression": {
                          "assignments": [
                            21675
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 21675,
                              "name": "i",
                              "nodeType": "VariableDeclaration",
                              "scope": 21755,
                              "src": "19371:7:59",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              "typeName": {
                                "id": 21674,
                                "name": "uint8",
                                "nodeType": "ElementaryTypeName",
                                "src": "19371:5:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 21677,
                          "initialValue": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 21676,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "19381:1:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "nodeType": "VariableDeclarationStatement",
                          "src": "19371:11:59"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 21685,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "19425:3:59",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 21684,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21675,
                              "src": "19425:1:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "id": 21686,
                          "nodeType": "ExpressionStatement",
                          "src": "19425:3:59"
                        },
                        "nodeType": "ForStatement",
                        "src": "19366:603:59"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "condition": {
                            "argumentTypes": null,
                            "id": 21741,
                            "name": "isForceValid",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21671,
                            "src": "19989:12:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "condition": {
                                  "argumentTypes": null,
                                  "id": 21743,
                                  "name": "isInvalid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21663,
                                  "src": "20012:9:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseExpression": {
                                  "argumentTypes": null,
                                  "id": 21745,
                                  "name": "isValid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 21667,
                                  "src": "20032:7:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "id": 21746,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "Conditional",
                                "src": "20012:27:59",
                                "trueExpression": {
                                  "argumentTypes": null,
                                  "hexValue": "66616c7365",
                                  "id": 21744,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "bool",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "20024:5:59",
                                  "subdenomination": null,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "value": "false"
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              }
                            ],
                            "id": 21747,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "20011:29:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "id": 21748,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "Conditional",
                          "src": "19989:51:59",
                          "trueExpression": {
                            "argumentTypes": null,
                            "hexValue": "74727565",
                            "id": 21742,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20004:4:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "functionReturnParameters": 21633,
                        "id": 21749,
                        "nodeType": "Return",
                        "src": "19982:58:59"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "66616c7365",
                    "id": 21752,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "20063:5:59",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 21633,
                  "id": 21753,
                  "nodeType": "Return",
                  "src": "20056:12:59"
                }
              ]
            },
            "documentation": "@notice validate transfer with TransferManager module if it exists\n@dev TransferManager module has a key of 2\n@param _from sender of transfer\n@param _to receiver of transfer\n@param _amount value of transfer\n@return bool",
            "id": 21755,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 21629,
                    "name": "_amount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 21626,
                    "src": "18954:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 21630,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21628,
                  "name": "checkGranularity",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 20672,
                  "src": "18937:16:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "18937:25:59"
              }
            ],
            "name": "verifyTransfer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21627,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21622,
                  "name": "_from",
                  "nodeType": "VariableDeclaration",
                  "scope": 21755,
                  "src": "18885:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21621,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18885:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21624,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 21755,
                  "src": "18900:11:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21623,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18900:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21626,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 21755,
                  "src": "18913:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21625,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18913:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18884:45:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21633,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21632,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 21755,
                  "src": "18972:4:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21631,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "18972:4:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "18971:6:59"
            },
            "scope": 22357,
            "src": "18861:1214:59",
            "stateMutability": "nonpayable",
            "superFunction": 10021,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21768,
              "nodeType": "Block",
              "src": "20208:87:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21762,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21760,
                      "name": "finishedIssuerMinting",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20487,
                      "src": "20218:21:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 21761,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20242:4:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "20218:28:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21763,
                  "nodeType": "ExpressionStatement",
                  "src": "20218:28:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21765,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "20284:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21764,
                      "name": "LogFinishMintingIssuer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20566,
                      "src": "20261:22:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 21766,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20261:27:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21767,
                  "nodeType": "EmitStatement",
                  "src": "20256:32:59"
                }
              ]
            },
            "documentation": "@notice End token minting period permanently for Issuer",
            "id": 21769,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 21758,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21757,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "20198:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20198:9:59"
              }
            ],
            "name": "finishMintingIssuer",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21756,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20188:2:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21759,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20208:0:59"
            },
            "scope": 22357,
            "src": "20160:135:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21782,
              "nodeType": "Block",
              "src": "20423:81:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21776,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21774,
                      "name": "finishedSTOMinting",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20490,
                      "src": "20433:18:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 21775,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "20454:4:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "20433:25:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21777,
                  "nodeType": "ExpressionStatement",
                  "src": "20433:25:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21779,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "20493:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21778,
                      "name": "LogFinishMintingSTO",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20570,
                      "src": "20473:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 21780,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20473:24:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21781,
                  "nodeType": "EmitStatement",
                  "src": "20468:29:59"
                }
              ]
            },
            "documentation": "@notice End token minting period permanently for STOs",
            "id": 21783,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 21772,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21771,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "20413:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20413:9:59"
              }
            ],
            "name": "finishMintingSTO",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21770,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20403:2:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21773,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "20423:0:59"
            },
            "scope": 22357,
            "src": "20378:126:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21869,
              "nodeType": "Block",
              "src": "21016:553:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 21806,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 21802,
                          "name": "_investor",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21785,
                          "src": "21034:9:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 21804,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "21055:1:59",
                              "subdenomination": null,
                              "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": 21803,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "21047:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 21805,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21047:10:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "21034:23:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e766573746f7220616464726573732073686f756c64206e6f74206265203078",
                        "id": 21807,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21059:35:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_92c9ad5839d9e6c845f0585522dbe71544d58a6d51db03cf580afd2032f01f8c",
                          "typeString": "literal_string \"Investor address should not be 0x\""
                        },
                        "value": "Investor address should not be 0x"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_92c9ad5839d9e6c845f0585522dbe71544d58a6d51db03cf580afd2032f01f8c",
                          "typeString": "literal_string \"Investor address should not be 0x\""
                        }
                      ],
                      "id": 21801,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "21026:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21808,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21026:69:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21809,
                  "nodeType": "ExpressionStatement",
                  "src": "21026:69:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 21812,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "21133:1:59",
                            "subdenomination": null,
                            "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": 21811,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21125:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 21813,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21125:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21814,
                        "name": "_investor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21785,
                        "src": "21137:9:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21815,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21787,
                        "src": "21148:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21810,
                      "name": "adjustInvestorCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21333,
                      "src": "21105:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 21816,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21105:51:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21817,
                  "nodeType": "ExpressionStatement",
                  "src": "21105:51:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 21821,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "21197:1:59",
                                "subdenomination": null,
                                "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": 21820,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "21189:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 21822,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "21189:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21823,
                            "name": "_investor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21785,
                            "src": "21201:9:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 21824,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21787,
                            "src": "21212:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 21819,
                          "name": "verifyTransfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            21755
                          ],
                          "referencedDeclaration": 21755,
                          "src": "21174:14:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) returns (bool)"
                          }
                        },
                        "id": 21825,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21174:46:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5472616e73666572206973206e6f742076616c6964",
                        "id": 21826,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "21222:23:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c2b52aede81a61bfb2345b48703ab4dd0a83b05e6407bea4090bfcc23659ff5b",
                          "typeString": "literal_string \"Transfer is not valid\""
                        },
                        "value": "Transfer is not valid"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c2b52aede81a61bfb2345b48703ab4dd0a83b05e6407bea4090bfcc23659ff5b",
                          "typeString": "literal_string \"Transfer is not valid\""
                        }
                      ],
                      "id": 21818,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "21166:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21827,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21166:80:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21828,
                  "nodeType": "ExpressionStatement",
                  "src": "21166:80:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21830,
                        "name": "_investor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21785,
                        "src": "21281:9:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 21829,
                      "name": "adjustBalanceCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21476,
                      "src": "21256:24:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 21831,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21256:35:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21832,
                  "nodeType": "ExpressionStatement",
                  "src": "21256:35:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 21833,
                      "name": "adjustTotalSupplyCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21461,
                      "src": "21301:28:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 21834,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21301:30:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21835,
                  "nodeType": "ExpressionStatement",
                  "src": "21301:30:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21841,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21836,
                      "name": "totalSupply_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22679,
                      "src": "21341:12:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 21839,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21787,
                          "src": "21373:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 21837,
                          "name": "totalSupply_",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22679,
                          "src": "21356:12:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 21838,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22577,
                        "src": "21356:16:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 21840,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "21356:25:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21341:40:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21842,
                  "nodeType": "ExpressionStatement",
                  "src": "21341:40:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21852,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 21843,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22677,
                        "src": "21391:8:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 21845,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 21844,
                        "name": "_investor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21785,
                        "src": "21400:9:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "21391:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 21850,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21787,
                          "src": "21437:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 21846,
                            "name": "balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22677,
                            "src": "21413:8:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 21848,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 21847,
                            "name": "_investor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21785,
                            "src": "21422:9:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "21413:19:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 21849,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22577,
                        "src": "21413:23:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 21851,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "21413:32:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21391:54:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 21853,
                  "nodeType": "ExpressionStatement",
                  "src": "21391:54:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 21855,
                        "name": "_investor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21785,
                        "src": "21467:9:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21856,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21787,
                        "src": "21478:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21854,
                      "name": "Minted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10041,
                      "src": "21460:6:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 21857,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21460:26:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21858,
                  "nodeType": "EmitStatement",
                  "src": "21455:31:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 21861,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "21518:1:59",
                            "subdenomination": null,
                            "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": 21860,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "21510:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 21862,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "21510:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21863,
                        "name": "_investor",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21785,
                        "src": "21522:9:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 21864,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21787,
                        "src": "21533:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21859,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22868,
                      "src": "21501:8:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 21865,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21501:40:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21866,
                  "nodeType": "EmitStatement",
                  "src": "21496:45:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 21867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "21558:4:59",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 21800,
                  "id": 21868,
                  "nodeType": "Return",
                  "src": "21551:11:59"
                }
              ]
            },
            "documentation": "@notice mints new tokens and assigns them to the target _investor.\n@dev Can only be called by the STO attached to the token (Or by the ST owner if there's no STO attached yet)\n@param _investor Address to whom the minted tokens will be dilivered\n@param _amount Number of tokens get minted\n@return success",
            "id": 21870,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 21790,
                    "name": "STO_KEY",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10087,
                    "src": "20933:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 21791,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "20942:4:59",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  }
                ],
                "id": 21792,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21789,
                  "name": "onlyModule",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 20657,
                  "src": "20922:10:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint8_$_t_bool_$",
                    "typeString": "modifier (uint8,bool)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20922:25:59"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 21794,
                    "name": "_amount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 21787,
                    "src": "20965:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 21795,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21793,
                  "name": "checkGranularity",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 20672,
                  "src": "20948:16:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20948:25:59"
              },
              {
                "arguments": [],
                "id": 21797,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21796,
                  "name": "isMintingAllowed",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 20695,
                  "src": "20974:16:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "20974:18:59"
              }
            ],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21788,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21785,
                  "name": "_investor",
                  "nodeType": "VariableDeclaration",
                  "scope": 21870,
                  "src": "20879:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21784,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "20879:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21787,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 21870,
                  "src": "20898:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21786,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "20898:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "20878:36:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21800,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21799,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 21870,
                  "src": "21002:12:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21798,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "21002:4:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21001:14:59"
            },
            "scope": 22357,
            "src": "20865:704:59",
            "stateMutability": "nonpayable",
            "superFunction": 10030,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21918,
              "nodeType": "Block",
              "src": "22142:238:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 21890,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21886,
                            "name": "_investors",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21873,
                            "src": "22160:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 21887,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "22160:17:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 21888,
                            "name": "_amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21876,
                            "src": "22181:8:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 21889,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "22181:15:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "22160:36:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4d69732d6d6174636820696e20746865206c656e677468206f662074686520617272617973",
                        "id": 21891,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "22198:39:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e6e9985f4f54b573f3a5eba669f45bb98ec50cd60909ea443be6588371310a0e",
                          "typeString": "literal_string \"Mis-match in the length of the arrays\""
                        },
                        "value": "Mis-match in the length of the arrays"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e6e9985f4f54b573f3a5eba669f45bb98ec50cd60909ea443be6588371310a0e",
                          "typeString": "literal_string \"Mis-match in the length of the arrays\""
                        }
                      ],
                      "id": 21885,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "22152:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 21892,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22152:86:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 21893,
                  "nodeType": "ExpressionStatement",
                  "src": "22152:86:59"
                },
                {
                  "body": {
                    "id": 21914,
                    "nodeType": "Block",
                    "src": "22296:57:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 21906,
                                "name": "_investors",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21873,
                                "src": "22315:10:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 21908,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 21907,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21895,
                                "src": "22326:1:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "22315:13:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 21909,
                                "name": "_amounts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21876,
                                "src": "22330:8:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                  "typeString": "uint256[] memory"
                                }
                              },
                              "id": 21911,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 21910,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 21895,
                                "src": "22339:1:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "22330:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 21905,
                            "name": "mint",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              21870
                            ],
                            "referencedDeclaration": 21870,
                            "src": "22310:4:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                              "typeString": "function (address,uint256) returns (bool)"
                            }
                          },
                          "id": 21912,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "22310:32:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 21913,
                        "nodeType": "ExpressionStatement",
                        "src": "22310:32:59"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21901,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 21898,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21895,
                      "src": "22268:1:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 21899,
                        "name": "_investors",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21873,
                        "src": "22272:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 21900,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "22272:17:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "22268:21:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21915,
                  "initializationExpression": {
                    "assignments": [
                      21895
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 21895,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 21919,
                        "src": "22253:9:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 21894,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "22253:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 21897,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 21896,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "22265:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "22253:13:59"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 21903,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "22291:3:59",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 21902,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21895,
                        "src": "22291:1:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 21904,
                    "nodeType": "ExpressionStatement",
                    "src": "22291:3:59"
                  },
                  "nodeType": "ForStatement",
                  "src": "22248:105:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 21916,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "22369:4:59",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 21884,
                  "id": 21917,
                  "nodeType": "Return",
                  "src": "22362:11:59"
                }
              ]
            },
            "documentation": "@notice mints new tokens and assigns them to the target _investor.\nCan only be called by the STO attached to the token (Or by the ST owner if there's no STO attached yet)\n@param _investors A list of addresses to whom the minted tokens will be dilivered\n@param _amounts A list of number of tokens get minted and transfer to corresponding address of the investor from _investor[] list\n@return success",
            "id": 21919,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 21879,
                    "name": "STO_KEY",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10087,
                    "src": "22104:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 21880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "22113:4:59",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  }
                ],
                "id": 21881,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21878,
                  "name": "onlyModule",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 20657,
                  "src": "22093:10:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint8_$_t_bool_$",
                    "typeString": "modifier (uint8,bool)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22093:25:59"
              }
            ],
            "name": "mintMulti",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21877,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21873,
                  "name": "_investors",
                  "nodeType": "VariableDeclaration",
                  "scope": 21919,
                  "src": "22044:20:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 21871,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "22044:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 21872,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "22044:9:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21876,
                  "name": "_amounts",
                  "nodeType": "VariableDeclaration",
                  "scope": 21919,
                  "src": "22066:18:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 21874,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "22066:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 21875,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "22066:9:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22043:42:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21884,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21883,
                  "name": "success",
                  "nodeType": "VariableDeclaration",
                  "scope": 21919,
                  "src": "22128:12:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21882,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22128:4:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22127:14:59"
            },
            "scope": 22357,
            "src": "22025:355:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21972,
              "nodeType": "Block",
              "src": "22966:361:59",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21935,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 21930,
                          "name": "modules",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20499,
                          "src": "22980:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                            "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                          }
                        },
                        "id": 21932,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 21931,
                          "name": "PERMISSIONMANAGER_KEY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10081,
                          "src": "22988:21:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "22980:30:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                        }
                      },
                      "id": 21933,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "22980:37:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 21934,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23021:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "22980:42:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 21939,
                  "nodeType": "IfStatement",
                  "src": "22976:85:59",
                  "trueBody": {
                    "id": 21938,
                    "nodeType": "Block",
                    "src": "23024:37:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "66616c7365",
                          "id": 21936,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "23045:5:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 21929,
                        "id": 21937,
                        "nodeType": "Return",
                        "src": "23038:12:59"
                      }
                    ]
                  }
                },
                {
                  "body": {
                    "id": 21970,
                    "nodeType": "Block",
                    "src": "23137:184:59",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 21962,
                              "name": "_delegate",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21921,
                              "src": "23239:9:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 21963,
                              "name": "_module",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21923,
                              "src": "23250:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 21964,
                              "name": "_perm",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 21925,
                              "src": "23259:5:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 21954,
                                        "name": "modules",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 20499,
                                        "src": "23174:7:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                                          "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                                        }
                                      },
                                      "id": 21956,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 21955,
                                        "name": "PERMISSIONMANAGER_KEY",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 10081,
                                        "src": "23182:21:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint8",
                                          "typeString": "uint8"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "23174:30:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                                        "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                                      }
                                    },
                                    "id": 21958,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 21957,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 21941,
                                      "src": "23205:1:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint8",
                                        "typeString": "uint8"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "23174:33:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_ModuleData_$20471_storage",
                                      "typeString": "struct SecurityToken.ModuleData storage ref"
                                    }
                                  },
                                  "id": 21959,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "moduleAddress",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 20470,
                                  "src": "23174:47:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 21953,
                                "name": "IPermissionManager",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13324,
                                "src": "23155:18:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IPermissionManager_$13324_$",
                                  "typeString": "type(contract IPermissionManager)"
                                }
                              },
                              "id": 21960,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "23155:67:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IPermissionManager_$13324",
                                "typeString": "contract IPermissionManager"
                              }
                            },
                            "id": 21961,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "checkPermission",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 13303,
                            "src": "23155:83:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_address_$_t_address_$_t_bytes32_$returns$_t_bool_$",
                              "typeString": "function (address,address,bytes32) view external returns (bool)"
                            }
                          },
                          "id": 21965,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23155:110:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 21969,
                        "nodeType": "IfStatement",
                        "src": "23151:160:59",
                        "trueBody": {
                          "id": 21968,
                          "nodeType": "Block",
                          "src": "23267:44:59",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "hexValue": "74727565",
                                "id": 21966,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "bool",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "23292:4:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                "value": "true"
                              },
                              "functionReturnParameters": 21929,
                              "id": 21967,
                              "nodeType": "Return",
                              "src": "23285:11:59"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 21949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 21944,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21941,
                      "src": "23089:1:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 21945,
                          "name": "modules",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20499,
                          "src": "23093:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage_$",
                            "typeString": "mapping(uint8 => struct SecurityToken.ModuleData storage ref[] storage ref)"
                          }
                        },
                        "id": 21947,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 21946,
                          "name": "PERMISSIONMANAGER_KEY",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10081,
                          "src": "23101:21:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "23093:30:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_ModuleData_$20471_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.ModuleData storage ref[] storage ref"
                        }
                      },
                      "id": 21948,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "23093:37:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23089:41:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 21971,
                  "initializationExpression": {
                    "assignments": [
                      21941
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 21941,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 21973,
                        "src": "23076:7:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 21940,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "23076:5:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 21943,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 21942,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "23086:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "23076:11:59"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 21951,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "23132:3:59",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 21950,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21941,
                        "src": "23132:1:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 21952,
                    "nodeType": "ExpressionStatement",
                    "src": "23132:3:59"
                  },
                  "nodeType": "ForStatement",
                  "src": "23071:250:59"
                }
              ]
            },
            "documentation": "@notice Validate permissions with PermissionManager if it exists, If no Permission return false\n@dev Note that IModule withPerm will allow ST owner all permissions anyway\n@dev this allows individual modules to override this logic if needed (to not allow ST owner all permissions)\n@param _delegate address of delegate\n@param _module address of PermissionManager module\n@param _perm the permissions\n@return success",
            "id": 21973,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "checkPermission",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21926,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21921,
                  "name": "_delegate",
                  "nodeType": "VariableDeclaration",
                  "scope": 21973,
                  "src": "22889:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21920,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22889:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21923,
                  "name": "_module",
                  "nodeType": "VariableDeclaration",
                  "scope": 21973,
                  "src": "22908:15:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21922,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22908:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 21925,
                  "name": "_perm",
                  "nodeType": "VariableDeclaration",
                  "scope": 21973,
                  "src": "22925:13:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 21924,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "22925:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22888:51:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21929,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21928,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 21973,
                  "src": "22960:4:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 21927,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "22960:4:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "22959:6:59"
            },
            "scope": 22357,
            "src": "22864:463:59",
            "stateMutability": "view",
            "superFunction": 10110,
            "visibility": "public"
          },
          {
            "body": {
              "id": 21986,
              "nodeType": "Block",
              "src": "23560:57:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 21984,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 21980,
                      "name": "tokenBurner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20463,
                      "src": "23570:11:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ITokenBurner_$10295",
                        "typeString": "contract ITokenBurner"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 21982,
                          "name": "_tokenBurner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21975,
                          "src": "23597:12:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 21981,
                        "name": "ITokenBurner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10295,
                        "src": "23584:12:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_ITokenBurner_$10295_$",
                          "typeString": "type(contract ITokenBurner)"
                        }
                      },
                      "id": 21983,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23584:26:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_ITokenBurner_$10295",
                        "typeString": "contract ITokenBurner"
                      }
                    },
                    "src": "23570:40:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ITokenBurner_$10295",
                      "typeString": "contract ITokenBurner"
                    }
                  },
                  "id": 21985,
                  "nodeType": "ExpressionStatement",
                  "src": "23570:40:59"
                }
              ]
            },
            "documentation": "@notice used to set the token Burner address. It only be called by the owner\n@param _tokenBurner Address of the token burner contract",
            "id": 21987,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 21978,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21977,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22612,
                  "src": "23550:9:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "23550:9:59"
              }
            ],
            "name": "setTokenBurner",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21976,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21975,
                  "name": "_tokenBurner",
                  "nodeType": "VariableDeclaration",
                  "scope": 21987,
                  "src": "23521:20:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21974,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "23521:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23520:22:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21979,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23560:0:59"
            },
            "scope": 22357,
            "src": "23497:120:59",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 22088,
              "nodeType": "Block",
              "src": "23811:931:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 21996,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "23841:3:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 21997,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "23841:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 21999,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "23861:1:59",
                            "subdenomination": null,
                            "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": 21998,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "23853:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 22000,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "23853:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 22001,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21989,
                        "src": "23865:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 21995,
                      "name": "adjustInvestorCount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21333,
                      "src": "23821:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 22002,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23821:51:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22003,
                  "nodeType": "ExpressionStatement",
                  "src": "23821:51:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 22009,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 22005,
                          "name": "tokenBurner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20463,
                          "src": "23890:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ITokenBurner_$10295",
                            "typeString": "contract ITokenBurner"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 22007,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "23913:1:59",
                              "subdenomination": null,
                              "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": 22006,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "23905:7:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 22008,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "23905:10:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "23890:25:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "546f6b656e204275726e657220636f6e74726163742061646472657373206973206e6f742073657420796574",
                        "id": 22010,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "23917:46:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b1e20e36cf137ffa348b540450b55b5e970f06fe4fc7c40c3990ff61e4871e2f",
                          "typeString": "literal_string \"Token Burner contract address is not set yet\""
                        },
                        "value": "Token Burner contract address is not set yet"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b1e20e36cf137ffa348b540450b55b5e970f06fe4fc7c40c3990ff61e4871e2f",
                          "typeString": "literal_string \"Token Burner contract address is not set yet\""
                        }
                      ],
                      "id": 22004,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "23882:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 22011,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23882:82:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22012,
                  "nodeType": "ExpressionStatement",
                  "src": "23882:82:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 22015,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "23997:3:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 22016,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "23997:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 22018,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "24017:1:59",
                                "subdenomination": null,
                                "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": 22017,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "24009:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 22019,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "24009:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 22020,
                            "name": "_value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21989,
                            "src": "24021:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 22014,
                          "name": "verifyTransfer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            21755
                          ],
                          "referencedDeclaration": 21755,
                          "src": "23982:14:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) returns (bool)"
                          }
                        },
                        "id": 22021,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "23982:46:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5472616e73666572206973206e6f742076616c6964",
                        "id": 22022,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24030:23:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c2b52aede81a61bfb2345b48703ab4dd0a83b05e6407bea4090bfcc23659ff5b",
                          "typeString": "literal_string \"Transfer is not valid\""
                        },
                        "value": "Transfer is not valid"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c2b52aede81a61bfb2345b48703ab4dd0a83b05e6407bea4090bfcc23659ff5b",
                          "typeString": "literal_string \"Transfer is not valid\""
                        }
                      ],
                      "id": 22013,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "23974:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 22023,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "23974:80:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22024,
                  "nodeType": "ExpressionStatement",
                  "src": "23974:80:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 22031,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 22026,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21989,
                          "src": "24072:6:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 22027,
                            "name": "balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22677,
                            "src": "24082:8:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 22030,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 22028,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "24091:3:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 22029,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "24091:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "24082:20:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "24072:30:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "56616c75652073686f756c64206e6f2062652067726561746572207468616e207468652062616c616e6365206f66206d73672e73656e646572",
                        "id": 22032,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24104:59:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b61a8271ddd9a6e3d197611651578d62cfc7171b9d88bf350a7c0ea036caf1ea",
                          "typeString": "literal_string \"Value should no be greater than the balance of msg.sender\""
                        },
                        "value": "Value should no be greater than the balance of msg.sender"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b61a8271ddd9a6e3d197611651578d62cfc7171b9d88bf350a7c0ea036caf1ea",
                          "typeString": "literal_string \"Value should no be greater than the balance of msg.sender\""
                        }
                      ],
                      "id": 22025,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "24064:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 22033,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24064:100:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22034,
                  "nodeType": "ExpressionStatement",
                  "src": "24064:100:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 22036,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "24199:3:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 22037,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "24199:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 22035,
                      "name": "adjustBalanceCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21476,
                      "src": "24174:24:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 22038,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24174:36:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22039,
                  "nodeType": "ExpressionStatement",
                  "src": "24174:36:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 22040,
                      "name": "adjustTotalSupplyCheckpoints",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 21461,
                      "src": "24220:28:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 22041,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24220:30:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22042,
                  "nodeType": "ExpressionStatement",
                  "src": "24220:30:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 22054,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 22043,
                        "name": "balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22677,
                        "src": "24440:8:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 22046,
                      "indexExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 22044,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "24449:3:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 22045,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "24449:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "24440:20:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 22052,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21989,
                          "src": "24488:6:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 22047,
                            "name": "balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22677,
                            "src": "24463:8:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 22050,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 22048,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "24472:3:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 22049,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "24472:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "24463:20:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 22051,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22553,
                        "src": "24463:24:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 22053,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24463:32:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24440:55:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 22055,
                  "nodeType": "ExpressionStatement",
                  "src": "24440:55:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 22059,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "24530:3:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 22060,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "24530:10:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 22061,
                            "name": "_value",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 21989,
                            "src": "24542:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 22057,
                            "name": "tokenBurner",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20463,
                            "src": "24513:11:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ITokenBurner_$10295",
                              "typeString": "contract ITokenBurner"
                            }
                          },
                          "id": 22058,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "burn",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10294,
                          "src": "24513:16:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 22062,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24513:36:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "546f6b656e206275726e65722070726f63657373206973206e6f742076616c696461746564",
                        "id": 22063,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24551:39:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5ccda958cac3717658218d89784f10f8d0a910ee0bbde8a05008990ae73f253b",
                          "typeString": "literal_string \"Token burner process is not validated\""
                        },
                        "value": "Token burner process is not validated"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5ccda958cac3717658218d89784f10f8d0a910ee0bbde8a05008990ae73f253b",
                          "typeString": "literal_string \"Token burner process is not validated\""
                        }
                      ],
                      "id": 22056,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "24505:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 22064,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24505:86:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22065,
                  "nodeType": "ExpressionStatement",
                  "src": "24505:86:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 22071,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 22066,
                      "name": "totalSupply_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22679,
                      "src": "24601:12:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 22069,
                          "name": "_value",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 21989,
                          "src": "24633:6:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 22067,
                          "name": "totalSupply_",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22679,
                          "src": "24616:12:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 22068,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sub",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22553,
                        "src": "24616:16:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 22070,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "24616:24:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24601:39:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 22072,
                  "nodeType": "ExpressionStatement",
                  "src": "24601:39:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 22074,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "24661:3:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 22075,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "24661:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 22076,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21989,
                        "src": "24673:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 22073,
                      "name": "Burnt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10047,
                      "src": "24655:5:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 22077,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24655:25:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22078,
                  "nodeType": "EmitStatement",
                  "src": "24650:30:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 22080,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "24704:3:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 22081,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "24704:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 22083,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "24724:1:59",
                            "subdenomination": null,
                            "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": 22082,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "24716:7:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": "address"
                        },
                        "id": 22084,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "24716:10:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 22085,
                        "name": "_value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 21989,
                        "src": "24728:6:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 22079,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22868,
                      "src": "24695:8:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 22086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24695:40:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22087,
                  "nodeType": "EmitStatement",
                  "src": "24690:45:59"
                }
              ]
            },
            "documentation": "@notice Burn function used to burn the securityToken\n@param _value No. of token that get burned",
            "id": 22089,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 21992,
                    "name": "_value",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 21989,
                    "src": "23796:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 21993,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 21991,
                  "name": "checkGranularity",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 20672,
                  "src": "23779:16:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "23779:24:59"
              }
            ],
            "name": "burn",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 21990,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 21989,
                  "name": "_value",
                  "nodeType": "VariableDeclaration",
                  "scope": 22089,
                  "src": "23763:14:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 21988,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "23763:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23762:16:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 21994,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23811:0:59"
            },
            "scope": 22357,
            "src": "23749:993:59",
            "stateMutability": "nonpayable",
            "superFunction": 10035,
            "visibility": "public"
          },
          {
            "body": {
              "id": 22146,
              "nodeType": "Block",
              "src": "24935:197:59",
              "statements": [
                {
                  "assignments": [
                    22097
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 22097,
                      "name": "len",
                      "nodeType": "VariableDeclaration",
                      "scope": 22147,
                      "src": "24945:8:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 22096,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "24945:4:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 22106,
                  "initialValue": {
                    "argumentTypes": null,
                    "condition": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 22101,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 22098,
                          "name": "_data",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22091,
                          "src": "24956:5:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 22099,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "24956:12:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "34",
                        "id": 22100,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "24971:1:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_4_by_1",
                          "typeString": "int_const 4"
                        },
                        "value": "4"
                      },
                      "src": "24956:16:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseExpression": {
                      "argumentTypes": null,
                      "hexValue": "34",
                      "id": 22104,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24990:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_4_by_1",
                        "typeString": "int_const 4"
                      },
                      "value": "4"
                    },
                    "id": 22105,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "Conditional",
                    "src": "24956:35:59",
                    "trueExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 22102,
                        "name": "_data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22091,
                        "src": "24975:5:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 22103,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "24975:12:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24945:46:59"
                },
                {
                  "body": {
                    "id": 22144,
                    "nodeType": "Block",
                    "src": "25032:94:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 22142,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 22117,
                            "name": "sig",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22094,
                            "src": "25046:3:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 22140,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 22120,
                                      "name": "sig",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 22094,
                                      "src": "25064:3:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes4",
                                        "typeString": "bytes4"
                                      }
                                    ],
                                    "id": 22119,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "25059:4:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": "uint"
                                  },
                                  "id": 22121,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "25059:9:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 22139,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "baseExpression": {
                                          "argumentTypes": null,
                                          "id": 22123,
                                          "name": "_data",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 22091,
                                          "src": "25076:5:59",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes_memory_ptr",
                                            "typeString": "bytes memory"
                                          }
                                        },
                                        "id": 22125,
                                        "indexExpression": {
                                          "argumentTypes": null,
                                          "id": 22124,
                                          "name": "i",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 22108,
                                          "src": "25082:1:59",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "IndexAccess",
                                        "src": "25076:8:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_bytes1",
                                          "typeString": "bytes1"
                                        }
                                      ],
                                      "id": 22122,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "lValueRequested": false,
                                      "nodeType": "ElementaryTypeNameExpression",
                                      "src": "25071:4:59",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_uint256_$",
                                        "typeString": "type(uint256)"
                                      },
                                      "typeName": "uint"
                                    },
                                    "id": 22126,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "25071:14:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "components": [
                                      {
                                        "argumentTypes": null,
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 22137,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "argumentTypes": null,
                                          "hexValue": "32",
                                          "id": 22127,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "25089:1:59",
                                          "subdenomination": null,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_2_by_1",
                                            "typeString": "int_const 2"
                                          },
                                          "value": "2"
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "**",
                                        "rightExpression": {
                                          "argumentTypes": null,
                                          "components": [
                                            {
                                              "argumentTypes": null,
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "id": 22135,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "argumentTypes": null,
                                                "hexValue": "38",
                                                "id": 22128,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "25095:1:59",
                                                "subdenomination": null,
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_rational_8_by_1",
                                                  "typeString": "int_const 8"
                                                },
                                                "value": "8"
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "*",
                                              "rightExpression": {
                                                "argumentTypes": null,
                                                "components": [
                                                  {
                                                    "argumentTypes": null,
                                                    "commonType": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    },
                                                    "id": 22133,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftExpression": {
                                                      "argumentTypes": null,
                                                      "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      "id": 22131,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "leftExpression": {
                                                        "argumentTypes": null,
                                                        "id": 22129,
                                                        "name": "len",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 22097,
                                                        "src": "25100:3:59",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "nodeType": "BinaryOperation",
                                                      "operator": "-",
                                                      "rightExpression": {
                                                        "argumentTypes": null,
                                                        "hexValue": "31",
                                                        "id": 22130,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "25106:1:59",
                                                        "subdenomination": null,
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_rational_1_by_1",
                                                          "typeString": "int_const 1"
                                                        },
                                                        "value": "1"
                                                      },
                                                      "src": "25100:7:59",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    },
                                                    "nodeType": "BinaryOperation",
                                                    "operator": "-",
                                                    "rightExpression": {
                                                      "argumentTypes": null,
                                                      "id": 22132,
                                                      "name": "i",
                                                      "nodeType": "Identifier",
                                                      "overloadedDeclarations": [],
                                                      "referencedDeclaration": 22108,
                                                      "src": "25110:1:59",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    },
                                                    "src": "25100:11:59",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  }
                                                ],
                                                "id": 22134,
                                                "isConstant": false,
                                                "isInlineArray": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "nodeType": "TupleExpression",
                                                "src": "25099:13:59",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "src": "25095:17:59",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "id": 22136,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "25094:19:59",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "25089:24:59",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 22138,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "25088:26:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "25071:43:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "25059:55:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 22118,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "25052:6:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes4_$",
                                "typeString": "type(bytes4)"
                              },
                              "typeName": "bytes4"
                            },
                            "id": 22141,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "25052:63:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes4",
                              "typeString": "bytes4"
                            }
                          },
                          "src": "25046:69:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes4",
                            "typeString": "bytes4"
                          }
                        },
                        "id": 22143,
                        "nodeType": "ExpressionStatement",
                        "src": "25046:69:59"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 22113,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 22111,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22108,
                      "src": "25018:1:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 22112,
                      "name": "len",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22097,
                      "src": "25022:3:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25018:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 22145,
                  "initializationExpression": {
                    "assignments": [
                      22108
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 22108,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 22147,
                        "src": "25006:6:59",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 22107,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "25006:4:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 22110,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 22109,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25015:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "25006:10:59"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 22115,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "25027:3:59",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 22114,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22108,
                        "src": "25027:1:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 22116,
                    "nodeType": "ExpressionStatement",
                    "src": "25027:3:59"
                  },
                  "nodeType": "ForStatement",
                  "src": "25001:125:59"
                }
              ]
            },
            "documentation": "@notice Get function signature from _data\n@param _data passed data\n@return bytes4 sig",
            "id": 22147,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getSig",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22092,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22091,
                  "name": "_data",
                  "nodeType": "VariableDeclaration",
                  "scope": 22147,
                  "src": "24887:11:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 22090,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "24887:5:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24886:13:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 22095,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22094,
                  "name": "sig",
                  "nodeType": "VariableDeclaration",
                  "scope": 22147,
                  "src": "24923:10:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 22093,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "24923:6:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24922:12:59"
            },
            "scope": 22357,
            "src": "24871:261:59",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 22179,
              "nodeType": "Block",
              "src": "25357:210:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 22163,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 22157,
                          "name": "currentCheckpointId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10094,
                          "src": "25375:19:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                            "typeString": "int_const 1157...(70 digits omitted)...9935"
                          },
                          "id": 22162,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639936_by_1",
                              "typeString": "int_const 1157...(70 digits omitted)...9936"
                            },
                            "id": 22160,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "hexValue": "32",
                              "id": 22158,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25397:1:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "**",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "323536",
                              "id": 22159,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25400:3:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_256_by_1",
                                "typeString": "int_const 256"
                              },
                              "value": "256"
                            },
                            "src": "25397:6:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639936_by_1",
                              "typeString": "int_const 1157...(70 digits omitted)...9936"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 22161,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "25406:1:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "25397:10:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_115792089237316195423570985008687907853269984665640564039457584007913129639935_by_1",
                            "typeString": "int_const 1157...(70 digits omitted)...9935"
                          }
                        },
                        "src": "25375:32:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 22156,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "25367:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 22164,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25367:41:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22165,
                  "nodeType": "ExpressionStatement",
                  "src": "25367:41:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 22170,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 22166,
                      "name": "currentCheckpointId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10094,
                      "src": "25418:19:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 22169,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "id": 22167,
                        "name": "currentCheckpointId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10094,
                        "src": "25440:19:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 22168,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "25462:1:59",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "25440:23:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25418:45:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 22171,
                  "nodeType": "ExpressionStatement",
                  "src": "25418:45:59"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 22173,
                        "name": "currentCheckpointId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10094,
                        "src": "25499:19:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 22174,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "25520:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 22172,
                      "name": "LogCheckpointCreated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 20562,
                      "src": "25478:20:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256)"
                      }
                    },
                    "id": 22175,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25478:46:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22176,
                  "nodeType": "EmitStatement",
                  "src": "25473:51:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 22177,
                    "name": "currentCheckpointId",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10094,
                    "src": "25541:19:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 22155,
                  "id": 22178,
                  "nodeType": "Return",
                  "src": "25534:26:59"
                }
              ]
            },
            "documentation": "@notice Creates a checkpoint that can be used to query historical balances / totalSuppy\n@return uint256",
            "id": 22180,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 22150,
                    "name": "CHECKPOINT_KEY",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 10090,
                    "src": "25318:14:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 22151,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "25334:4:59",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  }
                ],
                "id": 22152,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 22149,
                  "name": "onlyModule",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 20657,
                  "src": "25307:10:59",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint8_$_t_bool_$",
                    "typeString": "modifier (uint8,bool)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "25307:32:59"
              }
            ],
            "name": "createCheckpoint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22148,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "25297:2:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 22155,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22154,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 22180,
                  "src": "25348:7:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22153,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25348:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25347:9:59"
            },
            "scope": 22357,
            "src": "25272:295:59",
            "stateMutability": "nonpayable",
            "superFunction": 10153,
            "visibility": "public"
          },
          {
            "body": {
              "id": 22194,
              "nodeType": "Block",
              "src": "25800:87:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 22188,
                        "name": "checkpointTotalSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20484,
                        "src": "25828:21:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 22189,
                        "name": "_checkpointId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22182,
                        "src": "25851:13:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 22190,
                          "name": "totalSupply",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            22687
                          ],
                          "referencedDeclaration": 22687,
                          "src": "25866:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                            "typeString": "function () view returns (uint256)"
                          }
                        },
                        "id": 22191,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "25866:13:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 22187,
                      "name": "getValueAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22336,
                      "src": "25817:10:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (struct SecurityToken.Checkpoint storage ref[] storage pointer,uint256,uint256) view returns (uint256)"
                      }
                    },
                    "id": 22192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25817:63:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 22186,
                  "id": 22193,
                  "nodeType": "Return",
                  "src": "25810:70:59"
                }
              ]
            },
            "documentation": "@notice Queries totalSupply as of a defined checkpoint\n@param _checkpointId Checkpoint ID to query\n@return uint256",
            "id": 22195,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "totalSupplyAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22183,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22182,
                  "name": "_checkpointId",
                  "nodeType": "VariableDeclaration",
                  "scope": 22195,
                  "src": "25748:21:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22181,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25748:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25747:23:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 22186,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22185,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 22195,
                  "src": "25791:7:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22184,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "25791:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "25790:9:59"
            },
            "scope": 22357,
            "src": "25725:162:59",
            "stateMutability": "view",
            "superFunction": 10139,
            "visibility": "public"
          },
          {
            "body": {
              "id": 22335,
              "nodeType": "Block",
              "src": "26280:1167:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 22210,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 22208,
                          "name": "_checkpointId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22200,
                          "src": "26298:13:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 22209,
                          "name": "currentCheckpointId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10094,
                          "src": "26315:19:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "26298:36:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 22207,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "26290:7:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 22211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26290:45:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 22212,
                  "nodeType": "ExpressionStatement",
                  "src": "26290:45:59"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 22215,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 22213,
                      "name": "_checkpointId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22200,
                      "src": "26440:13:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 22214,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26457:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "26440:18:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 22219,
                  "nodeType": "IfStatement",
                  "src": "26436:55:59",
                  "trueBody": {
                    "id": 22218,
                    "nodeType": "Block",
                    "src": "26460:31:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 22216,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "26479:1:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 22206,
                        "id": 22217,
                        "nodeType": "Return",
                        "src": "26472:8:59"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 22223,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 22220,
                        "name": "checkpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22198,
                        "src": "26504:11:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                        }
                      },
                      "id": 22221,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "26504:18:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 22222,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26526:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "26504:23:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 22227,
                  "nodeType": "IfStatement",
                  "src": "26500:74:59",
                  "trueBody": {
                    "id": 22226,
                    "nodeType": "Block",
                    "src": "26529:45:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 22224,
                          "name": "_currentValue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22202,
                          "src": "26550:13:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 22206,
                        "id": 22225,
                        "nodeType": "Return",
                        "src": "26543:20:59"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 22233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 22228,
                          "name": "checkpoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22198,
                          "src": "26587:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                            "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                          }
                        },
                        "id": 22230,
                        "indexExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 22229,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "26599:1:59",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "26587:14:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$20476_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref"
                        }
                      },
                      "id": 22231,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "checkpointId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20473,
                      "src": "26587:27:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 22232,
                      "name": "_checkpointId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22200,
                      "src": "26618:13:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26587:44:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 22240,
                  "nodeType": "IfStatement",
                  "src": "26583:102:59",
                  "trueBody": {
                    "id": 22239,
                    "nodeType": "Block",
                    "src": "26633:52:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 22234,
                              "name": "checkpoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22198,
                              "src": "26654:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                                "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                              }
                            },
                            "id": 22236,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 22235,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "26666:1:59",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "26654:14:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Checkpoint_$20476_storage",
                              "typeString": "struct SecurityToken.Checkpoint storage ref"
                            }
                          },
                          "id": 22237,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 20475,
                          "src": "26654:20:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 22206,
                        "id": 22238,
                        "nodeType": "Return",
                        "src": "26647:27:59"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 22249,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 22241,
                          "name": "checkpoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22198,
                          "src": "26698:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                            "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                          }
                        },
                        "id": 22246,
                        "indexExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 22245,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 22242,
                              "name": "checkpoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22198,
                              "src": "26710:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                                "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                              }
                            },
                            "id": 22243,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "26710:18:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 22244,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "26731:1:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "26710:22:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "26698:35:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$20476_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref"
                        }
                      },
                      "id": 22247,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "checkpointId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20473,
                      "src": "26698:48:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 22248,
                      "name": "_checkpointId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22200,
                      "src": "26749:13:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26698:64:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 22253,
                  "nodeType": "IfStatement",
                  "src": "26694:115:59",
                  "trueBody": {
                    "id": 22252,
                    "nodeType": "Block",
                    "src": "26764:45:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 22250,
                          "name": "_currentValue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22202,
                          "src": "26785:13:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 22206,
                        "id": 22251,
                        "nodeType": "Return",
                        "src": "26778:20:59"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 22262,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 22254,
                          "name": "checkpoints",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22198,
                          "src": "26822:11:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                            "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                          }
                        },
                        "id": 22259,
                        "indexExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 22258,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 22255,
                              "name": "checkpoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22198,
                              "src": "26834:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                                "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                              }
                            },
                            "id": 22256,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "26834:18:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 22257,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "26855:1:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "26834:22:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "26822:35:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Checkpoint_$20476_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref"
                        }
                      },
                      "id": 22260,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "checkpointId",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 20473,
                      "src": "26822:48:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 22261,
                      "name": "_checkpointId",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22200,
                      "src": "26874:13:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "26822:65:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 22272,
                  "nodeType": "IfStatement",
                  "src": "26818:144:59",
                  "trueBody": {
                    "id": 22271,
                    "nodeType": "Block",
                    "src": "26889:73:59",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 22263,
                              "name": "checkpoints",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22198,
                              "src": "26910:11:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                                "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                              }
                            },
                            "id": 22268,
                            "indexExpression": {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 22267,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 22264,
                                  "name": "checkpoints",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22198,
                                  "src": "26922:11:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                                    "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                                  }
                                },
                                "id": 22265,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "length",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "26922:18:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "-",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "31",
                                "id": 22266,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "26943:1:59",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_1_by_1",
                                  "typeString": "int_const 1"
                                },
                                "value": "1"
                              },
                              "src": "26922:22:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "26910:35:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Checkpoint_$20476_storage",
                              "typeString": "struct SecurityToken.Checkpoint storage ref"
                            }
                          },
                          "id": 22269,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "value",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 20475,
                          "src": "26910:41:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "functionReturnParameters": 22206,
                        "id": 22270,
                        "nodeType": "Return",
                        "src": "26903:48:59"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    22274
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 22274,
                      "name": "min",
                      "nodeType": "VariableDeclaration",
                      "scope": 22336,
                      "src": "26971:11:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 22273,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "26971:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 22276,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 22275,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "26985:1:59",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26971:15:59"
                },
                {
                  "assignments": [
                    22278
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 22278,
                      "name": "max",
                      "nodeType": "VariableDeclaration",
                      "scope": 22336,
                      "src": "26996:11:59",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 22277,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "26996:7:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 22283,
                  "initialValue": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 22282,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 22279,
                        "name": "checkpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22198,
                        "src": "27010:11:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                        }
                      },
                      "id": 22280,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "27010:18:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "31",
                      "id": 22281,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "27031:1:59",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "27010:22:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "26996:36:59"
                },
                {
                  "body": {
                    "id": 22328,
                    "nodeType": "Block",
                    "src": "27060:342:59",
                    "statements": [
                      {
                        "assignments": [
                          22288
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 22288,
                            "name": "mid",
                            "nodeType": "VariableDeclaration",
                            "scope": 22336,
                            "src": "27074:11:59",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 22287,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "27074:7:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 22295,
                        "initialValue": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 22294,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "components": [
                              {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 22291,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "id": 22289,
                                  "name": "max",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22278,
                                  "src": "27089:3:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "id": 22290,
                                  "name": "min",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22274,
                                  "src": "27095:3:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "27089:9:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "id": 22292,
                            "isConstant": false,
                            "isInlineArray": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "TupleExpression",
                            "src": "27088:11:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "/",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "32",
                            "id": 22293,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "27102:1:59",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "27088:15:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "27074:29:59"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 22301,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 22296,
                                "name": "checkpoints",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22198,
                                "src": "27121:11:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                                  "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                                }
                              },
                              "id": 22298,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 22297,
                                "name": "mid",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22288,
                                "src": "27133:3:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "27121:16:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$20476_storage",
                                "typeString": "struct SecurityToken.Checkpoint storage ref"
                              }
                            },
                            "id": 22299,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "checkpointId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 20473,
                            "src": "27121:29:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 22300,
                            "name": "_checkpointId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22200,
                            "src": "27154:13:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "27121:46:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 22308,
                        "nodeType": "IfStatement",
                        "src": "27117:117:59",
                        "trueBody": {
                          "id": 22307,
                          "nodeType": "Block",
                          "src": "27169:65:59",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 22304,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 22302,
                                  "name": "max",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22278,
                                  "src": "27187:3:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 22303,
                                  "name": "mid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22288,
                                  "src": "27193:3:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "27187:9:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 22305,
                              "nodeType": "ExpressionStatement",
                              "src": "27187:9:59"
                            },
                            {
                              "id": 22306,
                              "nodeType": "Break",
                              "src": "27214:5:59"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 22314,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 22309,
                                "name": "checkpoints",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22198,
                                "src": "27251:11:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                                  "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                                }
                              },
                              "id": 22311,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 22310,
                                "name": "mid",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 22288,
                                "src": "27263:3:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "27251:16:59",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Checkpoint_$20476_storage",
                                "typeString": "struct SecurityToken.Checkpoint storage ref"
                              }
                            },
                            "id": 22312,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "checkpointId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 20473,
                            "src": "27251:29:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 22313,
                            "name": "_checkpointId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22200,
                            "src": "27283:13:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "27251:45:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 22326,
                          "nodeType": "Block",
                          "src": "27350:42:59",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 22324,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 22322,
                                  "name": "max",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22278,
                                  "src": "27368:3:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 22323,
                                  "name": "mid",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22288,
                                  "src": "27374:3:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "27368:9:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 22325,
                              "nodeType": "ExpressionStatement",
                              "src": "27368:9:59"
                            }
                          ]
                        },
                        "id": 22327,
                        "nodeType": "IfStatement",
                        "src": "27247:145:59",
                        "trueBody": {
                          "id": 22321,
                          "nodeType": "Block",
                          "src": "27298:46:59",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 22319,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 22315,
                                  "name": "min",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22274,
                                  "src": "27316:3:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 22318,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "argumentTypes": null,
                                    "id": 22316,
                                    "name": "mid",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22288,
                                    "src": "27322:3:59",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "argumentTypes": null,
                                    "hexValue": "31",
                                    "id": 22317,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "27328:1:59",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_1_by_1",
                                      "typeString": "int_const 1"
                                    },
                                    "value": "1"
                                  },
                                  "src": "27322:7:59",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "27316:13:59",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 22320,
                              "nodeType": "ExpressionStatement",
                              "src": "27316:13:59"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 22286,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 22284,
                      "name": "max",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22278,
                      "src": "27049:3:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 22285,
                      "name": "min",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22274,
                      "src": "27055:3:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "27049:9:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 22329,
                  "nodeType": "WhileStatement",
                  "src": "27042:360:59"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 22330,
                        "name": "checkpoints",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22198,
                        "src": "27418:11:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage pointer"
                        }
                      },
                      "id": 22332,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 22331,
                        "name": "max",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22278,
                        "src": "27430:3:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "27418:16:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Checkpoint_$20476_storage",
                        "typeString": "struct SecurityToken.Checkpoint storage ref"
                      }
                    },
                    "id": 22333,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 20475,
                    "src": "27418:22:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 22206,
                  "id": 22334,
                  "nodeType": "Return",
                  "src": "27411:29:59"
                }
              ]
            },
            "documentation": "@notice Queries value at a defined checkpoint\n@param checkpoints is array of Checkpoint objects\n@param _checkpointId Checkpoint ID to query\n@param _currentValue Current value of checkpoint\n@return uint256",
            "id": 22336,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getValueAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22203,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22198,
                  "name": "checkpoints",
                  "nodeType": "VariableDeclaration",
                  "scope": 22336,
                  "src": "26169:32:59",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                    "typeString": "struct SecurityToken.Checkpoint[]"
                  },
                  "typeName": {
                    "baseType": {
                      "contractScope": null,
                      "id": 22196,
                      "name": "Checkpoint",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 20476,
                      "src": "26169:10:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Checkpoint_$20476_storage_ptr",
                        "typeString": "struct SecurityToken.Checkpoint"
                      }
                    },
                    "id": 22197,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "26169:12:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr",
                      "typeString": "struct SecurityToken.Checkpoint[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22200,
                  "name": "_checkpointId",
                  "nodeType": "VariableDeclaration",
                  "scope": 22336,
                  "src": "26203:21:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22199,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26203:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22202,
                  "name": "_currentValue",
                  "nodeType": "VariableDeclaration",
                  "scope": 22336,
                  "src": "26226:21:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22201,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26226:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26168:80:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 22206,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22205,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 22336,
                  "src": "26271:7:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22204,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "26271:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "26270:9:59"
            },
            "scope": 22357,
            "src": "26149:1298:59",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 22355,
              "nodeType": "Block",
              "src": "27731:102:59",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 22346,
                          "name": "checkpointBalances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 20481,
                          "src": "27759:18:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_$",
                            "typeString": "mapping(address => struct SecurityToken.Checkpoint storage ref[] storage ref)"
                          }
                        },
                        "id": 22348,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 22347,
                          "name": "_investor",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22338,
                          "src": "27778:9:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "27759:29:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage ref"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 22349,
                        "name": "_checkpointId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22340,
                        "src": "27790:13:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 22351,
                            "name": "_investor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 22338,
                            "src": "27815:9:59",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 22350,
                          "name": "balanceOf",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [
                            22759
                          ],
                          "referencedDeclaration": 22759,
                          "src": "27805:9:59",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
                            "typeString": "function (address) view returns (uint256)"
                          }
                        },
                        "id": 22352,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "27805:20:59",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage",
                          "typeString": "struct SecurityToken.Checkpoint storage ref[] storage ref"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 22345,
                      "name": "getValueAt",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22336,
                      "src": "27748:10:59",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_array$_t_struct$_Checkpoint_$20476_storage_$dyn_storage_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (struct SecurityToken.Checkpoint storage ref[] storage pointer,uint256,uint256) view returns (uint256)"
                      }
                    },
                    "id": 22353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27748:78:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 22344,
                  "id": 22354,
                  "nodeType": "Return",
                  "src": "27741:85:59"
                }
              ]
            },
            "documentation": "@notice Queries balances as of a defined checkpoint\n@param _investor Investor to query balance for\n@param _checkpointId Checkpoint ID to query as of",
            "id": 22356,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "balanceOfAt",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 22341,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22338,
                  "name": "_investor",
                  "nodeType": "VariableDeclaration",
                  "scope": 22356,
                  "src": "27660:17:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 22337,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27660:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 22340,
                  "name": "_checkpointId",
                  "nodeType": "VariableDeclaration",
                  "scope": 22356,
                  "src": "27679:21:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22339,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27679:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27659:42:59"
            },
            "payable": false,
            "returnParameters": {
              "id": 22344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22343,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 22356,
                  "src": "27722:7:59",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 22342,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27722:7:59",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27721:9:59"
            },
            "scope": 22357,
            "src": "27639:194:59",
            "stateMutability": "view",
            "superFunction": 10148,
            "visibility": "public"
          }
        ],
        "scope": 22358,
        "src": "928:26908:59"
      }
    ],
    "src": "0:27837:59"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-08-21T09:48:12.854Z"
}