{
  "contractName": "CappedSTO",
  "abi": [
    {
      "constant": true,
      "inputs": [],
      "name": "rate",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "endTime",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "cap",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "tokensSold",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "wallet",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "takeFee",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "fundsRaised",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "name": "investors",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "polyToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "startTime",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_tokenContract",
          "type": "address"
        }
      ],
      "name": "reclaimERC20",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "name": "_fundsAmount",
          "type": "uint256"
        }
      ],
      "name": "verifyInvestment",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "pausedTime",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "securityToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "FEE_ADMIN",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "investorCount",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "uint8"
        }
      ],
      "name": "fundRaiseType",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "name": "_securityToken",
          "type": "address"
        },
        {
          "name": "_polyAddress",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "payable": true,
      "stateMutability": "payable",
      "type": "fallback"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "purchaser",
          "type": "address"
        },
        {
          "indexed": true,
          "name": "beneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "value",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "TokenPurchase",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_timestammp",
          "type": "uint256"
        }
      ],
      "name": "Pause",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "name": "_timestamp",
          "type": "uint256"
        }
      ],
      "name": "Unpause",
      "type": "event"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_startTime",
          "type": "uint256"
        },
        {
          "name": "_endTime",
          "type": "uint256"
        },
        {
          "name": "_cap",
          "type": "uint256"
        },
        {
          "name": "_rate",
          "type": "uint256"
        },
        {
          "name": "_fundRaiseType",
          "type": "uint8"
        },
        {
          "name": "_fundsReceiver",
          "type": "address"
        }
      ],
      "name": "configure",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getInitFunction",
      "outputs": [
        {
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_beneficiary",
          "type": "address"
        }
      ],
      "name": "buyTokens",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_investedPOLY",
          "type": "uint256"
        }
      ],
      "name": "buyTokensWithPoly",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "capReached",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getRaisedEther",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getRaisedPOLY",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getNumberInvestors",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getTokensSold",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getPermissions",
      "outputs": [
        {
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getSTODetails",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040526002805460a060020a60ff02191690556007805460ff1916905534801561002a57600080fd5b50604051604080611cec83398101604052805160209091015160018054600160a060020a03938416600160a060020a0319918216179091556000805482163317905560028054939092169216919091179055611c618061008b6000396000f30060806040526004361061017c5763ffffffff60e060020a6000350416631040dc2781146101875780631613ec9d146101df5780632c4e722e146102295780633197cbb614610250578063355274ea1461026557806335ff3a511461027a57806338c59de91461028f5780633f4ba83a146102a45780634f935945146102b9578063518ab2a8146102e2578063521eb273146102f75780635c975abb146103285780635f7619a41461033d5780636681b9fd146103555780636f7bc9be1461036a5780636faa22a51461038b57806378e97925146103a05780638456cb59146103b55780638905fd4f146103ca5780639f5a851f146103eb578063a3fb8f151461041e578063a412f87c14610433578063b2cca39d14610457578063b84dfbd21461046c578063c3a07df614610481578063c45a0155146104e6578063cb752679146104fb578063d70afa9614610513578063d7e64c0014610528578063ec8ac4d81461053d578063eda524bc14610551578063ee7c0db01461056c575b61018533610581565b005b34801561019357600080fd5b5061019c61068d565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c0840152151560e083015251908190036101000190f35b3480156101eb57600080fd5b506101f46106f3565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561023557600080fd5b5061023e61074f565b60408051918252519081900360200190f35b34801561025c57600080fd5b5061023e610755565b34801561027157600080fd5b5061023e61075b565b34801561028657600080fd5b5061023e610761565b34801561029b57600080fd5b5061023e610795565b3480156102b057600080fd5b5061018561079b565b3480156102c557600080fd5b506102ce610883565b604080519115158252519081900360200190f35b3480156102ee57600080fd5b5061023e61088e565b34801561030357600080fd5b5061030c610894565b60408051600160a060020a039092168252519081900360200190f35b34801561033457600080fd5b506102ce6108a8565b34801561034957600080fd5b506102ce6004356108b8565b34801561036157600080fd5b5061023e610bf7565b34801561037657600080fd5b5061023e600160a060020a0360043516610bfd565b34801561039757600080fd5b5061030c610c0f565b3480156103ac57600080fd5b5061023e610c1e565b3480156103c157600080fd5b50610185610c24565b3480156103d657600080fd5b50610185600160a060020a0360043516610d18565b3480156103f757600080fd5b5061018560043560243560443560643560ff60843516600160a060020a0360a43516610f46565b34801561042a57600080fd5b5061023e611195565b34801561043f57600080fd5b506102ce600160a060020a03600435166024356111a1565b34801561046357600080fd5b5061023e611247565b34801561047857600080fd5b5061030c61124d565b34801561048d57600080fd5b5061049661125c565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104d25781810151838201526020016104ba565b505050509050019250505060405180910390f35b3480156104f257600080fd5b5061030c61126e565b34801561050757600080fd5b5061018560043561127d565b34801561051f57600080fd5b5061023e6113fa565b34801561053457600080fd5b5061023e61141e565b610185600160a060020a0360043516610581565b34801561055d57600080fd5b506102ce60ff60043516611424565b34801561057857600080fd5b5061023e611439565b60075460009060ff161561059457600080fd5b6007805460ff1916600117905560025460a060020a900460ff16156105b857600080fd5b6000805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5460ff161515610661576040805160e560020a62461bcd028152602060048201526024808201527f4554482073686f756c6420626520746865206d6f6465206f6620696e7665737460448201527f6d656e7400000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b503461066d828261143f565b6106756114df565b61067f8282611522565b50506007805460ff19169055565b600080600080600080600080600454600554600c54600854600954600a54600b54600360006001808111156106be57fe5b60ff9081168252602082019290925260400160002054979f50959d50939b509199509750955093501690509091929394959697565b604080517f636f6e6669677572652875696e743235362c75696e743235362c75696e74323581527f362c75696e743235362c75696e74382c61646472657373290000000000000000602082015290519081900360380190205b90565b60085481565b60055481565b600c5481565b6000600381805b60ff9081168252602082019290925260400160002054161561078d575060095461074c565b50600061074c565b600a5490565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156107ee57600080fd5b505af1158015610802573d6000803e3d6000fd5b505050506040513d602081101561081857600080fd5b5051600160a060020a03163314610879576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b610881611526565b565b600c54600b54101590565b600b5481565b6007546101009004600160a060020a031681565b60025460a060020a900460ff1681565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561093157600080fd5b505af1158015610945573d6000803e3d6000fd5b505050506040513d602081101561095b57600080fd5b505160005433600160a060020a03928316811494509116149050818061097e5750805b80610a245750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b1580156109f757600080fd5b505af1158015610a0b573d6000803e3d6000fd5b505050506040513d6020811015610a2157600080fd5b50515b1515610a7a576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b158015610ae957600080fd5b505af1158015610afd573d6000803e3d6000fd5b505050506040513d6020811015610b1357600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b158015610b6a57600080fd5b505af1158015610b7e573d6000803e3d6000fd5b505050506040513d6020811015610b9457600080fd5b50511515610bec576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b60095481565b600d6020526000908152604090205481565b600254600160a060020a031681565b60045481565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610c7757600080fd5b505af1158015610c8b573d6000803e3d6000fd5b505050506040513d6020811015610ca157600080fd5b5051600160a060020a03163314610d02576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b6005544210610d1057600080fd5b6108816115dc565b600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610d6e57600080fd5b505af1158015610d82573d6000803e3d6000fd5b505050506040513d6020811015610d9857600080fd5b5051600160a060020a03163314610df9576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b600160a060020a0383161515610e0e57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b158015610e7257600080fd5b505af1158015610e86573d6000803e3d6000fd5b505050506040513d6020811015610e9c57600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051919250600160a060020a0384169163a9059cbb916044808201926020929091908290030181600087803b158015610f0a57600080fd5b505af1158015610f1e573d6000803e3d6000fd5b505050506040513d6020811015610f3457600080fd5b50511515610f4157600080fd5b505050565b600054600160a060020a03163314610fa8576040805160e560020a62461bcd02815260206004820152601560248201527f53656e646572206973206e6f7420666163746f72790000000000000000000000604482015290519081900360640190fd5b60008311611026576040805160e560020a62461bcd02815260206004820152602660248201527f52617465206f6620746f6b656e2073686f756c6420626520677265617465722060448201527f7468616e20300000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0381161515611086576040805160e560020a62461bcd02815260206004820152601d60248201527f5a65726f2061646472657373206973206e6f74207065726d6974746564000000604482015290519081900360640190fd5b42861015801561109557508585115b15156110eb576040805160e560020a62461bcd02815260206004820152601d60248201527f4461746520706172616d657465727320617265206e6f742076616c6964000000604482015290519081900360640190fd5b60008411611143576040805160e560020a62461bcd02815260206004820152601c60248201527f4361702073686f756c642062652067726561746572207468616e203000000000604482015290519081900360640190fd5b60048690556005859055600c84905560088390556007805474ffffffffffffffffffffffffffffffffffffffff001916610100600160a060020a0384160217905561118d82611697565b505050505050565b60006003816001610768565b600254604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015230602483015291516000938593169163dd62ed3e91604480830192602092919082900301818887803b15801561121057600080fd5b505af1158015611224573d6000803e3d6000fd5b505050506040513d602081101561123a57600080fd5b5051101590505b92915050565b60065481565b600154600160a060020a031681565b60408051600081526020810190915290565b600054600160a060020a031681565b60075460ff161561128d57600080fd5b6007805460ff1916600117905560025460a060020a900460ff16156112b157600080fd5b600160005260036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c5460ff16151561135c576040805160e560020a62461bcd02815260206004820152602560248201527f504f4c592073686f756c6420626520746865206d6f6465206f6620696e76657360448201527f746d656e74000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61136633826111a1565b15156113bc576040805160e560020a62461bcd02815260206004820152601460248201527f4e6f742076616c696420496e766573746d656e74000000000000000000000000604482015290519081900360640190fd5b6113c6338261143f565b6007546113e39033906101009004600160a060020a0316836117ae565b6113ed3382611522565b506007805460ff19169055565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b600a5481565b60036020526000908152604090205460ff1681565b600b5490565b600061144b8383611856565b61145482611a82565b60095490915061146a908363ffffffff611a9916565b600955600b54611480908263ffffffff611a9916565b600b5561148d8382611aa6565b60408051838152602081018390528151600160a060020a0386169233927f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18929081900390910190a3610f418383611522565b600754604051600160a060020a0361010090920491909116903480156108fc02916000818181858888f1935050505015801561151f573d6000803e3d6000fd5b50565b5050565b60025460a060020a900460ff161515611589576040805160e560020a62461bcd02815260206004820152601660248201527f436f6e7472616374206973206e6f742070617573656400000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191690556040805142815290517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab79181900360200190a1565b60025460a060020a900460ff161561163e576040805160e560020a62461bcd02815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040805142815290517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d9181900360200190a1565b60ff811615806116aa57508060ff166001145b1515611700576040805160e560020a62461bcd02815260206004820152601a60248201527f4e6f7420612076616c69642066756e6472616973652074797065000000000000604482015290519081900360640190fd5b60ff81166000818152600360205260409020805460ff19166001908117909155141561151f57600254600160a060020a0316151561151f576040805160e560020a62461bcd02815260206004820152602960248201527f41646472657373206f662074686520706f6c79546f6b656e2073686f756c642060448201527f6e6f742062652030780000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152858116602483015260448201859052915191909216916323b872dd9160648083019260209291908290030181600087803b15801561182557600080fd5b505af1158015611839573d6000803e3d6000fd5b505050506040513d602081101561184f57600080fd5b5050505050565b600160a060020a03821615156118db576040805160e560020a62461bcd028152602060048201526024808201527f42656e656669636961727920616464726573732073686f756c64206e6f74206260448201527f6520307800000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b801515611958576040805160e560020a62461bcd02815260206004820152602860248201527f416d6f756e7420696e7665737465642073686f756c64206e6f7420626520657160448201527f75616c20746f2030000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600c5461197661196783611a82565b600b549063ffffffff611a9916565b11156119f2576040805160e560020a62461bcd02815260206004820152602760248201527f496e766573746d656e74206d6f7265207468616e20636170206973206e6f742060448201527f616c6c6f77656400000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6004544210158015611a0657506005544211155b1515611522576040805160e560020a62461bcd02815260206004820152602260248201527f4f66666572696e6720697320636c6f7365642f4e6f742079657420737461727460448201527f6564000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600061124160085483611b1b90919063ffffffff16565b8181018281101561124157fe5b600160a060020a0382166000908152600d60205260409020541515611acf57600a805460010190555b600160a060020a0382166000908152600d6020526040902054611af8908263ffffffff611a9916565b600160a060020a0383166000908152600d60205260409020556115228282611b44565b6000821515611b2c57506000611241565b50818102818382811515611b3c57fe5b041461124157fe5b600154604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015260248201859052915191909216916340c10f199160448083019260209291908290030181600087803b158015611bb357600080fd5b505af1158015611bc7573d6000803e3d6000fd5b505050506040513d6020811015611bdd57600080fd5b50511515611522576040805160e560020a62461bcd02815260206004820152601b60248201527f4572726f7220696e206d696e74696e672074686520746f6b656e730000000000604482015290519081900360640190fd00a165627a7a72305820ff67e759834d664815c2ce3dca2711e15ca212ac58ec4f5c21e798151be297870029",
  "deployedBytecode": "0x60806040526004361061017c5763ffffffff60e060020a6000350416631040dc2781146101875780631613ec9d146101df5780632c4e722e146102295780633197cbb614610250578063355274ea1461026557806335ff3a511461027a57806338c59de91461028f5780633f4ba83a146102a45780634f935945146102b9578063518ab2a8146102e2578063521eb273146102f75780635c975abb146103285780635f7619a41461033d5780636681b9fd146103555780636f7bc9be1461036a5780636faa22a51461038b57806378e97925146103a05780638456cb59146103b55780638905fd4f146103ca5780639f5a851f146103eb578063a3fb8f151461041e578063a412f87c14610433578063b2cca39d14610457578063b84dfbd21461046c578063c3a07df614610481578063c45a0155146104e6578063cb752679146104fb578063d70afa9614610513578063d7e64c0014610528578063ec8ac4d81461053d578063eda524bc14610551578063ee7c0db01461056c575b61018533610581565b005b34801561019357600080fd5b5061019c61068d565b604080519889526020890197909752878701959095526060870193909352608086019190915260a085015260c0840152151560e083015251908190036101000190f35b3480156101eb57600080fd5b506101f46106f3565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561023557600080fd5b5061023e61074f565b60408051918252519081900360200190f35b34801561025c57600080fd5b5061023e610755565b34801561027157600080fd5b5061023e61075b565b34801561028657600080fd5b5061023e610761565b34801561029b57600080fd5b5061023e610795565b3480156102b057600080fd5b5061018561079b565b3480156102c557600080fd5b506102ce610883565b604080519115158252519081900360200190f35b3480156102ee57600080fd5b5061023e61088e565b34801561030357600080fd5b5061030c610894565b60408051600160a060020a039092168252519081900360200190f35b34801561033457600080fd5b506102ce6108a8565b34801561034957600080fd5b506102ce6004356108b8565b34801561036157600080fd5b5061023e610bf7565b34801561037657600080fd5b5061023e600160a060020a0360043516610bfd565b34801561039757600080fd5b5061030c610c0f565b3480156103ac57600080fd5b5061023e610c1e565b3480156103c157600080fd5b50610185610c24565b3480156103d657600080fd5b50610185600160a060020a0360043516610d18565b3480156103f757600080fd5b5061018560043560243560443560643560ff60843516600160a060020a0360a43516610f46565b34801561042a57600080fd5b5061023e611195565b34801561043f57600080fd5b506102ce600160a060020a03600435166024356111a1565b34801561046357600080fd5b5061023e611247565b34801561047857600080fd5b5061030c61124d565b34801561048d57600080fd5b5061049661125c565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156104d25781810151838201526020016104ba565b505050509050019250505060405180910390f35b3480156104f257600080fd5b5061030c61126e565b34801561050757600080fd5b5061018560043561127d565b34801561051f57600080fd5b5061023e6113fa565b34801561053457600080fd5b5061023e61141e565b610185600160a060020a0360043516610581565b34801561055d57600080fd5b506102ce60ff60043516611424565b34801561057857600080fd5b5061023e611439565b60075460009060ff161561059457600080fd5b6007805460ff1916600117905560025460a060020a900460ff16156105b857600080fd5b6000805260036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5460ff161515610661576040805160e560020a62461bcd028152602060048201526024808201527f4554482073686f756c6420626520746865206d6f6465206f6620696e7665737460448201527f6d656e7400000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b503461066d828261143f565b6106756114df565b61067f8282611522565b50506007805460ff19169055565b600080600080600080600080600454600554600c54600854600954600a54600b54600360006001808111156106be57fe5b60ff9081168252602082019290925260400160002054979f50959d50939b509199509750955093501690509091929394959697565b604080517f636f6e6669677572652875696e743235362c75696e743235362c75696e74323581527f362c75696e743235362c75696e74382c61646472657373290000000000000000602082015290519081900360380190205b90565b60085481565b60055481565b600c5481565b6000600381805b60ff9081168252602082019290925260400160002054161561078d575060095461074c565b50600061074c565b600a5490565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156107ee57600080fd5b505af1158015610802573d6000803e3d6000fd5b505050506040513d602081101561081857600080fd5b5051600160a060020a03163314610879576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b610881611526565b565b600c54600b54101590565b600b5481565b6007546101009004600160a060020a031681565b60025460a060020a900460ff1681565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561093157600080fd5b505af1158015610945573d6000803e3d6000fd5b505050506040513d602081101561095b57600080fd5b505160005433600160a060020a03928316811494509116149050818061097e5750805b80610a245750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b1580156109f757600080fd5b505af1158015610a0b573d6000803e3d6000fd5b505050506040513d6020811015610a2157600080fd5b50515b1515610a7a576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b158015610ae957600080fd5b505af1158015610afd573d6000803e3d6000fd5b505050506040513d6020811015610b1357600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b158015610b6a57600080fd5b505af1158015610b7e573d6000803e3d6000fd5b505050506040513d6020811015610b9457600080fd5b50511515610bec576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b60095481565b600d6020526000908152604090205481565b600254600160a060020a031681565b60045481565b600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610c7757600080fd5b505af1158015610c8b573d6000803e3d6000fd5b505050506040513d6020811015610ca157600080fd5b5051600160a060020a03163314610d02576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b6005544210610d1057600080fd5b6108816115dc565b600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610d6e57600080fd5b505af1158015610d82573d6000803e3d6000fd5b505050506040513d6020811015610d9857600080fd5b5051600160a060020a03163314610df9576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b600160a060020a0383161515610e0e57600080fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051849350600160a060020a038416916370a082319160248083019260209291908290030181600087803b158015610e7257600080fd5b505af1158015610e86573d6000803e3d6000fd5b505050506040513d6020811015610e9c57600080fd5b5051604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390529051919250600160a060020a0384169163a9059cbb916044808201926020929091908290030181600087803b158015610f0a57600080fd5b505af1158015610f1e573d6000803e3d6000fd5b505050506040513d6020811015610f3457600080fd5b50511515610f4157600080fd5b505050565b600054600160a060020a03163314610fa8576040805160e560020a62461bcd02815260206004820152601560248201527f53656e646572206973206e6f7420666163746f72790000000000000000000000604482015290519081900360640190fd5b60008311611026576040805160e560020a62461bcd02815260206004820152602660248201527f52617465206f6620746f6b656e2073686f756c6420626520677265617465722060448201527f7468616e20300000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a0381161515611086576040805160e560020a62461bcd02815260206004820152601d60248201527f5a65726f2061646472657373206973206e6f74207065726d6974746564000000604482015290519081900360640190fd5b42861015801561109557508585115b15156110eb576040805160e560020a62461bcd02815260206004820152601d60248201527f4461746520706172616d657465727320617265206e6f742076616c6964000000604482015290519081900360640190fd5b60008411611143576040805160e560020a62461bcd02815260206004820152601c60248201527f4361702073686f756c642062652067726561746572207468616e203000000000604482015290519081900360640190fd5b60048690556005859055600c84905560088390556007805474ffffffffffffffffffffffffffffffffffffffff001916610100600160a060020a0384160217905561118d82611697565b505050505050565b60006003816001610768565b600254604080517fdd62ed3e000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015230602483015291516000938593169163dd62ed3e91604480830192602092919082900301818887803b15801561121057600080fd5b505af1158015611224573d6000803e3d6000fd5b505050506040513d602081101561123a57600080fd5b5051101590505b92915050565b60065481565b600154600160a060020a031681565b60408051600081526020810190915290565b600054600160a060020a031681565b60075460ff161561128d57600080fd5b6007805460ff1916600117905560025460a060020a900460ff16156112b157600080fd5b600160005260036020527fa15bc60c955c405d20d9149c709e2460f1c2d9a497496a7f46004d1772c3054c5460ff16151561135c576040805160e560020a62461bcd02815260206004820152602560248201527f504f4c592073686f756c6420626520746865206d6f6465206f6620696e76657360448201527f746d656e74000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b61136633826111a1565b15156113bc576040805160e560020a62461bcd02815260206004820152601460248201527f4e6f742076616c696420496e766573746d656e74000000000000000000000000604482015290519081900360640190fd5b6113c6338261143f565b6007546113e39033906101009004600160a060020a0316836117ae565b6113ed3382611522565b506007805460ff19169055565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b600a5481565b60036020526000908152604090205460ff1681565b600b5490565b600061144b8383611856565b61145482611a82565b60095490915061146a908363ffffffff611a9916565b600955600b54611480908263ffffffff611a9916565b600b5561148d8382611aa6565b60408051838152602081018390528151600160a060020a0386169233927f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad18929081900390910190a3610f418383611522565b600754604051600160a060020a0361010090920491909116903480156108fc02916000818181858888f1935050505015801561151f573d6000803e3d6000fd5b50565b5050565b60025460a060020a900460ff161515611589576040805160e560020a62461bcd02815260206004820152601660248201527f436f6e7472616374206973206e6f742070617573656400000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191690556040805142815290517faaa520fdd7d2c83061d632fa017b0432407e798818af63ea908589fceda39ab79181900360200190a1565b60025460a060020a900460ff161561163e576040805160e560020a62461bcd02815260206004820152601260248201527f436f6e7472616374206973207061757365640000000000000000000000000000604482015290519081900360640190fd5b6002805474ff0000000000000000000000000000000000000000191660a060020a1790556040805142815290517f68b095021b1f40fe513109f513c66692f0b3219aee674a69f4efc57badb8201d9181900360200190a1565b60ff811615806116aa57508060ff166001145b1515611700576040805160e560020a62461bcd02815260206004820152601a60248201527f4e6f7420612076616c69642066756e6472616973652074797065000000000000604482015290519081900360640190fd5b60ff81166000818152600360205260409020805460ff19166001908117909155141561151f57600254600160a060020a0316151561151f576040805160e560020a62461bcd02815260206004820152602960248201527f41646472657373206f662074686520706f6c79546f6b656e2073686f756c642060448201527f6e6f742062652030780000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600254604080517f23b872dd000000000000000000000000000000000000000000000000000000008152600160a060020a038681166004830152858116602483015260448201859052915191909216916323b872dd9160648083019260209291908290030181600087803b15801561182557600080fd5b505af1158015611839573d6000803e3d6000fd5b505050506040513d602081101561184f57600080fd5b5050505050565b600160a060020a03821615156118db576040805160e560020a62461bcd028152602060048201526024808201527f42656e656669636961727920616464726573732073686f756c64206e6f74206260448201527f6520307800000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b801515611958576040805160e560020a62461bcd02815260206004820152602860248201527f416d6f756e7420696e7665737465642073686f756c64206e6f7420626520657160448201527f75616c20746f2030000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600c5461197661196783611a82565b600b549063ffffffff611a9916565b11156119f2576040805160e560020a62461bcd02815260206004820152602760248201527f496e766573746d656e74206d6f7265207468616e20636170206973206e6f742060448201527f616c6c6f77656400000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6004544210158015611a0657506005544211155b1515611522576040805160e560020a62461bcd02815260206004820152602260248201527f4f66666572696e6720697320636c6f7365642f4e6f742079657420737461727460448201527f6564000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600061124160085483611b1b90919063ffffffff16565b8181018281101561124157fe5b600160a060020a0382166000908152600d60205260409020541515611acf57600a805460010190555b600160a060020a0382166000908152600d6020526040902054611af8908263ffffffff611a9916565b600160a060020a0383166000908152600d60205260409020556115228282611b44565b6000821515611b2c57506000611241565b50818102818382811515611b3c57fe5b041461124157fe5b600154604080517f40c10f19000000000000000000000000000000000000000000000000000000008152600160a060020a03858116600483015260248201859052915191909216916340c10f199160448083019260209291908290030181600087803b158015611bb357600080fd5b505af1158015611bc7573d6000803e3d6000fd5b505050506040513d6020811015611bdd57600080fd5b50511515611522576040805160e560020a62461bcd02815260206004820152601b60248201527f4572726f7220696e206d696e74696e672074686520746f6b656e730000000000604482015290519081900360640190fd00a165627a7a72305820ff67e759834d664815c2ce3dca2711e15ca212ac58ec4f5c21e798151be297870029",
  "sourceMap": "266:10334:37:-;;;216:26:2;;;-1:-1:-1;;;;;;216:26:2;;;321:35:61;;;-1:-1:-1;;321:35:61;;;1189:119:37;5:2:-1;;;;30:1;27;20:12;5:2;1189:119:37;;;;;;;;;;;;;;;;;;;624:13:13;:30;;-1:-1:-1;;;;;624:30:13;;;-1:-1:-1;;;;;;624:30:13;;;;;;;:13;664:20;;;;674:10;664:20;;;694:9;:31;;;;;;;;;;;;;;266:10334:37;;;;;;",
  "deployedSourceMap": "266:10334:37:-;;;;;;;;-1:-1:-1;266:10334:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1461:21;1471:10;1461:9;:21::i;:::-;266:10334;5362:359;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5362:359:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2768:157;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2768:157:37;;;;;;;;;;;;;;;;;;;;;;;512:19;;8:9:-1;5:2;;;30:1;27;20:12;5:2;512:19:37;;;;;;;;;;;;;;;;;;;;532:22:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;532:22:41;;;;765:18:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;765:18:37;;;;4290:183;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4290:183:37;;;;4794:97;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4794:97:37;;;;1811:69:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1811:69:41;;;;4134:90:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4134:90:37;;;;;;;;;;;;;;;;;;;;;;665:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;665:25:37;;;;415:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;415:21:37;;;;;;;;-1:-1:-1;;;;;415:21:37;;;;;;;;;;;;;;216:26:2;;8:9:-1;5:2;;;30:1;27;20:12;5:2;216:26:2;;;;1890:223:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1890:223:13;;;;;568:26:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;568:26:37;;;;790:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;790:45:37;;;-1:-1:-1;;;;;790:45:37;;;365:22:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;365:22:13;;;;475:24:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;475:24:41;;;;1647:97;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1647:97:41;;;;2014:286;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;2014:286:41;;;-1:-1:-1;;;;;2014:286:41;;;1979:694:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1979:694:37;;;;;;;;;;;;;;;-1:-1:-1;;;;;1979:694:37;;;4540:183;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4540:183:37;;;;895:184:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;895:184:41;;;-1:-1:-1;;;;;895:184:41;;;;;587:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;587:25:41;;;;276:28:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;276:28:13;;;;5147:155:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5147:155:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;5147:155:37;;;;;;;;;;;;;;;;;247:22:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;247:22:13;;;;3561:450:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3561:450:37;;;;;311:47:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;311:47:13;;;;601:28:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;601:28:37;;;;3077:367;;;;-1:-1:-1;;;;;3077:367:37;;;395:44:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;395:44:41;;;;;;;4964:89:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4964:89:37;;;;3077:367;782:14:61;;3281:17:37;;782:14:61;;781:15;773:24;;;;;;803:14;:21;;-1:-1:-1;;803:21:61;820:4;803:21;;;3165:6:37;;-1:-1:-1;;;;3165:6:37;;;;3164:7;3156:16;;;;;;3190:39;;;:13;:39;;;;;;3182:88;;;;;;;-1:-1:-1;;;;;3182:88:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3301:9:37;3320:35;3331:12;3301:9;3320:10;:35::i;:::-;3366:15;:13;:15::i;:::-;3391:46;3413:12;3427:9;3391:21;:46::i;:::-;-1:-1:-1;;837:14:61;:22;;-1:-1:-1;;837:22:61;;;3077:367:37:o;5362:359::-;5407:7;5416;5425;5434;5443;5452;5461;5470:4;5507:9;;5530:7;;5551:3;;5568:4;;5586:11;;5611:13;;5638:10;;5663:13;:40;5683:18;5677:25;;;;;;;;5663:40;;;;;;;;;;;;;;;-1:-1:-1;5663:40:37;;5486:228;;-1:-1:-1;5486:228:37;;-1:-1:-1;5486:228:37;;-1:-1:-1;5486:228:37;;-1:-1:-1;5486:228:37;-1:-1:-1;5486:228:37;-1:-1:-1;5486:228:37;-1:-1:-1;5663:40:37;;-1:-1:-1;5362:359:37;;;;;;;;:::o;2768:157::-;2848:69;;;;;;;;;;;;;;;;;;;;;2768:157;;:::o;512:19::-;;;;:::o;532:22:41:-;;;;:::o;765:18:37:-;;;;:::o;4290:183::-;4337:7;4360:13;4337:7;;4374:24;4360:39;;;;;;;;;;;;;;;-1:-1:-1;4360:39:37;;;4356:110;;;-1:-1:-1;4420:11:37;;4413:18;;4356:110;-1:-1:-1;4465:1:37;4458:8;;4794:97;4871:13;;4794:97;:::o;1811:69:41:-;1334:13:13;;1319:37;;;-1:-1:-1;;;;;1319:37:13;;;;-1:-1:-1;;;;;1334:13:13;;;;1319:35;;:37;;;;;;;;;;;;;;;1334:13;;1319:37;;;5:2:-1;;;;30:1;27;20:12;5:2;1319:37:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1319:37:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1319:37:13;-1:-1:-1;;;;;1305:51:13;:10;:51;1297:83;;;;;-1:-1:-1;;;;;1297:83:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;1857:16:41;:14;:16::i;:::-;1811:69::o;4134:90:37:-;4214:3;;4200:10;;:17;;4134:90;:::o;665:25::-;;;;:::o;415:21::-;;;;;;-1:-1:-1;;;;;415:21:37;;:::o;216:26:2:-;;;-1:-1:-1;;;216:26:2;;;;;:::o;1890:223:13:-;1029:13;;1014:37;;;-1:-1:-1;;;;;1014:37:13;;;;1959:4;;1940:9;;1959:4;;;;-1:-1:-1;;;;;1029:13:13;;1014:35;;:37;;;;;;;;;;;;;;1959:4;1029:13;1014:37;;;5:2:-1;;;;30:1;27;20:12;5:2;1014:37:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1014:37:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1014:37:13;1092:7;;1000:10;-1:-1:-1;;;;;1000:51:13;;;;;;-1:-1:-1;1092:7:13;;1078:21;;-1:-1:-1;1000:51:13;;1117:18;;;1126:9;1117:18;:99;;;-1:-1:-1;1152:13:13;;1137:79;;;;;;1183:10;1137:79;;;;1203:4;1137:79;;;;;;;;;;;;-1:-1:-1;;;;;1152:13:13;;;;1137:45;;:79;;;;;;;;;;;;;;;-1:-1:-1;1152:13:13;1137:79;;;5:2:-1;;;;30:1;27;20:12;5:2;1137:79:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1137:79:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1137:79:13;1117:99;1109:135;;;;;;;-1:-1:-1;;;;;1109:135:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;1983:9;;;2036:7;;2021:31;;;-1:-1:-1;;;;;2021:31:13;;;;-1:-1:-1;;;;;1983:9:13;;;;:22;;2014:4;;2036:7;;;;;2021:29;;:31;;;;;;;;;;;;;;;;2036:7;2021:31;;;5:2:-1;;;;30:1;27;20:12;5:2;2021:31:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2021:31:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2021:31:13;1983:79;;;;;;-1:-1:-1;1983:79:13;;;-1:-1:-1;;;;;1983:79:13;;;;;;;;;;;;;;;;;;;;;;;;;;;2021:31;;1983:79;;;;;;;-1:-1:-1;1983:79:13;;;;5:2:-1;;;;30:1;27;20:12;5:2;1983:79:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1983:79:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1983:79:13;1975:110;;;;;;;-1:-1:-1;;;;;1975:110:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2102:4:13;;1890:223;-1:-1:-1;;;;1890:223:13:o;568:26:37:-;;;;:::o;790:45::-;;;;;;;;;;;;;:::o;365:22:13:-;;;-1:-1:-1;;;;;365:22:13;;:::o;475:24:41:-;;;;:::o;1647:97::-;1334:13:13;;1319:37;;;-1:-1:-1;;;;;1319:37:13;;;;-1:-1:-1;;;;;1334:13:13;;;;1319:35;;:37;;;;;;;;;;;;;;;1334:13;;1319:37;;;5:2:-1;;;;30:1;27;20:12;5:2;1319:37:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1319:37:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1319:37:13;-1:-1:-1;;;;;1305:51:13;:10;:51;1297:83;;;;;-1:-1:-1;;;;;1297:83:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;1705:7:41;;1699:3;:13;1691:22;;;;;;1723:14;:12;:14::i;2014:286::-;1334:13:13;;1319:37;;;-1:-1:-1;;;;;1319:37:13;;;;2136:16:41;;;;-1:-1:-1;;;;;1334:13:13;;;;1319:35;;:37;;;;;;;;;;;;;;;2136:16:41;1334:13:13;1319:37;;;5:2:-1;;;;30:1;27;20:12;5:2;1319:37:13;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1319:37:13;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1319:37:13;-1:-1:-1;;;;;1305:51:13;:10;:51;1297:83;;;;;-1:-1:-1;;;;;1297:83:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2097:28:41;;;;2089:37;;;;;;2209:30;;;;;;2233:4;2209:30;;;;;;2166:14;;-1:-1:-1;;;;;;2209:15:41;;;;;:30;;;;;;;;;;;;;;-1:-1:-1;2209:15:41;:30;;;5:2:-1;;;;30:1;27;20:12;5:2;2209:30:41;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2209:30:41;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2209:30:41;2257:35;;;;;;2272:10;2257:35;;;;;;;;;;;;2209:30;;-1:-1:-1;;;;;;2257:14:41;;;;;:35;;;;;2209:30;;2257:35;;;;;;;;-1:-1:-1;2257:14:41;:35;;;5:2:-1;;;;30:1;27;20:12;5:2;2257:35:41;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2257:35:41;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;2257:35:41;2249:44;;;;;;;;2014:286;;;:::o;1979:694:37:-;1457:7:13;;-1:-1:-1;;;;;1457:7:13;1443:10;:21;1435:55;;;;;-1:-1:-1;;;;;1435:55:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;2222:1:37;2214:9;;2206:60;;;;;-1:-1:-1;;;;;2206:60:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2284:28:37;;;;2276:70;;;;;-1:-1:-1;;;;;2276:70:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;2378:3;2364:10;:17;;:42;;;;;2396:10;2385:8;:21;2364:42;2356:84;;;;;;;-1:-1:-1;;;;;2356:84:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;2465:1;2458:8;;2450:49;;;;;-1:-1:-1;;;;;2450:49:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;2509:9;:22;;;2541:7;:18;;;2569:3;:10;;;2589:4;:12;;;2611:6;:23;;-1:-1:-1;;2611:23:37;;-1:-1:-1;;;;;2611:23:37;;;;;;2644:22;2651:14;2644:6;:22::i;:::-;1979:694;;;;;;:::o;4540:183::-;4586:7;4609:13;4586:7;4629:18;4623:25;;895:184:41;1008:9;;:48;;;;;;-1:-1:-1;;;;;1008:48:41;;;;;;;1050:4;1008:48;;;;;;-1:-1:-1;;1060:12:41;;1008:9;;:19;;:48;;;;;;;;;;;;;;-1:-1:-1;1008:9:41;:48;;;5:2:-1;;;;30:1;27;20:12;5:2;1008:48:41;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1008:48:41;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;1008:48:41;:64;;;-1:-1:-1;895:184:41;;;;;:::o;587:25::-;;;;:::o;276:28:13:-;;;-1:-1:-1;;;;;276:28:13;;:::o;5147:155:37:-;5248:16;;;5262:1;5248:16;;;;;;;;;5147:155::o;247:22:13:-;;;-1:-1:-1;;;;;247:22:13;;:::o;3561:450:37:-;782:14:61;;;;781:15;773:24;;;;;;803:14;:21;;-1:-1:-1;;803:21:61;820:4;803:21;;;3649:6:37;;-1:-1:-1;;;;3649:6:37;;;;3648:7;3640:16;;;;;;3694:18;3674:40;;:13;:40;;;;;;3666:90;;;;;;;-1:-1:-1;;;;;3666:90:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3774:43;3791:10;3803:13;3774:16;:43::i;:::-;3766:76;;;;;;;-1:-1:-1;;;;;3766:76:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;3852:37;3863:10;3875:13;3852:10;:37::i;:::-;3924:6;;3899:47;;3912:10;;3924:6;;;-1:-1:-1;;;;;3924:6:37;3932:13;3899:12;:47::i;:::-;3956:48;3978:10;3990:13;3956:21;:48::i;:::-;-1:-1:-1;837:14:61;:22;;-1:-1:-1;;837:22:61;;;3561:450:37:o;311:47:13:-;;;:::o;601:28:37:-;;;;:::o;395:44:41:-;;;;;;;;;;;;;;;:::o;4964:89:37:-;5036:10;;4964:89;:::o;6089:570::-;6285:14;6176:51;6197:12;6211:15;6176:20;:51::i;:::-;6302:32;6318:15;6302;:32::i;:::-;6383:11;;6285:49;;-1:-1:-1;6383:32:37;;6399:15;6383:32;:15;:32;:::i;:::-;6369:11;:46;6438:10;;:22;;6453:6;6438:22;:14;:22;:::i;:::-;6425:10;:35;6471:38;6488:12;6502:6;6471:16;:38::i;:::-;6524:64;;;;;;;;;;;;;;-1:-1:-1;;;;;6524:64:37;;;6538:10;;6524:64;;;;;;;;;;;6599:53;6622:12;6636:15;6599:22;:53::i;9558:77::-;9602:6;;:26;;:6;;;;-1:-1:-1;;;;;9602:6:37;;:26;9618:9;9602:26;;;;;;;;;;;9618:9;9602:6;:26;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9602:26:37;9558:77::o;7616:134::-;;;:::o;915:98:2:-;590:6;;-1:-1:-1;;;590:6:2;;;;582:41;;;;;;;-1:-1:-1;;;;;582:41:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;965:6;:14;;-1:-1:-1;;965:14:2;;;994:12;;;1002:3;994:12;;;;;;;;;;;;;915:98::o;728:96::-;397:6;;-1:-1:-1;;;397:6:2;;;;396:7;388:38;;;;;-1:-1:-1;;;;;388:38:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;779:6;:13;;-1:-1:-1;;779:13:2;-1:-1:-1;;;779:13:2;;;807:10;;;813:3;807:10;;;;;;;;;;;;;728:96::o;9808:360:37:-;9873:19;;;;;:42;;;9896:14;:19;;9914:1;9896:19;9873:42;9865:81;;;;;;;-1:-1:-1;;;;;9865:81:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;9956:29;;;;;;;:13;:29;;;;;:36;;-1:-1:-1;;9956:36:37;9988:4;9956:36;;;;;;10006:43;10002:160;;;10081:9;;-1:-1:-1;;;;;10081:9:37;10073:32;;10065:86;;;;;-1:-1:-1;;;;;10065:86:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10437:160;10535:9;;:55;;;;;;-1:-1:-1;;;;;10535:55:37;;;;;;;;;;;;;;;;;;;;;;:9;;;;;:22;;:55;;;;;;;;;;;;;;-1:-1:-1;10535:9:37;:55;;;5:2:-1;;;;30:1;27;20:12;5:2;10535:55:37;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10535:55:37;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;10437:160:37:o;6973:474::-;-1:-1:-1;;;;;7082:26:37;;;;7074:75;;;;;-1:-1:-1;;;;;7074:75:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7167:20;;;7159:73;;;;;-1:-1:-1;;;;;7159:73:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7302:3;;7250:48;7265:32;7281:15;7265;:32::i;:::-;7250:10;;;:48;:14;:48;:::i;:::-;:55;;7242:107;;;;;-1:-1:-1;;;;;7242:107:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7374:9;;7367:3;:16;;:34;;;;;7394:7;;7387:3;:14;;7367:34;7359:81;;;;;;;-1:-1:-1;;;;;7359:81:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9339:131;9412:7;9438:25;9458:4;;9438:15;:19;;:25;;;;:::i;1214:123:63:-;1293:5;;;1311:6;;;;1304:14;;;8475:317:37;-1:-1:-1;;;;;8568:23:37;;;;;;:9;:23;;;;;;:28;8564:92;;;8628:13;;;8644:1;8628:17;8612:33;;8564:92;-1:-1:-1;;;;;8691:23:37;;;;;;:9;:23;;;;;;:41;;8719:12;8691:27;:41::i;:::-;-1:-1:-1;;;;;8665:23:37;;;;;;:9;:23;;;;;:67;8743:42;8665:23;8772:12;8743:14;:42::i;203:373:63:-;261:9;487:6;;483:35;;;-1:-1:-1;510:1:63;503:8;;483:35;-1:-1:-1;528:5:63;;;532:1;528;:5;546;;;;;;;;:10;539:18;;;8030:187:37;8131:13;;8125:53;;;;;;-1:-1:-1;;;;;8125:53:37;;;;;;;;;;;;;;;8131:13;;;;;8125:25;;:53;;;;;;;;;;;;;;-1:-1:-1;8131:13:37;8125:53;;;5:2:-1;;;;30:1;27;20:12;5:2;8125:53:37;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8125:53:37;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8125:53:37;8117:93;;;;;;;-1:-1:-1;;;;;8117:93:37;;;;;;;;;;;;;;;;;;;;;;;;;;",
  "source": "pragma solidity ^0.4.24;\n\nimport \"./ISTO.sol\";\nimport \"../../interfaces/IST20.sol\";\nimport \"openzeppelin-solidity/contracts/ReentrancyGuard.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\n\n/**\n * @title STO module for standard capped crowdsale\n */\ncontract CappedSTO is ISTO, ReentrancyGuard {\n    using SafeMath for uint256;\n\n    // Address where funds are collected and tokens are issued to\n    address public wallet;\n\n    // How many token units a buyer gets per wei / base unit of POLY\n    uint256 public rate;\n\n    // Amount of funds raised\n    uint256 public fundsRaised;\n\n    uint256 public investorCount;\n\n    // Amount of tokens sold\n    uint256 public tokensSold;\n\n    //How many tokens this STO will be allowed to sell to investors\n    uint256 public cap;\n\n    mapping (address => uint256) public investors;\n\n    /**\n    * Event for token purchase logging\n    * @param purchaser who paid for the tokens\n    * @param beneficiary who got the tokens\n    * @param value weis paid for purchase\n    * @param amount amount of tokens purchased\n    */\n    event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount);\n\n    constructor (address _securityToken, address _polyAddress) public\n    IModule(_securityToken, _polyAddress)\n    {\n    }\n\n    //////////////////////////////////\n    /**\n    * @notice fallback function ***DO NOT OVERRIDE***\n    */\n    function () external payable {\n        buyTokens(msg.sender);\n    }\n\n    /**\n     * @notice Function used to intialize the contract variables\n     * @param _startTime Unix timestamp at which offering get started\n     * @param _endTime Unix timestamp at which offering get ended\n     * @param _cap Maximum No. of tokens for sale\n     * @param _rate Token units a buyer gets per wei / base unit of POLY\n     * @param _fundRaiseType Type of currency used to collect the funds\n     * @param _fundsReceiver Ethereum account address to hold the funds\n     */\n    function configure(\n        uint256 _startTime,\n        uint256 _endTime,\n        uint256 _cap,\n        uint256 _rate,\n        uint8 _fundRaiseType,\n        address _fundsReceiver\n    )\n    public\n    onlyFactory\n    {\n        require(_rate > 0, \"Rate of token should be greater than 0\");\n        require(_fundsReceiver != address(0), \"Zero address is not permitted\");\n        require(_startTime >= now && _endTime > _startTime, \"Date parameters are not valid\");\n        require(_cap > 0, \"Cap should be greater than 0\");\n        startTime = _startTime;\n        endTime = _endTime;\n        cap = _cap;\n        rate = _rate;\n        wallet = _fundsReceiver;\n        _check(_fundRaiseType);\n    }\n\n    /**\n     * @notice This function returns the signature of configure function\n     */\n    function getInitFunction() public pure returns (bytes4) {\n        return bytes4(keccak256(\"configure(uint256,uint256,uint256,uint256,uint8,address)\"));\n    }\n\n    /**\n      * @notice low level token purchase ***DO NOT OVERRIDE***\n      * @param _beneficiary Address performing the token purchase\n      */\n    function buyTokens(address _beneficiary) public payable nonReentrant {\n        require(!paused);\n        require(fundRaiseType[uint8(FundRaiseType.ETH)], \"ETH should be the mode of investment\");\n\n        uint256 weiAmount = msg.value;\n        _processTx(_beneficiary, weiAmount);\n\n        _forwardFunds();\n        _postValidatePurchase(_beneficiary, weiAmount);\n    }\n\n    /**\n      * @notice low level token purchase\n      * @param _investedPOLY Amount of POLY invested\n      */\n    function buyTokensWithPoly(uint256 _investedPOLY) public nonReentrant{\n        require(!paused);\n        require(fundRaiseType[uint8(FundRaiseType.POLY)], \"POLY should be the mode of investment\");\n        require(verifyInvestment(msg.sender, _investedPOLY), \"Not valid Investment\");\n        _processTx(msg.sender, _investedPOLY);\n        _forwardPoly(msg.sender, wallet, _investedPOLY);\n        _postValidatePurchase(msg.sender, _investedPOLY);\n    }\n\n    /**\n    * @notice Checks whether the cap has been reached.\n    * @return bool Whether the cap was reached\n    */\n    function capReached() public view returns (bool) {\n        return tokensSold >= cap;\n    }\n\n    /**\n     * @notice Return ETH raised by the STO\n     */\n    function getRaisedEther() public view returns (uint256) {\n        if (fundRaiseType[uint8(FundRaiseType.ETH)])\n            return fundsRaised;\n        else\n            return 0;\n    }\n\n    /**\n     * @notice Return POLY raised by the STO\n     */\n    function getRaisedPOLY() public view returns (uint256) {\n        if (fundRaiseType[uint8(FundRaiseType.POLY)])\n            return fundsRaised;\n        else\n            return 0;\n    }\n\n    /**\n     * @notice Return the total no. of investors\n     */\n    function getNumberInvestors() public view returns (uint256) {\n        return investorCount;\n    }\n\n    /**\n     * @notice Return the total no. of tokens sold\n     */\n    function getTokensSold() public view returns (uint256) {\n        return tokensSold;\n    }\n\n    /**\n     * @notice Return the permissions flag that are associated with STO\n     */\n    function getPermissions() public view returns(bytes32[]) {\n        bytes32[] memory allPermissions = new bytes32[](0);\n        return allPermissions;\n    }\n\n    /**\n     * @notice Return the STO details\n     */\n    function getSTODetails() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, bool) {\n        return (\n            startTime,\n            endTime,\n            cap,\n            rate,\n            fundsRaised,\n            investorCount,\n            tokensSold,\n            (fundRaiseType[uint8(FundRaiseType.POLY)])\n        );\n    }\n\n    // -----------------------------------------\n    // Internal interface (extensible)\n    // -----------------------------------------\n    /**\n      * Processing the purchase as well as verify the required validations\n      * @param _beneficiary Address performing the token purchase\n      * @param _investedAmount Value in wei involved in the purchase\n    */\n    function _processTx(address _beneficiary, uint256 _investedAmount) internal {\n\n        _preValidatePurchase(_beneficiary, _investedAmount);\n        // calculate token amount to be created\n        uint256 tokens = _getTokenAmount(_investedAmount);\n\n        // update state\n        fundsRaised = fundsRaised.add(_investedAmount);\n        tokensSold = tokensSold.add(tokens);\n\n        _processPurchase(_beneficiary, tokens);\n        emit TokenPurchase(msg.sender, _beneficiary, _investedAmount, tokens);\n\n        _updatePurchasingState(_beneficiary, _investedAmount);\n    }\n\n    /**\n    * @notice Validation of an incoming purchase.\n      Use require statements to revert state when conditions are not met. Use super to concatenate validations.\n    * @param _beneficiary Address performing the token purchase\n    * @param _investedAmount Value in wei involved in the purchase\n    */\n    function _preValidatePurchase(address _beneficiary, uint256 _investedAmount) internal view {\n        require(_beneficiary != address(0), \"Beneficiary address should not be 0x\");\n        require(_investedAmount != 0, \"Amount invested should not be equal to 0\");\n        require(tokensSold.add(_getTokenAmount(_investedAmount)) <= cap, \"Investment more than cap is not allowed\");\n        require(now >= startTime && now <= endTime, \"Offering is closed/Not yet started\");\n    }\n\n    /**\n    * @notice Validation of an executed purchase.\n      Observe state and use revert statements to undo rollback when valid conditions are not met.\n    */\n    function _postValidatePurchase(address /*_beneficiary*/, uint256 /*_investedAmount*/) internal pure {\n      // optional override\n    }\n\n    /**\n    * @notice Source of tokens.\n      Override this method to modify the way in which the crowdsale ultimately gets and sends its tokens.\n    * @param _beneficiary Address performing the token purchase\n    * @param _tokenAmount Number of tokens to be emitted\n    */\n    function _deliverTokens(address _beneficiary, uint256 _tokenAmount) internal {\n        require(IST20(securityToken).mint(_beneficiary, _tokenAmount), \"Error in minting the tokens\");\n    }\n\n    /**\n    * @notice Executed when a purchase has been validated and is ready to be executed. Not necessarily emits/sends tokens.\n    * @param _beneficiary Address receiving the tokens\n    * @param _tokenAmount Number of tokens to be purchased\n    */\n    function _processPurchase(address _beneficiary, uint256 _tokenAmount) internal {\n        if (investors[_beneficiary] == 0) {\n            investorCount = investorCount + 1;\n        }\n        investors[_beneficiary] = investors[_beneficiary].add(_tokenAmount);\n\n        _deliverTokens(_beneficiary, _tokenAmount);\n    }\n\n    /**\n    * @notice Override for extensions that require an internal state to check for validity\n      (current user contributions, etc.)\n    */\n    function _updatePurchasingState(address /*_beneficiary*/, uint256 /*_investedAmount*/) internal pure {\n      // optional override\n    }\n\n    /**\n    * @notice Override to extend the way in which ether is converted to tokens.\n    * @param _investedAmount Value in wei to be converted into tokens\n    * @return Number of tokens that can be purchased with the specified _investedAmount\n    */\n    function _getTokenAmount(uint256 _investedAmount) internal view returns (uint256) {\n        return _investedAmount.mul(rate);\n    }\n\n    /**\n    * @notice Determines how ETH is stored/forwarded on purchases.\n    */\n    function _forwardFunds() internal {\n        wallet.transfer(msg.value);\n    }\n\n    /**\n     * @notice Internal function used to check the type of fund raise currency\n     * @param _fundRaiseType Type of currency used to collect the funds\n     */\n    function _check(uint8 _fundRaiseType) internal {\n        require(_fundRaiseType == 0 || _fundRaiseType == 1, \"Not a valid fundraise type\");\n        fundRaiseType[_fundRaiseType] = true;\n        if (_fundRaiseType == uint8(FundRaiseType.POLY)) {\n            require(address(polyToken) != address(0), \"Address of the polyToken should not be 0x\");\n        }\n    }\n\n    /**\n     * @notice Internal function used to forward the POLY raised to beneficiary address\n     * @param _beneficiary Address of the funds reciever\n     * @param _to Address who wants to ST-20 tokens\n     * @param _fundsAmount Amount invested by _to\n     */\n    function _forwardPoly(address _beneficiary, address _to, uint256 _fundsAmount) internal {\n        polyToken.transferFrom(_beneficiary, _to, _fundsAmount);\n    }\n\n}\n",
  "sourcePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/STO/CappedSTO.sol",
  "ast": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/STO/CappedSTO.sol",
    "exportedSymbols": {
      "CappedSTO": [
        13934
      ]
    },
    "id": 13935,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 13326,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:37"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/STO/ISTO.sol",
        "file": "./ISTO.sol",
        "id": 13327,
        "nodeType": "ImportDirective",
        "scope": 13935,
        "sourceUnit": 14624,
        "src": "26:20:37",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IST20.sol",
        "file": "../../interfaces/IST20.sol",
        "id": 13328,
        "nodeType": "ImportDirective",
        "scope": 13935,
        "sourceUnit": 10049,
        "src": "47:36:37",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/ReentrancyGuard.sol",
        "file": "openzeppelin-solidity/contracts/ReentrancyGuard.sol",
        "id": 13329,
        "nodeType": "ImportDirective",
        "scope": 13935,
        "sourceUnit": 22414,
        "src": "84:61:37",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 13330,
        "nodeType": "ImportDirective",
        "scope": 13935,
        "sourceUnit": 22579,
        "src": "146:59:37",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 13331,
              "name": "ISTO",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14623,
              "src": "288:4:37",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ISTO_$14623",
                "typeString": "contract ISTO"
              }
            },
            "id": 13332,
            "nodeType": "InheritanceSpecifier",
            "src": "288:4:37"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 13333,
              "name": "ReentrancyGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22413,
              "src": "294:15:37",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ReentrancyGuard_$22413",
                "typeString": "contract ReentrancyGuard"
              }
            },
            "id": 13334,
            "nodeType": "InheritanceSpecifier",
            "src": "294:15:37"
          }
        ],
        "contractDependencies": [
          471,
          9717,
          14623,
          22413
        ],
        "contractKind": "contract",
        "documentation": "@title STO module for standard capped crowdsale",
        "fullyImplemented": true,
        "id": 13934,
        "linearizedBaseContracts": [
          13934,
          22413,
          14623,
          471,
          9717
        ],
        "name": "CappedSTO",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 13337,
            "libraryName": {
              "contractScope": null,
              "id": 13335,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22578,
              "src": "322:8:37",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$22578",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "316:27:37",
            "typeName": {
              "id": 13336,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "335:7:37",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 13339,
            "name": "wallet",
            "nodeType": "VariableDeclaration",
            "scope": 13934,
            "src": "415:21:37",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 13338,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "415:7:37",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 13341,
            "name": "rate",
            "nodeType": "VariableDeclaration",
            "scope": 13934,
            "src": "512:19:37",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 13340,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "512:7:37",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 13343,
            "name": "fundsRaised",
            "nodeType": "VariableDeclaration",
            "scope": 13934,
            "src": "568:26:37",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 13342,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "568:7:37",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 13345,
            "name": "investorCount",
            "nodeType": "VariableDeclaration",
            "scope": 13934,
            "src": "601:28:37",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 13344,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "601:7:37",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 13347,
            "name": "tokensSold",
            "nodeType": "VariableDeclaration",
            "scope": 13934,
            "src": "665:25:37",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 13346,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "665:7:37",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 13349,
            "name": "cap",
            "nodeType": "VariableDeclaration",
            "scope": 13934,
            "src": "765:18:37",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 13348,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "765:7:37",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 13353,
            "name": "investors",
            "nodeType": "VariableDeclaration",
            "scope": 13934,
            "src": "790:45:37",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 13352,
              "keyType": {
                "id": 13350,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "799:7:37",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "790:28:37",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 13351,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "810:7:37",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": "Event for token purchase logging\n@param purchaser who paid for the tokens\n@param beneficiary who got the tokens\n@param value weis paid for purchase\n@param amount amount of tokens purchased",
            "id": 13363,
            "name": "TokenPurchase",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 13362,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13355,
                  "indexed": true,
                  "name": "purchaser",
                  "nodeType": "VariableDeclaration",
                  "scope": 13363,
                  "src": "1096:25:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13354,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1096:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13357,
                  "indexed": true,
                  "name": "beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 13363,
                  "src": "1123:27:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13356,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1123:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13359,
                  "indexed": false,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 13363,
                  "src": "1152:13:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13358,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1152:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13361,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 13363,
                  "src": "1167:14:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13360,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1167:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1095:87:37"
            },
            "src": "1076:107:37"
          },
          {
            "body": {
              "id": 13374,
              "nodeType": "Block",
              "src": "1301:7:37",
              "statements": []
            },
            "documentation": null,
            "id": 13375,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13370,
                    "name": "_securityToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13365,
                    "src": "1267:14:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 13371,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13367,
                    "src": "1283:12:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13372,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13369,
                  "name": "IModule",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9717,
                  "src": "1259:7:37",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModule_$9717_$",
                    "typeString": "type(contract IModule)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1259:37:37"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13368,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13365,
                  "name": "_securityToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 13375,
                  "src": "1202:22:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13364,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1202:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13367,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 13375,
                  "src": "1226:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13366,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1226:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1201:46:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13373,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1301:0:37"
            },
            "scope": 13934,
            "src": "1189:119:37",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13383,
              "nodeType": "Block",
              "src": "1451:38:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13379,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1471:3:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13380,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1471:10:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13378,
                      "name": "buyTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13513,
                      "src": "1461:9:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 13381,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1461:21:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13382,
                  "nodeType": "ExpressionStatement",
                  "src": "1461:21:37"
                }
              ]
            },
            "documentation": "@notice fallback function ***DO NOT OVERRIDE***",
            "id": 13384,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13376,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1431:2:37"
            },
            "payable": true,
            "returnParameters": {
              "id": 13377,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1451:0:37"
            },
            "scope": 13934,
            "src": "1422:67:37",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13459,
              "nodeType": "Block",
              "src": "2196:477:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 13404,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 13402,
                          "name": "_rate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13392,
                          "src": "2214:5:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 13403,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2222:1:37",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2214:9:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "52617465206f6620746f6b656e2073686f756c642062652067726561746572207468616e2030",
                        "id": 13405,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2225:40:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a6e4993252089c9e95eb563fe8f3f44dc0998d29d7fa526da197d6021bc55794",
                          "typeString": "literal_string \"Rate of token should be greater than 0\""
                        },
                        "value": "Rate of token should be greater than 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a6e4993252089c9e95eb563fe8f3f44dc0998d29d7fa526da197d6021bc55794",
                          "typeString": "literal_string \"Rate of token should be greater than 0\""
                        }
                      ],
                      "id": 13401,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "2206:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2206:60:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13407,
                  "nodeType": "ExpressionStatement",
                  "src": "2206:60:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 13413,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 13409,
                          "name": "_fundsReceiver",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13396,
                          "src": "2284:14:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 13411,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2310:1:37",
                              "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": 13410,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2302:7:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 13412,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2302:10:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2284:28:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5a65726f2061646472657373206973206e6f74207065726d6974746564",
                        "id": 13414,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2314:31:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_67dad9876e519cb1f8d1672bfe1a79aa4d9684b769c25ea228ccf28cac49b1d2",
                          "typeString": "literal_string \"Zero address is not permitted\""
                        },
                        "value": "Zero address is not permitted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_67dad9876e519cb1f8d1672bfe1a79aa4d9684b769c25ea228ccf28cac49b1d2",
                          "typeString": "literal_string \"Zero address is not permitted\""
                        }
                      ],
                      "id": 13408,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "2276:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13415,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2276:70:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13416,
                  "nodeType": "ExpressionStatement",
                  "src": "2276:70:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 13424,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13420,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13418,
                            "name": "_startTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13386,
                            "src": "2364:10:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 13419,
                            "name": "now",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23133,
                            "src": "2378:3:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2364:17:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13423,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13421,
                            "name": "_endTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13388,
                            "src": "2385:8:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 13422,
                            "name": "_startTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13386,
                            "src": "2396:10:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2385:21:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2364:42:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4461746520706172616d657465727320617265206e6f742076616c6964",
                        "id": 13425,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2408:31:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_dc6b54cf3100cff8881f57272b33f1736c6835f2316d1c90f3d43b5ec543b1cf",
                          "typeString": "literal_string \"Date parameters are not valid\""
                        },
                        "value": "Date parameters are not valid"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_dc6b54cf3100cff8881f57272b33f1736c6835f2316d1c90f3d43b5ec543b1cf",
                          "typeString": "literal_string \"Date parameters are not valid\""
                        }
                      ],
                      "id": 13417,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "2356:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2356:84:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13427,
                  "nodeType": "ExpressionStatement",
                  "src": "2356:84:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 13431,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 13429,
                          "name": "_cap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13390,
                          "src": "2458:4:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 13430,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2465:1:37",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2458:8:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4361702073686f756c642062652067726561746572207468616e2030",
                        "id": 13432,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2468:30:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fbc7a3b223452e462982b48c1c47511d169f9dc1256265a9080c68e83151b4a8",
                          "typeString": "literal_string \"Cap should be greater than 0\""
                        },
                        "value": "Cap should be greater than 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fbc7a3b223452e462982b48c1c47511d169f9dc1256265a9080c68e83151b4a8",
                          "typeString": "literal_string \"Cap should be greater than 0\""
                        }
                      ],
                      "id": 13428,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "2450:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13433,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2450:49:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13434,
                  "nodeType": "ExpressionStatement",
                  "src": "2450:49:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13437,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 13435,
                      "name": "startTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14510,
                      "src": "2509:9:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 13436,
                      "name": "_startTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13386,
                      "src": "2521:10:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2509:22:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 13438,
                  "nodeType": "ExpressionStatement",
                  "src": "2509:22:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 13439,
                      "name": "endTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14512,
                      "src": "2541:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 13440,
                      "name": "_endTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13388,
                      "src": "2551:8:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2541:18:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 13442,
                  "nodeType": "ExpressionStatement",
                  "src": "2541:18:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13445,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 13443,
                      "name": "cap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13349,
                      "src": "2569:3:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 13444,
                      "name": "_cap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13390,
                      "src": "2575:4:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2569:10:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 13446,
                  "nodeType": "ExpressionStatement",
                  "src": "2569:10:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 13447,
                      "name": "rate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13341,
                      "src": "2589:4:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 13448,
                      "name": "_rate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13392,
                      "src": "2596:5:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2589:12:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 13450,
                  "nodeType": "ExpressionStatement",
                  "src": "2589:12:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13453,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 13451,
                      "name": "wallet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13339,
                      "src": "2611:6:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 13452,
                      "name": "_fundsReceiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13396,
                      "src": "2620:14:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2611:23:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 13454,
                  "nodeType": "ExpressionStatement",
                  "src": "2611:23:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13456,
                        "name": "_fundRaiseType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13394,
                        "src": "2651:14:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 13455,
                      "name": "_check",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13915,
                      "src": "2644:6:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint8_$returns$__$",
                        "typeString": "function (uint8)"
                      }
                    },
                    "id": 13457,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2644:22:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13458,
                  "nodeType": "ExpressionStatement",
                  "src": "2644:22:37"
                }
              ]
            },
            "documentation": "@notice Function used to intialize the contract variables\n@param _startTime Unix timestamp at which offering get started\n@param _endTime Unix timestamp at which offering get ended\n@param _cap Maximum No. of tokens for sale\n@param _rate Token units a buyer gets per wei / base unit of POLY\n@param _fundRaiseType Type of currency used to collect the funds\n@param _fundsReceiver Ethereum account address to hold the funds",
            "id": 13460,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 13399,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13398,
                  "name": "onlyFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9665,
                  "src": "2180:11:37",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2180:11:37"
              }
            ],
            "name": "configure",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13397,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13386,
                  "name": "_startTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 13460,
                  "src": "2007:18:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13385,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2007:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13388,
                  "name": "_endTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 13460,
                  "src": "2035:16:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13387,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2035:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13390,
                  "name": "_cap",
                  "nodeType": "VariableDeclaration",
                  "scope": 13460,
                  "src": "2061:12:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13389,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2061:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13392,
                  "name": "_rate",
                  "nodeType": "VariableDeclaration",
                  "scope": 13460,
                  "src": "2083:13:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13391,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2083:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13394,
                  "name": "_fundRaiseType",
                  "nodeType": "VariableDeclaration",
                  "scope": 13460,
                  "src": "2106:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 13393,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2106:5:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13396,
                  "name": "_fundsReceiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 13460,
                  "src": "2136:22:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13395,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2136:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1997:167:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13400,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2196:0:37"
            },
            "scope": 13934,
            "src": "1979:694:37",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13471,
              "nodeType": "Block",
              "src": "2824:101:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "636f6e6669677572652875696e743235362c75696e743235362c75696e743235362c75696e743235362c75696e74382c6164647265737329",
                            "id": 13467,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2858:58:37",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_9f5a851fde5fbf790a1d035468fbe1e28db22db9c4ca16c8e14e109d975600f2",
                              "typeString": "literal_string \"configure(uint256,uint256,uint256,uint256,uint8,address)\""
                            },
                            "value": "configure(uint256,uint256,uint256,uint256,uint8,address)"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_9f5a851fde5fbf790a1d035468fbe1e28db22db9c4ca16c8e14e109d975600f2",
                              "typeString": "literal_string \"configure(uint256,uint256,uint256,uint256,uint8,address)\""
                            }
                          ],
                          "id": 13466,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23125,
                          "src": "2848:9:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                            "typeString": "function () pure returns (bytes32)"
                          }
                        },
                        "id": 13468,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2848:69:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 13465,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2841:6:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes4_$",
                        "typeString": "type(bytes4)"
                      },
                      "typeName": "bytes4"
                    },
                    "id": 13469,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2841:77:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "functionReturnParameters": 13464,
                  "id": 13470,
                  "nodeType": "Return",
                  "src": "2834:84:37"
                }
              ]
            },
            "documentation": "@notice This function returns the signature of configure function",
            "id": 13472,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInitFunction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13461,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2792:2:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13463,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13472,
                  "src": "2816:6:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 13462,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "2816:6:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2815:8:37"
            },
            "scope": 13934,
            "src": "2768:157:37",
            "stateMutability": "pure",
            "superFunction": 9594,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13512,
              "nodeType": "Block",
              "src": "3146:298:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13481,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "3164:7:37",
                        "subExpression": {
                          "argumentTypes": null,
                          "id": 13480,
                          "name": "paused",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 423,
                          "src": "3165:6:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 13479,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "3156:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 13482,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3156:16:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13483,
                  "nodeType": "ExpressionStatement",
                  "src": "3156:16:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 13485,
                          "name": "fundRaiseType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14508,
                          "src": "3190:13:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_bool_$",
                            "typeString": "mapping(uint8 => bool)"
                          }
                        },
                        "id": 13490,
                        "indexExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13487,
                                "name": "FundRaiseType",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14504,
                                "src": "3210:13:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FundRaiseType_$14504_$",
                                  "typeString": "type(enum ISTO.FundRaiseType)"
                                }
                              },
                              "id": 13488,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "ETH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "3210:17:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                                "typeString": "enum ISTO.FundRaiseType"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                                "typeString": "enum ISTO.FundRaiseType"
                              }
                            ],
                            "id": 13486,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3204:5:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint8_$",
                              "typeString": "type(uint8)"
                            },
                            "typeName": "uint8"
                          },
                          "id": 13489,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3204:24:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3190:39:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4554482073686f756c6420626520746865206d6f6465206f6620696e766573746d656e74",
                        "id": 13491,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3231:38:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_29da700ebd0827e7994b2f4e05374cde7ace9ec213d716002d32edb1a59058f9",
                          "typeString": "literal_string \"ETH should be the mode of investment\""
                        },
                        "value": "ETH should be the mode of investment"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_29da700ebd0827e7994b2f4e05374cde7ace9ec213d716002d32edb1a59058f9",
                          "typeString": "literal_string \"ETH should be the mode of investment\""
                        }
                      ],
                      "id": 13484,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "3182:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13492,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3182:88:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13493,
                  "nodeType": "ExpressionStatement",
                  "src": "3182:88:37"
                },
                {
                  "assignments": [
                    13495
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13495,
                      "name": "weiAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 13513,
                      "src": "3281:17:37",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 13494,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3281:7:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13498,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 13496,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23131,
                      "src": "3301:3:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 13497,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "3301:9:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3281:29:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13500,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13474,
                        "src": "3331:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13501,
                        "name": "weiAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13495,
                        "src": "3345:9:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13499,
                      "name": "_processTx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13730,
                      "src": "3320:10:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 13502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3320:35:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13503,
                  "nodeType": "ExpressionStatement",
                  "src": "3320:35:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 13504,
                      "name": "_forwardFunds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13873,
                      "src": "3366:13:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 13505,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3366:15:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13506,
                  "nodeType": "ExpressionStatement",
                  "src": "3366:15:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13508,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13474,
                        "src": "3413:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13509,
                        "name": "weiAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13495,
                        "src": "3427:9:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13507,
                      "name": "_postValidatePurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13785,
                      "src": "3391:21:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) pure"
                      }
                    },
                    "id": 13510,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3391:46:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13511,
                  "nodeType": "ExpressionStatement",
                  "src": "3391:46:37"
                }
              ]
            },
            "documentation": "@notice low level token purchase ***DO NOT OVERRIDE***\n@param _beneficiary Address performing the token purchase",
            "id": 13513,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 13477,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13476,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22412,
                  "src": "3133:12:37",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3133:12:37"
              }
            ],
            "name": "buyTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13475,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13474,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 13513,
                  "src": "3096:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13473,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3096:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3095:22:37"
            },
            "payable": true,
            "returnParameters": {
              "id": 13478,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3146:0:37"
            },
            "scope": 13934,
            "src": "3077:367:37",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13563,
              "nodeType": "Block",
              "src": "3630:381:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13522,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "3648:7:37",
                        "subExpression": {
                          "argumentTypes": null,
                          "id": 13521,
                          "name": "paused",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 423,
                          "src": "3649:6:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 13520,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "3640:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 13523,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3640:16:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13524,
                  "nodeType": "ExpressionStatement",
                  "src": "3640:16:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 13526,
                          "name": "fundRaiseType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14508,
                          "src": "3674:13:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_bool_$",
                            "typeString": "mapping(uint8 => bool)"
                          }
                        },
                        "id": 13531,
                        "indexExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13528,
                                "name": "FundRaiseType",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14504,
                                "src": "3694:13:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FundRaiseType_$14504_$",
                                  "typeString": "type(enum ISTO.FundRaiseType)"
                                }
                              },
                              "id": 13529,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "POLY",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "3694:18:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                                "typeString": "enum ISTO.FundRaiseType"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                                "typeString": "enum ISTO.FundRaiseType"
                              }
                            ],
                            "id": 13527,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3688:5:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint8_$",
                              "typeString": "type(uint8)"
                            },
                            "typeName": "uint8"
                          },
                          "id": 13530,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3688:25:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3674:40:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "504f4c592073686f756c6420626520746865206d6f6465206f6620696e766573746d656e74",
                        "id": 13532,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3716:39:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a9bd9f181f09fc8996f4602e1bd7948bd9eccec1ce8a4506a628238a833a6e5b",
                          "typeString": "literal_string \"POLY should be the mode of investment\""
                        },
                        "value": "POLY should be the mode of investment"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a9bd9f181f09fc8996f4602e1bd7948bd9eccec1ce8a4506a628238a833a6e5b",
                          "typeString": "literal_string \"POLY should be the mode of investment\""
                        }
                      ],
                      "id": 13525,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "3666:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3666:90:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13534,
                  "nodeType": "ExpressionStatement",
                  "src": "3666:90:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 13537,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "3791:3:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 13538,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3791:10:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 13539,
                            "name": "_investedPOLY",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13515,
                            "src": "3803:13:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 13536,
                          "name": "verifyInvestment",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14534,
                          "src": "3774:16:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) view returns (bool)"
                          }
                        },
                        "id": 13540,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3774:43:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f742076616c696420496e766573746d656e74",
                        "id": 13541,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3819:22:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5c7e08e5001866f39552d373828a844ca94198bc0b16ade6836ffc7de2306f9",
                          "typeString": "literal_string \"Not valid Investment\""
                        },
                        "value": "Not valid Investment"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5c7e08e5001866f39552d373828a844ca94198bc0b16ade6836ffc7de2306f9",
                          "typeString": "literal_string \"Not valid Investment\""
                        }
                      ],
                      "id": 13535,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "3766:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13542,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3766:76:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13543,
                  "nodeType": "ExpressionStatement",
                  "src": "3766:76:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13545,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "3863:3:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13546,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3863:10:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13547,
                        "name": "_investedPOLY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13515,
                        "src": "3875:13:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13544,
                      "name": "_processTx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13730,
                      "src": "3852:10:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 13548,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3852:37:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13549,
                  "nodeType": "ExpressionStatement",
                  "src": "3852:37:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13551,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "3912:3:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13552,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3912:10:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13553,
                        "name": "wallet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13339,
                        "src": "3924:6:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13554,
                        "name": "_investedPOLY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13515,
                        "src": "3932:13:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13550,
                      "name": "_forwardPoly",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13933,
                      "src": "3899:12:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 13555,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3899:47:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13556,
                  "nodeType": "ExpressionStatement",
                  "src": "3899:47:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13558,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "3978:3:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13559,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3978:10:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13560,
                        "name": "_investedPOLY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13515,
                        "src": "3990:13:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13557,
                      "name": "_postValidatePurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13785,
                      "src": "3956:21:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) pure"
                      }
                    },
                    "id": 13561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3956:48:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13562,
                  "nodeType": "ExpressionStatement",
                  "src": "3956:48:37"
                }
              ]
            },
            "documentation": "@notice low level token purchase\n@param _investedPOLY Amount of POLY invested",
            "id": 13564,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 13518,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13517,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22412,
                  "src": "3618:12:37",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3618:12:37"
              }
            ],
            "name": "buyTokensWithPoly",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13515,
                  "name": "_investedPOLY",
                  "nodeType": "VariableDeclaration",
                  "scope": 13564,
                  "src": "3588:21:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13514,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3588:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3587:23:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13519,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3630:0:37"
            },
            "scope": 13934,
            "src": "3561:450:37",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13573,
              "nodeType": "Block",
              "src": "4183:41:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13571,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 13569,
                      "name": "tokensSold",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13347,
                      "src": "4200:10:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 13570,
                      "name": "cap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13349,
                      "src": "4214:3:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4200:17:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13568,
                  "id": 13572,
                  "nodeType": "Return",
                  "src": "4193:24:37"
                }
              ]
            },
            "documentation": "@notice Checks whether the cap has been reached.\n@return bool Whether the cap was reached",
            "id": 13574,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "capReached",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13565,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4153:2:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13568,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13567,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13574,
                  "src": "4177:4:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13566,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4177:4:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4176:6:37"
            },
            "scope": 13934,
            "src": "4134:90:37",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13590,
              "nodeType": "Block",
              "src": "4346:127:37",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 13579,
                      "name": "fundRaiseType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14508,
                      "src": "4360:13:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint8_$_t_bool_$",
                        "typeString": "mapping(uint8 => bool)"
                      }
                    },
                    "id": 13584,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 13581,
                            "name": "FundRaiseType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14504,
                            "src": "4380:13:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_FundRaiseType_$14504_$",
                              "typeString": "type(enum ISTO.FundRaiseType)"
                            }
                          },
                          "id": 13582,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "ETH",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "4380:17:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                            "typeString": "enum ISTO.FundRaiseType"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                            "typeString": "enum ISTO.FundRaiseType"
                          }
                        ],
                        "id": 13580,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4374:5:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint8_$",
                          "typeString": "type(uint8)"
                        },
                        "typeName": "uint8"
                      },
                      "id": 13583,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4374:24:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4360:39:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 13587,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4465:1:37",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 13578,
                    "id": 13588,
                    "nodeType": "Return",
                    "src": "4458:8:37"
                  },
                  "id": 13589,
                  "nodeType": "IfStatement",
                  "src": "4356:110:37",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 13585,
                      "name": "fundsRaised",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13343,
                      "src": "4420:11:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "functionReturnParameters": 13578,
                    "id": 13586,
                    "nodeType": "Return",
                    "src": "4413:18:37"
                  }
                }
              ]
            },
            "documentation": "@notice Return ETH raised by the STO",
            "id": 13591,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getRaisedEther",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13575,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4313:2:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13578,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13577,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13591,
                  "src": "4337:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13576,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4337:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4336:9:37"
            },
            "scope": 13934,
            "src": "4290:183:37",
            "stateMutability": "view",
            "superFunction": 14539,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13607,
              "nodeType": "Block",
              "src": "4595:128:37",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 13596,
                      "name": "fundRaiseType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14508,
                      "src": "4609:13:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint8_$_t_bool_$",
                        "typeString": "mapping(uint8 => bool)"
                      }
                    },
                    "id": 13601,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 13598,
                            "name": "FundRaiseType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14504,
                            "src": "4629:13:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_FundRaiseType_$14504_$",
                              "typeString": "type(enum ISTO.FundRaiseType)"
                            }
                          },
                          "id": 13599,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "POLY",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "4629:18:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                            "typeString": "enum ISTO.FundRaiseType"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                            "typeString": "enum ISTO.FundRaiseType"
                          }
                        ],
                        "id": 13597,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4623:5:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint8_$",
                          "typeString": "type(uint8)"
                        },
                        "typeName": "uint8"
                      },
                      "id": 13600,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4623:25:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4609:40:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 13604,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4715:1:37",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 13595,
                    "id": 13605,
                    "nodeType": "Return",
                    "src": "4708:8:37"
                  },
                  "id": 13606,
                  "nodeType": "IfStatement",
                  "src": "4605:111:37",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 13602,
                      "name": "fundsRaised",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13343,
                      "src": "4670:11:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "functionReturnParameters": 13595,
                    "id": 13603,
                    "nodeType": "Return",
                    "src": "4663:18:37"
                  }
                }
              ]
            },
            "documentation": "@notice Return POLY raised by the STO",
            "id": 13608,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getRaisedPOLY",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13592,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4562:2:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13595,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13594,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13608,
                  "src": "4586:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13593,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4586:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4585:9:37"
            },
            "scope": 13934,
            "src": "4540:183:37",
            "stateMutability": "view",
            "superFunction": 14544,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13615,
              "nodeType": "Block",
              "src": "4854:37:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13613,
                    "name": "investorCount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13345,
                    "src": "4871:13:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 13612,
                  "id": 13614,
                  "nodeType": "Return",
                  "src": "4864:20:37"
                }
              ]
            },
            "documentation": "@notice Return the total no. of investors",
            "id": 13616,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getNumberInvestors",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13609,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4821:2:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13612,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13611,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13616,
                  "src": "4845:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13610,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4845:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4844:9:37"
            },
            "scope": 13934,
            "src": "4794:97:37",
            "stateMutability": "view",
            "superFunction": 14549,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13623,
              "nodeType": "Block",
              "src": "5019:34:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13621,
                    "name": "tokensSold",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13347,
                    "src": "5036:10:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 13620,
                  "id": 13622,
                  "nodeType": "Return",
                  "src": "5029:17:37"
                }
              ]
            },
            "documentation": "@notice Return the total no. of tokens sold",
            "id": 13624,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTokensSold",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13617,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4986:2:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13620,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13619,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13624,
                  "src": "5010:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13618,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5010:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5009:9:37"
            },
            "scope": 13934,
            "src": "4964:89:37",
            "stateMutability": "view",
            "superFunction": 14554,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13642,
              "nodeType": "Block",
              "src": "5204:98:37",
              "statements": [
                {
                  "assignments": [
                    13633
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13633,
                      "name": "allPermissions",
                      "nodeType": "VariableDeclaration",
                      "scope": 13643,
                      "src": "5214:31:37",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 13631,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5214:7:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 13632,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "5214:9:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13639,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 13637,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5262:1:37",
                        "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": 13636,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "5248:13:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 13634,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5252:7:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 13635,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "5252:9:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 13638,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5248:16:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5214:50:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13640,
                    "name": "allPermissions",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13633,
                    "src": "5281:14:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 13629,
                  "id": 13641,
                  "nodeType": "Return",
                  "src": "5274:21:37"
                }
              ]
            },
            "documentation": "@notice Return the permissions flag that are associated with STO",
            "id": 13643,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13625,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5170:2:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13629,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13628,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13643,
                  "src": "5193:9:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13626,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "5193:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 13627,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "5193:9:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5192:11:37"
            },
            "scope": 13934,
            "src": "5147:155:37",
            "stateMutability": "view",
            "superFunction": 9687,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13678,
              "nodeType": "Block",
              "src": "5476:245:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 13662,
                        "name": "startTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14510,
                        "src": "5507:9:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13663,
                        "name": "endTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14512,
                        "src": "5530:7:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13664,
                        "name": "cap",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13349,
                        "src": "5551:3:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13665,
                        "name": "rate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13341,
                        "src": "5568:4:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13666,
                        "name": "fundsRaised",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13343,
                        "src": "5586:11:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13667,
                        "name": "investorCount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13345,
                        "src": "5611:13:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13668,
                        "name": "tokensSold",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13347,
                        "src": "5638:10:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 13669,
                              "name": "fundRaiseType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14508,
                              "src": "5663:13:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint8_$_t_bool_$",
                                "typeString": "mapping(uint8 => bool)"
                              }
                            },
                            "id": 13674,
                            "indexExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13671,
                                    "name": "FundRaiseType",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14504,
                                    "src": "5683:13:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_FundRaiseType_$14504_$",
                                      "typeString": "type(enum ISTO.FundRaiseType)"
                                    }
                                  },
                                  "id": 13672,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "POLY",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "5683:18:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                                    "typeString": "enum ISTO.FundRaiseType"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                                    "typeString": "enum ISTO.FundRaiseType"
                                  }
                                ],
                                "id": 13670,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5677:5:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint8_$",
                                  "typeString": "type(uint8)"
                                },
                                "typeName": "uint8"
                              },
                              "id": 13673,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5677:25:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5663:40:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          }
                        ],
                        "id": 13675,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "5662:42:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 13676,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "5493:221:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)"
                    }
                  },
                  "functionReturnParameters": 13661,
                  "id": 13677,
                  "nodeType": "Return",
                  "src": "5486:228:37"
                }
              ]
            },
            "documentation": "@notice Return the STO details",
            "id": 13679,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getSTODetails",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13644,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5384:2:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13661,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13646,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13679,
                  "src": "5407:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13645,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5407:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13648,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13679,
                  "src": "5416:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13647,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5416:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13650,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13679,
                  "src": "5425:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13649,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5425:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13652,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13679,
                  "src": "5434:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13651,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5434:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13654,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13679,
                  "src": "5443:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13653,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5443:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13656,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13679,
                  "src": "5452:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13655,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5452:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13658,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13679,
                  "src": "5461:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13657,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5461:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13660,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13679,
                  "src": "5470:4:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13659,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5470:4:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5406:69:37"
            },
            "scope": 13934,
            "src": "5362:359:37",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13729,
              "nodeType": "Block",
              "src": "6165:494:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13687,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13681,
                        "src": "6197:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13688,
                        "name": "_investedAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13683,
                        "src": "6211:15:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13686,
                      "name": "_preValidatePurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13777,
                      "src": "6176:20:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) view"
                      }
                    },
                    "id": 13689,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6176:51:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13690,
                  "nodeType": "ExpressionStatement",
                  "src": "6176:51:37"
                },
                {
                  "assignments": [
                    13692
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13692,
                      "name": "tokens",
                      "nodeType": "VariableDeclaration",
                      "scope": 13730,
                      "src": "6285:14:37",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 13691,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6285:7:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13696,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13694,
                        "name": "_investedAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13683,
                        "src": "6318:15:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13693,
                      "name": "_getTokenAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13862,
                      "src": "6302:15:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 13695,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6302:32:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6285:49:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13702,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 13697,
                      "name": "fundsRaised",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13343,
                      "src": "6369:11:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 13700,
                          "name": "_investedAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13683,
                          "src": "6399:15:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 13698,
                          "name": "fundsRaised",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13343,
                          "src": "6383:11:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 13699,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22577,
                        "src": "6383:15:37",
                        "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": 13701,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6383:32:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6369:46:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 13703,
                  "nodeType": "ExpressionStatement",
                  "src": "6369:46:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13709,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 13704,
                      "name": "tokensSold",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13347,
                      "src": "6425:10:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 13707,
                          "name": "tokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13692,
                          "src": "6453:6:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 13705,
                          "name": "tokensSold",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13347,
                          "src": "6438:10:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 13706,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22577,
                        "src": "6438:14:37",
                        "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": 13708,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6438:22:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6425:35:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 13710,
                  "nodeType": "ExpressionStatement",
                  "src": "6425:35:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13712,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13681,
                        "src": "6488:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13713,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13692,
                        "src": "6502:6:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13711,
                      "name": "_processPurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13841,
                      "src": "6471:16:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 13714,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6471:38:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13715,
                  "nodeType": "ExpressionStatement",
                  "src": "6471:38:37"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13717,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "6538:3:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13718,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6538:10:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13719,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13681,
                        "src": "6550:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13720,
                        "name": "_investedAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13683,
                        "src": "6564:15:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13721,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13692,
                        "src": "6581:6:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13716,
                      "name": "TokenPurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13363,
                      "src": "6524:13:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256)"
                      }
                    },
                    "id": 13722,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6524:64:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13723,
                  "nodeType": "EmitStatement",
                  "src": "6519:69:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13725,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13681,
                        "src": "6622:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13726,
                        "name": "_investedAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13683,
                        "src": "6636:15:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13724,
                      "name": "_updatePurchasingState",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13849,
                      "src": "6599:22:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) pure"
                      }
                    },
                    "id": 13727,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6599:53:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13728,
                  "nodeType": "ExpressionStatement",
                  "src": "6599:53:37"
                }
              ]
            },
            "documentation": "Processing the purchase as well as verify the required validations\n@param _beneficiary Address performing the token purchase\n@param _investedAmount Value in wei involved in the purchase",
            "id": 13730,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_processTx",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13684,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13681,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 13730,
                  "src": "6109:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13680,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6109:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13683,
                  "name": "_investedAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 13730,
                  "src": "6131:23:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13682,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6131:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6108:47:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13685,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6165:0:37"
            },
            "scope": 13934,
            "src": "6089:570:37",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13776,
              "nodeType": "Block",
              "src": "7064:383:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 13742,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 13738,
                          "name": "_beneficiary",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13732,
                          "src": "7082:12:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 13740,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7106:1:37",
                              "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": 13739,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7098:7:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 13741,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7098:10:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7082:26:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "42656e656669636961727920616464726573732073686f756c64206e6f74206265203078",
                        "id": 13743,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7110:38:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_37d29aa3ce9798db570372bdda89778b0d10baf26a0c3ed220e5b9de93630af7",
                          "typeString": "literal_string \"Beneficiary address should not be 0x\""
                        },
                        "value": "Beneficiary address should not be 0x"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_37d29aa3ce9798db570372bdda89778b0d10baf26a0c3ed220e5b9de93630af7",
                          "typeString": "literal_string \"Beneficiary address should not be 0x\""
                        }
                      ],
                      "id": 13737,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "7074:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7074:75:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13745,
                  "nodeType": "ExpressionStatement",
                  "src": "7074:75:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 13749,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 13747,
                          "name": "_investedAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13734,
                          "src": "7167:15:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 13748,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7186:1:37",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7167:20:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "416d6f756e7420696e7665737465642073686f756c64206e6f7420626520657175616c20746f2030",
                        "id": 13750,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7189:42:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d3e374dc684c190092d55a9dbb8fde90629933d5cf1e4ecfb2e8ebb24c549f0f",
                          "typeString": "literal_string \"Amount invested should not be equal to 0\""
                        },
                        "value": "Amount invested should not be equal to 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d3e374dc684c190092d55a9dbb8fde90629933d5cf1e4ecfb2e8ebb24c549f0f",
                          "typeString": "literal_string \"Amount invested should not be equal to 0\""
                        }
                      ],
                      "id": 13746,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "7159:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13751,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7159:73:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13752,
                  "nodeType": "ExpressionStatement",
                  "src": "7159:73:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 13761,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 13757,
                                  "name": "_investedAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13734,
                                  "src": "7281:15:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 13756,
                                "name": "_getTokenAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13862,
                                "src": "7265:15:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) view returns (uint256)"
                                }
                              },
                              "id": 13758,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7265:32:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 13754,
                              "name": "tokensSold",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13347,
                              "src": "7250:10:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 13755,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22577,
                            "src": "7250:14:37",
                            "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": 13759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7250:48:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 13760,
                          "name": "cap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13349,
                          "src": "7302:3:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7250:55:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e766573746d656e74206d6f7265207468616e20636170206973206e6f7420616c6c6f776564",
                        "id": 13762,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7307:41:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fd271590b935413ca5ecf4291f46eb0da0e9b29bbe41c209ad0f420f28bc9360",
                          "typeString": "literal_string \"Investment more than cap is not allowed\""
                        },
                        "value": "Investment more than cap is not allowed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fd271590b935413ca5ecf4291f46eb0da0e9b29bbe41c209ad0f420f28bc9360",
                          "typeString": "literal_string \"Investment more than cap is not allowed\""
                        }
                      ],
                      "id": 13753,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "7242:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13763,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7242:107:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13764,
                  "nodeType": "ExpressionStatement",
                  "src": "7242:107:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 13772,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13768,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13766,
                            "name": "now",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23133,
                            "src": "7367:3:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 13767,
                            "name": "startTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14510,
                            "src": "7374:9:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7367:16:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13771,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13769,
                            "name": "now",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23133,
                            "src": "7387:3:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 13770,
                            "name": "endTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14512,
                            "src": "7394:7:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7387:14:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "7367:34:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f66666572696e6720697320636c6f7365642f4e6f74207965742073746172746564",
                        "id": 13773,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7403:36:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_26e864774e7aae0e4869d949fb332a35a8abffc3f75ac765203236aafc0bedd5",
                          "typeString": "literal_string \"Offering is closed/Not yet started\""
                        },
                        "value": "Offering is closed/Not yet started"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_26e864774e7aae0e4869d949fb332a35a8abffc3f75ac765203236aafc0bedd5",
                          "typeString": "literal_string \"Offering is closed/Not yet started\""
                        }
                      ],
                      "id": 13765,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "7359:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13774,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7359:81:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13775,
                  "nodeType": "ExpressionStatement",
                  "src": "7359:81:37"
                }
              ]
            },
            "documentation": "@notice Validation of an incoming purchase.\nUse require statements to revert state when conditions are not met. Use super to concatenate validations.\n@param _beneficiary Address performing the token purchase\n@param _investedAmount Value in wei involved in the purchase",
            "id": 13777,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_preValidatePurchase",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13735,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13732,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 13777,
                  "src": "7003:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13731,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7003:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13734,
                  "name": "_investedAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 13777,
                  "src": "7025:23:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13733,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7025:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7002:47:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13736,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7064:0:37"
            },
            "scope": 13934,
            "src": "6973:474:37",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13784,
              "nodeType": "Block",
              "src": "7716:34:37",
              "statements": []
            },
            "documentation": "@notice Validation of an executed purchase.\nObserve state and use revert statements to undo rollback when valid conditions are not met.",
            "id": 13785,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_postValidatePurchase",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13782,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13779,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13785,
                  "src": "7647:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13778,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7647:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13781,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13785,
                  "src": "7673:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13780,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7673:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7646:55:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13783,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7716:0:37"
            },
            "scope": 13934,
            "src": "7616:134:37",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13803,
              "nodeType": "Block",
              "src": "8107:110:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 13797,
                            "name": "_beneficiary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13787,
                            "src": "8151:12:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 13798,
                            "name": "_tokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13789,
                            "src": "8165:12:37",
                            "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": 13794,
                                "name": "securityToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9561,
                                "src": "8131:13:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 13793,
                              "name": "IST20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10048,
                              "src": "8125:5:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IST20_$10048_$",
                                "typeString": "type(contract IST20)"
                              }
                            },
                            "id": 13795,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8125:20:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IST20_$10048",
                              "typeString": "contract IST20"
                            }
                          },
                          "id": 13796,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mint",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10030,
                          "src": "8125:25:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 13799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8125:53:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4572726f7220696e206d696e74696e672074686520746f6b656e73",
                        "id": 13800,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8180:29:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_44a874e95e71a77b89ab92fa503b62269ceb7d2fcf379a22f3d28955292f2afc",
                          "typeString": "literal_string \"Error in minting the tokens\""
                        },
                        "value": "Error in minting the tokens"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_44a874e95e71a77b89ab92fa503b62269ceb7d2fcf379a22f3d28955292f2afc",
                          "typeString": "literal_string \"Error in minting the tokens\""
                        }
                      ],
                      "id": 13792,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "8117:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13801,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8117:93:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13802,
                  "nodeType": "ExpressionStatement",
                  "src": "8117:93:37"
                }
              ]
            },
            "documentation": "@notice Source of tokens.\nOverride this method to modify the way in which the crowdsale ultimately gets and sends its tokens.\n@param _beneficiary Address performing the token purchase\n@param _tokenAmount Number of tokens to be emitted",
            "id": 13804,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_deliverTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13787,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 13804,
                  "src": "8054:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13786,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8054:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13789,
                  "name": "_tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 13804,
                  "src": "8076:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13788,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8076:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8053:44:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13791,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8107:0:37"
            },
            "scope": 13934,
            "src": "8030:187:37",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13840,
              "nodeType": "Block",
              "src": "8554:238:37",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13815,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 13811,
                        "name": "investors",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13353,
                        "src": "8568:9:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 13813,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 13812,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13806,
                        "src": "8578:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "8568:23:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 13814,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8595:1:37",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8568:28:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13823,
                  "nodeType": "IfStatement",
                  "src": "8564:92:37",
                  "trueBody": {
                    "id": 13822,
                    "nodeType": "Block",
                    "src": "8598:58:37",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 13820,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 13816,
                            "name": "investorCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13345,
                            "src": "8612:13:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 13819,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 13817,
                              "name": "investorCount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13345,
                              "src": "8628:13:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 13818,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8644:1:37",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "8628:17:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8612:33:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 13821,
                        "nodeType": "ExpressionStatement",
                        "src": "8612:33:37"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13833,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 13824,
                        "name": "investors",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13353,
                        "src": "8665:9:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 13826,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 13825,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13806,
                        "src": "8675:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8665:23:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 13831,
                          "name": "_tokenAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13808,
                          "src": "8719:12:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 13827,
                            "name": "investors",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13353,
                            "src": "8691:9:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 13829,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 13828,
                            "name": "_beneficiary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13806,
                            "src": "8701:12:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8691:23:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 13830,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22577,
                        "src": "8691:27:37",
                        "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": 13832,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8691:41:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8665:67:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 13834,
                  "nodeType": "ExpressionStatement",
                  "src": "8665:67:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13836,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13806,
                        "src": "8758:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13837,
                        "name": "_tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13808,
                        "src": "8772:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13835,
                      "name": "_deliverTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13804,
                      "src": "8743:14:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 13838,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8743:42:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13839,
                  "nodeType": "ExpressionStatement",
                  "src": "8743:42:37"
                }
              ]
            },
            "documentation": "@notice Executed when a purchase has been validated and is ready to be executed. Not necessarily emits/sends tokens.\n@param _beneficiary Address receiving the tokens\n@param _tokenAmount Number of tokens to be purchased",
            "id": 13841,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_processPurchase",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13809,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13806,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 13841,
                  "src": "8501:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13805,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8501:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13808,
                  "name": "_tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 13841,
                  "src": "8523:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13807,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8523:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8500:44:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13810,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8554:0:37"
            },
            "scope": 13934,
            "src": "8475:317:37",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13848,
              "nodeType": "Block",
              "src": "9046:34:37",
              "statements": []
            },
            "documentation": "@notice Override for extensions that require an internal state to check for validity\n(current user contributions, etc.)",
            "id": 13849,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_updatePurchasingState",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13846,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13843,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13849,
                  "src": "8977:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13842,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8977:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13845,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13849,
                  "src": "9003:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13844,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9003:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8976:55:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13847,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9046:0:37"
            },
            "scope": 13934,
            "src": "8945:135:37",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13861,
              "nodeType": "Block",
              "src": "9421:49:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13858,
                        "name": "rate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13341,
                        "src": "9458:4:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13856,
                        "name": "_investedAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13851,
                        "src": "9438:15:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 13857,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22519,
                      "src": "9438:19:37",
                      "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": 13859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9438:25:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 13855,
                  "id": 13860,
                  "nodeType": "Return",
                  "src": "9431:32:37"
                }
              ]
            },
            "documentation": "@notice Override to extend the way in which ether is converted to tokens.\n@param _investedAmount Value in wei to be converted into tokens\n@return Number of tokens that can be purchased with the specified _investedAmount",
            "id": 13862,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_getTokenAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13852,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13851,
                  "name": "_investedAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 13862,
                  "src": "9364:23:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13850,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9364:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9363:25:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13855,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13854,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13862,
                  "src": "9412:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13853,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9412:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9411:9:37"
            },
            "scope": 13934,
            "src": "9339:131:37",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13872,
              "nodeType": "Block",
              "src": "9592:43:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13868,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "9618:3:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13869,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9618:9:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13865,
                        "name": "wallet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13339,
                        "src": "9602:6:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 13867,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "9602:15:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 13870,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9602:26:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13871,
                  "nodeType": "ExpressionStatement",
                  "src": "9602:26:37"
                }
              ]
            },
            "documentation": "@notice Determines how ETH is stored/forwarded on purchases.",
            "id": 13873,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_forwardFunds",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13863,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9580:2:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13864,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9592:0:37"
            },
            "scope": 13934,
            "src": "9558:77:37",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13914,
              "nodeType": "Block",
              "src": "9855:313:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 13885,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 13881,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13879,
                            "name": "_fundRaiseType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13875,
                            "src": "9873:14:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 13880,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9891:1:37",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "9873:19:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 13884,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13882,
                            "name": "_fundRaiseType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13875,
                            "src": "9896:14:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 13883,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9914:1:37",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "9896:19:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "9873:42:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f7420612076616c69642066756e6472616973652074797065",
                        "id": 13886,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9917:28:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9c7db3a3deadf3bdfecd1f7258aa1b0b6a68ec11090909e991c0caee9f51eab1",
                          "typeString": "literal_string \"Not a valid fundraise type\""
                        },
                        "value": "Not a valid fundraise type"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9c7db3a3deadf3bdfecd1f7258aa1b0b6a68ec11090909e991c0caee9f51eab1",
                          "typeString": "literal_string \"Not a valid fundraise type\""
                        }
                      ],
                      "id": 13878,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "9865:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13887,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9865:81:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13888,
                  "nodeType": "ExpressionStatement",
                  "src": "9865:81:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13893,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 13889,
                        "name": "fundRaiseType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14508,
                        "src": "9956:13:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint8_$_t_bool_$",
                          "typeString": "mapping(uint8 => bool)"
                        }
                      },
                      "id": 13891,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 13890,
                        "name": "_fundRaiseType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13875,
                        "src": "9970:14:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9956:29:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 13892,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9988:4:37",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "9956:36:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13894,
                  "nodeType": "ExpressionStatement",
                  "src": "9956:36:37"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 13900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 13895,
                      "name": "_fundRaiseType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13875,
                      "src": "10006:14:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 13897,
                            "name": "FundRaiseType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14504,
                            "src": "10030:13:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_FundRaiseType_$14504_$",
                              "typeString": "type(enum ISTO.FundRaiseType)"
                            }
                          },
                          "id": 13898,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "POLY",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "10030:18:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                            "typeString": "enum ISTO.FundRaiseType"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                            "typeString": "enum ISTO.FundRaiseType"
                          }
                        ],
                        "id": 13896,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "10024:5:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint8_$",
                          "typeString": "type(uint8)"
                        },
                        "typeName": "uint8"
                      },
                      "id": 13899,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10024:25:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "10006:43:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13913,
                  "nodeType": "IfStatement",
                  "src": "10002:160:37",
                  "trueBody": {
                    "id": 13912,
                    "nodeType": "Block",
                    "src": "10051:111:37",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 13908,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 13903,
                                    "name": "polyToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9566,
                                    "src": "10081:9:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ERC20_$22837",
                                      "typeString": "contract ERC20"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_ERC20_$22837",
                                      "typeString": "contract ERC20"
                                    }
                                  ],
                                  "id": 13902,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "10073:7:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 13904,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10073:18:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 13906,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10103:1:37",
                                    "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": 13905,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "10095:7:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 13907,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10095:10:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "10073:32:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "41646472657373206f662074686520706f6c79546f6b656e2073686f756c64206e6f74206265203078",
                              "id": 13909,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10107:43:37",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_26e6b5cce2ca50d46843d45e9e0dfa581c760c537858fbfb1ee776d8fa9213e1",
                                "typeString": "literal_string \"Address of the polyToken should not be 0x\""
                              },
                              "value": "Address of the polyToken should not be 0x"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_26e6b5cce2ca50d46843d45e9e0dfa581c760c537858fbfb1ee776d8fa9213e1",
                                "typeString": "literal_string \"Address of the polyToken should not be 0x\""
                              }
                            ],
                            "id": 13901,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              23134,
                              23135
                            ],
                            "referencedDeclaration": 23135,
                            "src": "10065:7:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 13910,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10065:86:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13911,
                        "nodeType": "ExpressionStatement",
                        "src": "10065:86:37"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Internal function used to check the type of fund raise currency\n@param _fundRaiseType Type of currency used to collect the funds",
            "id": 13915,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_check",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13876,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13875,
                  "name": "_fundRaiseType",
                  "nodeType": "VariableDeclaration",
                  "scope": 13915,
                  "src": "9824:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 13874,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "9824:5:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9823:22:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13877,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9855:0:37"
            },
            "scope": 13934,
            "src": "9808:360:37",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13932,
              "nodeType": "Block",
              "src": "10525:72:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13927,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13917,
                        "src": "10558:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13928,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13919,
                        "src": "10572:3:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13929,
                        "name": "_fundsAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13921,
                        "src": "10577:12:37",
                        "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": 13924,
                        "name": "polyToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9566,
                        "src": "10535:9:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$22837",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 13926,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22819,
                      "src": "10535:22:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,address,uint256) external returns (bool)"
                      }
                    },
                    "id": 13930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10535:55:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13931,
                  "nodeType": "ExpressionStatement",
                  "src": "10535:55:37"
                }
              ]
            },
            "documentation": "@notice Internal function used to forward the POLY raised to beneficiary address\n@param _beneficiary Address of the funds reciever\n@param _to Address who wants to ST-20 tokens\n@param _fundsAmount Amount invested by _to",
            "id": 13933,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_forwardPoly",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13922,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13917,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 13933,
                  "src": "10459:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13916,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10459:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13919,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 13933,
                  "src": "10481:11:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13918,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10481:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13921,
                  "name": "_fundsAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 13933,
                  "src": "10494:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13920,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10494:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10458:57:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13923,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10525:0:37"
            },
            "scope": 13934,
            "src": "10437:160:37",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 13935,
        "src": "266:10334:37"
      }
    ],
    "src": "0:10601:37"
  },
  "legacyAST": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/STO/CappedSTO.sol",
    "exportedSymbols": {
      "CappedSTO": [
        13934
      ]
    },
    "id": 13935,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 13326,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:37"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/STO/ISTO.sol",
        "file": "./ISTO.sol",
        "id": 13327,
        "nodeType": "ImportDirective",
        "scope": 13935,
        "sourceUnit": 14624,
        "src": "26:20:37",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/IST20.sol",
        "file": "../../interfaces/IST20.sol",
        "id": 13328,
        "nodeType": "ImportDirective",
        "scope": 13935,
        "sourceUnit": 10049,
        "src": "47:36:37",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/ReentrancyGuard.sol",
        "file": "openzeppelin-solidity/contracts/ReentrancyGuard.sol",
        "id": 13329,
        "nodeType": "ImportDirective",
        "scope": 13935,
        "sourceUnit": 22414,
        "src": "84:61:37",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 13330,
        "nodeType": "ImportDirective",
        "scope": 13935,
        "sourceUnit": 22579,
        "src": "146:59:37",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 13331,
              "name": "ISTO",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14623,
              "src": "288:4:37",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ISTO_$14623",
                "typeString": "contract ISTO"
              }
            },
            "id": 13332,
            "nodeType": "InheritanceSpecifier",
            "src": "288:4:37"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 13333,
              "name": "ReentrancyGuard",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22413,
              "src": "294:15:37",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ReentrancyGuard_$22413",
                "typeString": "contract ReentrancyGuard"
              }
            },
            "id": 13334,
            "nodeType": "InheritanceSpecifier",
            "src": "294:15:37"
          }
        ],
        "contractDependencies": [
          471,
          9717,
          14623,
          22413
        ],
        "contractKind": "contract",
        "documentation": "@title STO module for standard capped crowdsale",
        "fullyImplemented": true,
        "id": 13934,
        "linearizedBaseContracts": [
          13934,
          22413,
          14623,
          471,
          9717
        ],
        "name": "CappedSTO",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 13337,
            "libraryName": {
              "contractScope": null,
              "id": 13335,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22578,
              "src": "322:8:37",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$22578",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "316:27:37",
            "typeName": {
              "id": 13336,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "335:7:37",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": false,
            "id": 13339,
            "name": "wallet",
            "nodeType": "VariableDeclaration",
            "scope": 13934,
            "src": "415:21:37",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 13338,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "415:7:37",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 13341,
            "name": "rate",
            "nodeType": "VariableDeclaration",
            "scope": 13934,
            "src": "512:19:37",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 13340,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "512:7:37",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 13343,
            "name": "fundsRaised",
            "nodeType": "VariableDeclaration",
            "scope": 13934,
            "src": "568:26:37",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 13342,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "568:7:37",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 13345,
            "name": "investorCount",
            "nodeType": "VariableDeclaration",
            "scope": 13934,
            "src": "601:28:37",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 13344,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "601:7:37",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 13347,
            "name": "tokensSold",
            "nodeType": "VariableDeclaration",
            "scope": 13934,
            "src": "665:25:37",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 13346,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "665:7:37",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 13349,
            "name": "cap",
            "nodeType": "VariableDeclaration",
            "scope": 13934,
            "src": "765:18:37",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 13348,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "765:7:37",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 13353,
            "name": "investors",
            "nodeType": "VariableDeclaration",
            "scope": 13934,
            "src": "790:45:37",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 13352,
              "keyType": {
                "id": 13350,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "799:7:37",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "790:28:37",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 13351,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "810:7:37",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": "Event for token purchase logging\n@param purchaser who paid for the tokens\n@param beneficiary who got the tokens\n@param value weis paid for purchase\n@param amount amount of tokens purchased",
            "id": 13363,
            "name": "TokenPurchase",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 13362,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13355,
                  "indexed": true,
                  "name": "purchaser",
                  "nodeType": "VariableDeclaration",
                  "scope": 13363,
                  "src": "1096:25:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13354,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1096:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13357,
                  "indexed": true,
                  "name": "beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 13363,
                  "src": "1123:27:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13356,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1123:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13359,
                  "indexed": false,
                  "name": "value",
                  "nodeType": "VariableDeclaration",
                  "scope": 13363,
                  "src": "1152:13:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13358,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1152:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13361,
                  "indexed": false,
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 13363,
                  "src": "1167:14:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13360,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1167:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1095:87:37"
            },
            "src": "1076:107:37"
          },
          {
            "body": {
              "id": 13374,
              "nodeType": "Block",
              "src": "1301:7:37",
              "statements": []
            },
            "documentation": null,
            "id": 13375,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 13370,
                    "name": "_securityToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13365,
                    "src": "1267:14:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 13371,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13367,
                    "src": "1283:12:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 13372,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13369,
                  "name": "IModule",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9717,
                  "src": "1259:7:37",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModule_$9717_$",
                    "typeString": "type(contract IModule)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1259:37:37"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13368,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13365,
                  "name": "_securityToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 13375,
                  "src": "1202:22:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13364,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1202:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13367,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 13375,
                  "src": "1226:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13366,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1226:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1201:46:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13373,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1301:0:37"
            },
            "scope": 13934,
            "src": "1189:119:37",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13383,
              "nodeType": "Block",
              "src": "1451:38:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13379,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "1471:3:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13380,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "1471:10:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 13378,
                      "name": "buyTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13513,
                      "src": "1461:9:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 13381,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1461:21:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13382,
                  "nodeType": "ExpressionStatement",
                  "src": "1461:21:37"
                }
              ]
            },
            "documentation": "@notice fallback function ***DO NOT OVERRIDE***",
            "id": 13384,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13376,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1431:2:37"
            },
            "payable": true,
            "returnParameters": {
              "id": 13377,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1451:0:37"
            },
            "scope": 13934,
            "src": "1422:67:37",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "external"
          },
          {
            "body": {
              "id": 13459,
              "nodeType": "Block",
              "src": "2196:477:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 13404,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 13402,
                          "name": "_rate",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13392,
                          "src": "2214:5:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 13403,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2222:1:37",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2214:9:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "52617465206f6620746f6b656e2073686f756c642062652067726561746572207468616e2030",
                        "id": 13405,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2225:40:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a6e4993252089c9e95eb563fe8f3f44dc0998d29d7fa526da197d6021bc55794",
                          "typeString": "literal_string \"Rate of token should be greater than 0\""
                        },
                        "value": "Rate of token should be greater than 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a6e4993252089c9e95eb563fe8f3f44dc0998d29d7fa526da197d6021bc55794",
                          "typeString": "literal_string \"Rate of token should be greater than 0\""
                        }
                      ],
                      "id": 13401,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "2206:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13406,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2206:60:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13407,
                  "nodeType": "ExpressionStatement",
                  "src": "2206:60:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 13413,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 13409,
                          "name": "_fundsReceiver",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13396,
                          "src": "2284:14:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 13411,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2310:1:37",
                              "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": 13410,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2302:7:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 13412,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2302:10:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "2284:28:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "5a65726f2061646472657373206973206e6f74207065726d6974746564",
                        "id": 13414,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2314:31:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_67dad9876e519cb1f8d1672bfe1a79aa4d9684b769c25ea228ccf28cac49b1d2",
                          "typeString": "literal_string \"Zero address is not permitted\""
                        },
                        "value": "Zero address is not permitted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_67dad9876e519cb1f8d1672bfe1a79aa4d9684b769c25ea228ccf28cac49b1d2",
                          "typeString": "literal_string \"Zero address is not permitted\""
                        }
                      ],
                      "id": 13408,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "2276:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13415,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2276:70:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13416,
                  "nodeType": "ExpressionStatement",
                  "src": "2276:70:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 13424,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13420,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13418,
                            "name": "_startTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13386,
                            "src": "2364:10:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 13419,
                            "name": "now",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23133,
                            "src": "2378:3:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2364:17:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13423,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13421,
                            "name": "_endTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13388,
                            "src": "2385:8:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 13422,
                            "name": "_startTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13386,
                            "src": "2396:10:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "2385:21:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "2364:42:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4461746520706172616d657465727320617265206e6f742076616c6964",
                        "id": 13425,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2408:31:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_dc6b54cf3100cff8881f57272b33f1736c6835f2316d1c90f3d43b5ec543b1cf",
                          "typeString": "literal_string \"Date parameters are not valid\""
                        },
                        "value": "Date parameters are not valid"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_dc6b54cf3100cff8881f57272b33f1736c6835f2316d1c90f3d43b5ec543b1cf",
                          "typeString": "literal_string \"Date parameters are not valid\""
                        }
                      ],
                      "id": 13417,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "2356:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13426,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2356:84:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13427,
                  "nodeType": "ExpressionStatement",
                  "src": "2356:84:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 13431,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 13429,
                          "name": "_cap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13390,
                          "src": "2458:4:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 13430,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2465:1:37",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "2458:8:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4361702073686f756c642062652067726561746572207468616e2030",
                        "id": 13432,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2468:30:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fbc7a3b223452e462982b48c1c47511d169f9dc1256265a9080c68e83151b4a8",
                          "typeString": "literal_string \"Cap should be greater than 0\""
                        },
                        "value": "Cap should be greater than 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fbc7a3b223452e462982b48c1c47511d169f9dc1256265a9080c68e83151b4a8",
                          "typeString": "literal_string \"Cap should be greater than 0\""
                        }
                      ],
                      "id": 13428,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "2450:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13433,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2450:49:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13434,
                  "nodeType": "ExpressionStatement",
                  "src": "2450:49:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13437,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 13435,
                      "name": "startTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14510,
                      "src": "2509:9:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 13436,
                      "name": "_startTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13386,
                      "src": "2521:10:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2509:22:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 13438,
                  "nodeType": "ExpressionStatement",
                  "src": "2509:22:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13441,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 13439,
                      "name": "endTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14512,
                      "src": "2541:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 13440,
                      "name": "_endTime",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13388,
                      "src": "2551:8:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2541:18:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 13442,
                  "nodeType": "ExpressionStatement",
                  "src": "2541:18:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13445,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 13443,
                      "name": "cap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13349,
                      "src": "2569:3:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 13444,
                      "name": "_cap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13390,
                      "src": "2575:4:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2569:10:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 13446,
                  "nodeType": "ExpressionStatement",
                  "src": "2569:10:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13449,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 13447,
                      "name": "rate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13341,
                      "src": "2589:4:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 13448,
                      "name": "_rate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13392,
                      "src": "2596:5:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2589:12:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 13450,
                  "nodeType": "ExpressionStatement",
                  "src": "2589:12:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13453,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 13451,
                      "name": "wallet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13339,
                      "src": "2611:6:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 13452,
                      "name": "_fundsReceiver",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13396,
                      "src": "2620:14:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2611:23:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 13454,
                  "nodeType": "ExpressionStatement",
                  "src": "2611:23:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13456,
                        "name": "_fundRaiseType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13394,
                        "src": "2651:14:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      ],
                      "id": 13455,
                      "name": "_check",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13915,
                      "src": "2644:6:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint8_$returns$__$",
                        "typeString": "function (uint8)"
                      }
                    },
                    "id": 13457,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2644:22:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13458,
                  "nodeType": "ExpressionStatement",
                  "src": "2644:22:37"
                }
              ]
            },
            "documentation": "@notice Function used to intialize the contract variables\n@param _startTime Unix timestamp at which offering get started\n@param _endTime Unix timestamp at which offering get ended\n@param _cap Maximum No. of tokens for sale\n@param _rate Token units a buyer gets per wei / base unit of POLY\n@param _fundRaiseType Type of currency used to collect the funds\n@param _fundsReceiver Ethereum account address to hold the funds",
            "id": 13460,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 13399,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13398,
                  "name": "onlyFactory",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9665,
                  "src": "2180:11:37",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2180:11:37"
              }
            ],
            "name": "configure",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13397,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13386,
                  "name": "_startTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 13460,
                  "src": "2007:18:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13385,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2007:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13388,
                  "name": "_endTime",
                  "nodeType": "VariableDeclaration",
                  "scope": 13460,
                  "src": "2035:16:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13387,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2035:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13390,
                  "name": "_cap",
                  "nodeType": "VariableDeclaration",
                  "scope": 13460,
                  "src": "2061:12:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13389,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2061:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13392,
                  "name": "_rate",
                  "nodeType": "VariableDeclaration",
                  "scope": 13460,
                  "src": "2083:13:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13391,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2083:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13394,
                  "name": "_fundRaiseType",
                  "nodeType": "VariableDeclaration",
                  "scope": 13460,
                  "src": "2106:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 13393,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "2106:5:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13396,
                  "name": "_fundsReceiver",
                  "nodeType": "VariableDeclaration",
                  "scope": 13460,
                  "src": "2136:22:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13395,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2136:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1997:167:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13400,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2196:0:37"
            },
            "scope": 13934,
            "src": "1979:694:37",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13471,
              "nodeType": "Block",
              "src": "2824:101:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "hexValue": "636f6e6669677572652875696e743235362c75696e743235362c75696e743235362c75696e743235362c75696e74382c6164647265737329",
                            "id": 13467,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2858:58:37",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_9f5a851fde5fbf790a1d035468fbe1e28db22db9c4ca16c8e14e109d975600f2",
                              "typeString": "literal_string \"configure(uint256,uint256,uint256,uint256,uint8,address)\""
                            },
                            "value": "configure(uint256,uint256,uint256,uint256,uint8,address)"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_9f5a851fde5fbf790a1d035468fbe1e28db22db9c4ca16c8e14e109d975600f2",
                              "typeString": "literal_string \"configure(uint256,uint256,uint256,uint256,uint8,address)\""
                            }
                          ],
                          "id": 13466,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23125,
                          "src": "2848:9:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_sha3_pure$__$returns$_t_bytes32_$",
                            "typeString": "function () pure returns (bytes32)"
                          }
                        },
                        "id": 13468,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2848:69:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 13465,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "2841:6:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes4_$",
                        "typeString": "type(bytes4)"
                      },
                      "typeName": "bytes4"
                    },
                    "id": 13469,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2841:77:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "functionReturnParameters": 13464,
                  "id": 13470,
                  "nodeType": "Return",
                  "src": "2834:84:37"
                }
              ]
            },
            "documentation": "@notice This function returns the signature of configure function",
            "id": 13472,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInitFunction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13461,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2792:2:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13463,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13472,
                  "src": "2816:6:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 13462,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "2816:6:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2815:8:37"
            },
            "scope": 13934,
            "src": "2768:157:37",
            "stateMutability": "pure",
            "superFunction": 9594,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13512,
              "nodeType": "Block",
              "src": "3146:298:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13481,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "3164:7:37",
                        "subExpression": {
                          "argumentTypes": null,
                          "id": 13480,
                          "name": "paused",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 423,
                          "src": "3165:6:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 13479,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "3156:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 13482,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3156:16:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13483,
                  "nodeType": "ExpressionStatement",
                  "src": "3156:16:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 13485,
                          "name": "fundRaiseType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14508,
                          "src": "3190:13:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_bool_$",
                            "typeString": "mapping(uint8 => bool)"
                          }
                        },
                        "id": 13490,
                        "indexExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13487,
                                "name": "FundRaiseType",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14504,
                                "src": "3210:13:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FundRaiseType_$14504_$",
                                  "typeString": "type(enum ISTO.FundRaiseType)"
                                }
                              },
                              "id": 13488,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "ETH",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "3210:17:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                                "typeString": "enum ISTO.FundRaiseType"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                                "typeString": "enum ISTO.FundRaiseType"
                              }
                            ],
                            "id": 13486,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3204:5:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint8_$",
                              "typeString": "type(uint8)"
                            },
                            "typeName": "uint8"
                          },
                          "id": 13489,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3204:24:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3190:39:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4554482073686f756c6420626520746865206d6f6465206f6620696e766573746d656e74",
                        "id": 13491,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3231:38:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_29da700ebd0827e7994b2f4e05374cde7ace9ec213d716002d32edb1a59058f9",
                          "typeString": "literal_string \"ETH should be the mode of investment\""
                        },
                        "value": "ETH should be the mode of investment"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_29da700ebd0827e7994b2f4e05374cde7ace9ec213d716002d32edb1a59058f9",
                          "typeString": "literal_string \"ETH should be the mode of investment\""
                        }
                      ],
                      "id": 13484,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "3182:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13492,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3182:88:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13493,
                  "nodeType": "ExpressionStatement",
                  "src": "3182:88:37"
                },
                {
                  "assignments": [
                    13495
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13495,
                      "name": "weiAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 13513,
                      "src": "3281:17:37",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 13494,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3281:7:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13498,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 13496,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 23131,
                      "src": "3301:3:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 13497,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "value",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "3301:9:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3281:29:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13500,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13474,
                        "src": "3331:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13501,
                        "name": "weiAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13495,
                        "src": "3345:9:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13499,
                      "name": "_processTx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13730,
                      "src": "3320:10:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 13502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3320:35:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13503,
                  "nodeType": "ExpressionStatement",
                  "src": "3320:35:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 13504,
                      "name": "_forwardFunds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13873,
                      "src": "3366:13:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 13505,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3366:15:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13506,
                  "nodeType": "ExpressionStatement",
                  "src": "3366:15:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13508,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13474,
                        "src": "3413:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13509,
                        "name": "weiAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13495,
                        "src": "3427:9:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13507,
                      "name": "_postValidatePurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13785,
                      "src": "3391:21:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) pure"
                      }
                    },
                    "id": 13510,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3391:46:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13511,
                  "nodeType": "ExpressionStatement",
                  "src": "3391:46:37"
                }
              ]
            },
            "documentation": "@notice low level token purchase ***DO NOT OVERRIDE***\n@param _beneficiary Address performing the token purchase",
            "id": 13513,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 13477,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13476,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22412,
                  "src": "3133:12:37",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3133:12:37"
              }
            ],
            "name": "buyTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13475,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13474,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 13513,
                  "src": "3096:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13473,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3096:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3095:22:37"
            },
            "payable": true,
            "returnParameters": {
              "id": 13478,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3146:0:37"
            },
            "scope": 13934,
            "src": "3077:367:37",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13563,
              "nodeType": "Block",
              "src": "3630:381:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13522,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "3648:7:37",
                        "subExpression": {
                          "argumentTypes": null,
                          "id": 13521,
                          "name": "paused",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 423,
                          "src": "3649:6:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 13520,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "3640:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 13523,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3640:16:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13524,
                  "nodeType": "ExpressionStatement",
                  "src": "3640:16:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 13526,
                          "name": "fundRaiseType",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14508,
                          "src": "3674:13:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_uint8_$_t_bool_$",
                            "typeString": "mapping(uint8 => bool)"
                          }
                        },
                        "id": 13531,
                        "indexExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 13528,
                                "name": "FundRaiseType",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 14504,
                                "src": "3694:13:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_enum$_FundRaiseType_$14504_$",
                                  "typeString": "type(enum ISTO.FundRaiseType)"
                                }
                              },
                              "id": 13529,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "memberName": "POLY",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "3694:18:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                                "typeString": "enum ISTO.FundRaiseType"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                                "typeString": "enum ISTO.FundRaiseType"
                              }
                            ],
                            "id": 13527,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3688:5:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint8_$",
                              "typeString": "type(uint8)"
                            },
                            "typeName": "uint8"
                          },
                          "id": 13530,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3688:25:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "3674:40:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "504f4c592073686f756c6420626520746865206d6f6465206f6620696e766573746d656e74",
                        "id": 13532,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3716:39:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a9bd9f181f09fc8996f4602e1bd7948bd9eccec1ce8a4506a628238a833a6e5b",
                          "typeString": "literal_string \"POLY should be the mode of investment\""
                        },
                        "value": "POLY should be the mode of investment"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a9bd9f181f09fc8996f4602e1bd7948bd9eccec1ce8a4506a628238a833a6e5b",
                          "typeString": "literal_string \"POLY should be the mode of investment\""
                        }
                      ],
                      "id": 13525,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "3666:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13533,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3666:90:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13534,
                  "nodeType": "ExpressionStatement",
                  "src": "3666:90:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 13537,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "3791:3:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 13538,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3791:10:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 13539,
                            "name": "_investedPOLY",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13515,
                            "src": "3803:13:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 13536,
                          "name": "verifyInvestment",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 14534,
                          "src": "3774:16:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) view returns (bool)"
                          }
                        },
                        "id": 13540,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3774:43:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f742076616c696420496e766573746d656e74",
                        "id": 13541,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3819:22:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5c7e08e5001866f39552d373828a844ca94198bc0b16ade6836ffc7de2306f9",
                          "typeString": "literal_string \"Not valid Investment\""
                        },
                        "value": "Not valid Investment"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5c7e08e5001866f39552d373828a844ca94198bc0b16ade6836ffc7de2306f9",
                          "typeString": "literal_string \"Not valid Investment\""
                        }
                      ],
                      "id": 13535,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "3766:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13542,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3766:76:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13543,
                  "nodeType": "ExpressionStatement",
                  "src": "3766:76:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13545,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "3863:3:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13546,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3863:10:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13547,
                        "name": "_investedPOLY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13515,
                        "src": "3875:13:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13544,
                      "name": "_processTx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13730,
                      "src": "3852:10:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 13548,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3852:37:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13549,
                  "nodeType": "ExpressionStatement",
                  "src": "3852:37:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13551,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "3912:3:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13552,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3912:10:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13553,
                        "name": "wallet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13339,
                        "src": "3924:6:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13554,
                        "name": "_investedPOLY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13515,
                        "src": "3932:13:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13550,
                      "name": "_forwardPoly",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13933,
                      "src": "3899:12:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 13555,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3899:47:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13556,
                  "nodeType": "ExpressionStatement",
                  "src": "3899:47:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13558,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "3978:3:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13559,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "3978:10:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13560,
                        "name": "_investedPOLY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13515,
                        "src": "3990:13:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13557,
                      "name": "_postValidatePurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13785,
                      "src": "3956:21:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) pure"
                      }
                    },
                    "id": 13561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3956:48:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13562,
                  "nodeType": "ExpressionStatement",
                  "src": "3956:48:37"
                }
              ]
            },
            "documentation": "@notice low level token purchase\n@param _investedPOLY Amount of POLY invested",
            "id": 13564,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 13518,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 13517,
                  "name": "nonReentrant",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 22412,
                  "src": "3618:12:37",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3618:12:37"
              }
            ],
            "name": "buyTokensWithPoly",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13515,
                  "name": "_investedPOLY",
                  "nodeType": "VariableDeclaration",
                  "scope": 13564,
                  "src": "3588:21:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13514,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3588:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3587:23:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13519,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3630:0:37"
            },
            "scope": 13934,
            "src": "3561:450:37",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13573,
              "nodeType": "Block",
              "src": "4183:41:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13571,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 13569,
                      "name": "tokensSold",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13347,
                      "src": "4200:10:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 13570,
                      "name": "cap",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13349,
                      "src": "4214:3:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4200:17:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 13568,
                  "id": 13572,
                  "nodeType": "Return",
                  "src": "4193:24:37"
                }
              ]
            },
            "documentation": "@notice Checks whether the cap has been reached.\n@return bool Whether the cap was reached",
            "id": 13574,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "capReached",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13565,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4153:2:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13568,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13567,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13574,
                  "src": "4177:4:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13566,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4177:4:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4176:6:37"
            },
            "scope": 13934,
            "src": "4134:90:37",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13590,
              "nodeType": "Block",
              "src": "4346:127:37",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 13579,
                      "name": "fundRaiseType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14508,
                      "src": "4360:13:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint8_$_t_bool_$",
                        "typeString": "mapping(uint8 => bool)"
                      }
                    },
                    "id": 13584,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 13581,
                            "name": "FundRaiseType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14504,
                            "src": "4380:13:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_FundRaiseType_$14504_$",
                              "typeString": "type(enum ISTO.FundRaiseType)"
                            }
                          },
                          "id": 13582,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "ETH",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "4380:17:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                            "typeString": "enum ISTO.FundRaiseType"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                            "typeString": "enum ISTO.FundRaiseType"
                          }
                        ],
                        "id": 13580,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4374:5:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint8_$",
                          "typeString": "type(uint8)"
                        },
                        "typeName": "uint8"
                      },
                      "id": 13583,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4374:24:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4360:39:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 13587,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4465:1:37",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 13578,
                    "id": 13588,
                    "nodeType": "Return",
                    "src": "4458:8:37"
                  },
                  "id": 13589,
                  "nodeType": "IfStatement",
                  "src": "4356:110:37",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 13585,
                      "name": "fundsRaised",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13343,
                      "src": "4420:11:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "functionReturnParameters": 13578,
                    "id": 13586,
                    "nodeType": "Return",
                    "src": "4413:18:37"
                  }
                }
              ]
            },
            "documentation": "@notice Return ETH raised by the STO",
            "id": 13591,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getRaisedEther",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13575,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4313:2:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13578,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13577,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13591,
                  "src": "4337:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13576,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4337:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4336:9:37"
            },
            "scope": 13934,
            "src": "4290:183:37",
            "stateMutability": "view",
            "superFunction": 14539,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13607,
              "nodeType": "Block",
              "src": "4595:128:37",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 13596,
                      "name": "fundRaiseType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 14508,
                      "src": "4609:13:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint8_$_t_bool_$",
                        "typeString": "mapping(uint8 => bool)"
                      }
                    },
                    "id": 13601,
                    "indexExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 13598,
                            "name": "FundRaiseType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14504,
                            "src": "4629:13:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_FundRaiseType_$14504_$",
                              "typeString": "type(enum ISTO.FundRaiseType)"
                            }
                          },
                          "id": 13599,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "POLY",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "4629:18:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                            "typeString": "enum ISTO.FundRaiseType"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                            "typeString": "enum ISTO.FundRaiseType"
                          }
                        ],
                        "id": 13597,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "4623:5:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint8_$",
                          "typeString": "type(uint8)"
                        },
                        "typeName": "uint8"
                      },
                      "id": 13600,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4623:25:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4609:40:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 13604,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4715:1:37",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 13595,
                    "id": 13605,
                    "nodeType": "Return",
                    "src": "4708:8:37"
                  },
                  "id": 13606,
                  "nodeType": "IfStatement",
                  "src": "4605:111:37",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 13602,
                      "name": "fundsRaised",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13343,
                      "src": "4670:11:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "functionReturnParameters": 13595,
                    "id": 13603,
                    "nodeType": "Return",
                    "src": "4663:18:37"
                  }
                }
              ]
            },
            "documentation": "@notice Return POLY raised by the STO",
            "id": 13608,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getRaisedPOLY",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13592,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4562:2:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13595,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13594,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13608,
                  "src": "4586:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13593,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4586:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4585:9:37"
            },
            "scope": 13934,
            "src": "4540:183:37",
            "stateMutability": "view",
            "superFunction": 14544,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13615,
              "nodeType": "Block",
              "src": "4854:37:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13613,
                    "name": "investorCount",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13345,
                    "src": "4871:13:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 13612,
                  "id": 13614,
                  "nodeType": "Return",
                  "src": "4864:20:37"
                }
              ]
            },
            "documentation": "@notice Return the total no. of investors",
            "id": 13616,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getNumberInvestors",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13609,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4821:2:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13612,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13611,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13616,
                  "src": "4845:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13610,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4845:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4844:9:37"
            },
            "scope": 13934,
            "src": "4794:97:37",
            "stateMutability": "view",
            "superFunction": 14549,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13623,
              "nodeType": "Block",
              "src": "5019:34:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13621,
                    "name": "tokensSold",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13347,
                    "src": "5036:10:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 13620,
                  "id": 13622,
                  "nodeType": "Return",
                  "src": "5029:17:37"
                }
              ]
            },
            "documentation": "@notice Return the total no. of tokens sold",
            "id": 13624,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getTokensSold",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13617,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4986:2:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13620,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13619,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13624,
                  "src": "5010:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13618,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5010:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5009:9:37"
            },
            "scope": 13934,
            "src": "4964:89:37",
            "stateMutability": "view",
            "superFunction": 14554,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13642,
              "nodeType": "Block",
              "src": "5204:98:37",
              "statements": [
                {
                  "assignments": [
                    13633
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13633,
                      "name": "allPermissions",
                      "nodeType": "VariableDeclaration",
                      "scope": 13643,
                      "src": "5214:31:37",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 13631,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5214:7:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 13632,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "5214:9:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13639,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 13637,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5262:1:37",
                        "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": 13636,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "5248:13:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 13634,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5252:7:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 13635,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "5252:9:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 13638,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5248:16:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5214:50:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13640,
                    "name": "allPermissions",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 13633,
                    "src": "5281:14:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 13629,
                  "id": 13641,
                  "nodeType": "Return",
                  "src": "5274:21:37"
                }
              ]
            },
            "documentation": "@notice Return the permissions flag that are associated with STO",
            "id": 13643,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13625,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5170:2:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13629,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13628,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13643,
                  "src": "5193:9:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 13626,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "5193:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 13627,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "5193:9:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5192:11:37"
            },
            "scope": 13934,
            "src": "5147:155:37",
            "stateMutability": "view",
            "superFunction": 9687,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13678,
              "nodeType": "Block",
              "src": "5476:245:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "id": 13662,
                        "name": "startTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14510,
                        "src": "5507:9:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13663,
                        "name": "endTime",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14512,
                        "src": "5530:7:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13664,
                        "name": "cap",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13349,
                        "src": "5551:3:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13665,
                        "name": "rate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13341,
                        "src": "5568:4:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13666,
                        "name": "fundsRaised",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13343,
                        "src": "5586:11:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13667,
                        "name": "investorCount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13345,
                        "src": "5611:13:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13668,
                        "name": "tokensSold",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13347,
                        "src": "5638:10:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "components": [
                          {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 13669,
                              "name": "fundRaiseType",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 14508,
                              "src": "5663:13:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_uint8_$_t_bool_$",
                                "typeString": "mapping(uint8 => bool)"
                              }
                            },
                            "id": 13674,
                            "indexExpression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 13671,
                                    "name": "FundRaiseType",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 14504,
                                    "src": "5683:13:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_enum$_FundRaiseType_$14504_$",
                                      "typeString": "type(enum ISTO.FundRaiseType)"
                                    }
                                  },
                                  "id": 13672,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "memberName": "POLY",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": null,
                                  "src": "5683:18:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                                    "typeString": "enum ISTO.FundRaiseType"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                                    "typeString": "enum ISTO.FundRaiseType"
                                  }
                                ],
                                "id": 13670,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "5677:5:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_uint8_$",
                                  "typeString": "type(uint8)"
                                },
                                "typeName": "uint8"
                              },
                              "id": 13673,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5677:25:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "5663:40:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          }
                        ],
                        "id": 13675,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "5662:42:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 13676,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "5493:221:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_bool_$",
                      "typeString": "tuple(uint256,uint256,uint256,uint256,uint256,uint256,uint256,bool)"
                    }
                  },
                  "functionReturnParameters": 13661,
                  "id": 13677,
                  "nodeType": "Return",
                  "src": "5486:228:37"
                }
              ]
            },
            "documentation": "@notice Return the STO details",
            "id": 13679,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getSTODetails",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13644,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5384:2:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13661,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13646,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13679,
                  "src": "5407:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13645,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5407:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13648,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13679,
                  "src": "5416:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13647,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5416:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13650,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13679,
                  "src": "5425:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13649,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5425:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13652,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13679,
                  "src": "5434:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13651,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5434:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13654,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13679,
                  "src": "5443:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13653,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5443:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13656,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13679,
                  "src": "5452:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13655,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5452:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13658,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13679,
                  "src": "5461:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13657,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5461:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13660,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13679,
                  "src": "5470:4:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 13659,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5470:4:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5406:69:37"
            },
            "scope": 13934,
            "src": "5362:359:37",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 13729,
              "nodeType": "Block",
              "src": "6165:494:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13687,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13681,
                        "src": "6197:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13688,
                        "name": "_investedAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13683,
                        "src": "6211:15:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13686,
                      "name": "_preValidatePurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13777,
                      "src": "6176:20:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) view"
                      }
                    },
                    "id": 13689,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6176:51:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13690,
                  "nodeType": "ExpressionStatement",
                  "src": "6176:51:37"
                },
                {
                  "assignments": [
                    13692
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 13692,
                      "name": "tokens",
                      "nodeType": "VariableDeclaration",
                      "scope": 13730,
                      "src": "6285:14:37",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 13691,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "6285:7:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 13696,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13694,
                        "name": "_investedAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13683,
                        "src": "6318:15:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13693,
                      "name": "_getTokenAmount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13862,
                      "src": "6302:15:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view returns (uint256)"
                      }
                    },
                    "id": 13695,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6302:32:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6285:49:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13702,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 13697,
                      "name": "fundsRaised",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13343,
                      "src": "6369:11:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 13700,
                          "name": "_investedAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13683,
                          "src": "6399:15:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 13698,
                          "name": "fundsRaised",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13343,
                          "src": "6383:11:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 13699,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22577,
                        "src": "6383:15:37",
                        "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": 13701,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6383:32:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6369:46:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 13703,
                  "nodeType": "ExpressionStatement",
                  "src": "6369:46:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13709,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 13704,
                      "name": "tokensSold",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13347,
                      "src": "6425:10:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 13707,
                          "name": "tokens",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13692,
                          "src": "6453:6:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 13705,
                          "name": "tokensSold",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13347,
                          "src": "6438:10:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 13706,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22577,
                        "src": "6438:14:37",
                        "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": 13708,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "6438:22:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6425:35:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 13710,
                  "nodeType": "ExpressionStatement",
                  "src": "6425:35:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13712,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13681,
                        "src": "6488:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13713,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13692,
                        "src": "6502:6:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13711,
                      "name": "_processPurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13841,
                      "src": "6471:16:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 13714,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6471:38:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13715,
                  "nodeType": "ExpressionStatement",
                  "src": "6471:38:37"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13717,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "6538:3:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13718,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "6538:10:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13719,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13681,
                        "src": "6550:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13720,
                        "name": "_investedAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13683,
                        "src": "6564:15:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13721,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13692,
                        "src": "6581:6:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13716,
                      "name": "TokenPurchase",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13363,
                      "src": "6524:13:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256,uint256)"
                      }
                    },
                    "id": 13722,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6524:64:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13723,
                  "nodeType": "EmitStatement",
                  "src": "6519:69:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13725,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13681,
                        "src": "6622:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13726,
                        "name": "_investedAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13683,
                        "src": "6636:15:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13724,
                      "name": "_updatePurchasingState",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13849,
                      "src": "6599:22:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256) pure"
                      }
                    },
                    "id": 13727,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6599:53:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13728,
                  "nodeType": "ExpressionStatement",
                  "src": "6599:53:37"
                }
              ]
            },
            "documentation": "Processing the purchase as well as verify the required validations\n@param _beneficiary Address performing the token purchase\n@param _investedAmount Value in wei involved in the purchase",
            "id": 13730,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_processTx",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13684,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13681,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 13730,
                  "src": "6109:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13680,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6109:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13683,
                  "name": "_investedAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 13730,
                  "src": "6131:23:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13682,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6131:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6108:47:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13685,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6165:0:37"
            },
            "scope": 13934,
            "src": "6089:570:37",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13776,
              "nodeType": "Block",
              "src": "7064:383:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 13742,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 13738,
                          "name": "_beneficiary",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13732,
                          "src": "7082:12:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 13740,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "7106:1:37",
                              "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": 13739,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "7098:7:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 13741,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7098:10:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "7082:26:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "42656e656669636961727920616464726573732073686f756c64206e6f74206265203078",
                        "id": 13743,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7110:38:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_37d29aa3ce9798db570372bdda89778b0d10baf26a0c3ed220e5b9de93630af7",
                          "typeString": "literal_string \"Beneficiary address should not be 0x\""
                        },
                        "value": "Beneficiary address should not be 0x"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_37d29aa3ce9798db570372bdda89778b0d10baf26a0c3ed220e5b9de93630af7",
                          "typeString": "literal_string \"Beneficiary address should not be 0x\""
                        }
                      ],
                      "id": 13737,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "7074:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7074:75:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13745,
                  "nodeType": "ExpressionStatement",
                  "src": "7074:75:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 13749,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 13747,
                          "name": "_investedAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13734,
                          "src": "7167:15:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 13748,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7186:1:37",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7167:20:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "416d6f756e7420696e7665737465642073686f756c64206e6f7420626520657175616c20746f2030",
                        "id": 13750,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7189:42:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d3e374dc684c190092d55a9dbb8fde90629933d5cf1e4ecfb2e8ebb24c549f0f",
                          "typeString": "literal_string \"Amount invested should not be equal to 0\""
                        },
                        "value": "Amount invested should not be equal to 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d3e374dc684c190092d55a9dbb8fde90629933d5cf1e4ecfb2e8ebb24c549f0f",
                          "typeString": "literal_string \"Amount invested should not be equal to 0\""
                        }
                      ],
                      "id": 13746,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "7159:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13751,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7159:73:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13752,
                  "nodeType": "ExpressionStatement",
                  "src": "7159:73:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 13761,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 13757,
                                  "name": "_investedAmount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 13734,
                                  "src": "7281:15:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 13756,
                                "name": "_getTokenAmount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 13862,
                                "src": "7265:15:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256) view returns (uint256)"
                                }
                              },
                              "id": 13758,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7265:32:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 13754,
                              "name": "tokensSold",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13347,
                              "src": "7250:10:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 13755,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22577,
                            "src": "7250:14:37",
                            "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": 13759,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7250:48:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 13760,
                          "name": "cap",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13349,
                          "src": "7302:3:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "7250:55:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e766573746d656e74206d6f7265207468616e20636170206973206e6f7420616c6c6f776564",
                        "id": 13762,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7307:41:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_fd271590b935413ca5ecf4291f46eb0da0e9b29bbe41c209ad0f420f28bc9360",
                          "typeString": "literal_string \"Investment more than cap is not allowed\""
                        },
                        "value": "Investment more than cap is not allowed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_fd271590b935413ca5ecf4291f46eb0da0e9b29bbe41c209ad0f420f28bc9360",
                          "typeString": "literal_string \"Investment more than cap is not allowed\""
                        }
                      ],
                      "id": 13753,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "7242:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13763,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7242:107:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13764,
                  "nodeType": "ExpressionStatement",
                  "src": "7242:107:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 13772,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13768,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13766,
                            "name": "now",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23133,
                            "src": "7367:3:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 13767,
                            "name": "startTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14510,
                            "src": "7374:9:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7367:16:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "&&",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 13771,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13769,
                            "name": "now",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23133,
                            "src": "7387:3:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 13770,
                            "name": "endTime",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14512,
                            "src": "7394:7:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7387:14:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "7367:34:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4f66666572696e6720697320636c6f7365642f4e6f74207965742073746172746564",
                        "id": 13773,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7403:36:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_26e864774e7aae0e4869d949fb332a35a8abffc3f75ac765203236aafc0bedd5",
                          "typeString": "literal_string \"Offering is closed/Not yet started\""
                        },
                        "value": "Offering is closed/Not yet started"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_26e864774e7aae0e4869d949fb332a35a8abffc3f75ac765203236aafc0bedd5",
                          "typeString": "literal_string \"Offering is closed/Not yet started\""
                        }
                      ],
                      "id": 13765,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "7359:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13774,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7359:81:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13775,
                  "nodeType": "ExpressionStatement",
                  "src": "7359:81:37"
                }
              ]
            },
            "documentation": "@notice Validation of an incoming purchase.\nUse require statements to revert state when conditions are not met. Use super to concatenate validations.\n@param _beneficiary Address performing the token purchase\n@param _investedAmount Value in wei involved in the purchase",
            "id": 13777,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_preValidatePurchase",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13735,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13732,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 13777,
                  "src": "7003:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13731,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7003:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13734,
                  "name": "_investedAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 13777,
                  "src": "7025:23:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13733,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7025:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7002:47:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13736,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7064:0:37"
            },
            "scope": 13934,
            "src": "6973:474:37",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13784,
              "nodeType": "Block",
              "src": "7716:34:37",
              "statements": []
            },
            "documentation": "@notice Validation of an executed purchase.\nObserve state and use revert statements to undo rollback when valid conditions are not met.",
            "id": 13785,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_postValidatePurchase",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13782,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13779,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13785,
                  "src": "7647:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13778,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7647:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13781,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13785,
                  "src": "7673:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13780,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7673:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7646:55:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13783,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7716:0:37"
            },
            "scope": 13934,
            "src": "7616:134:37",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13803,
              "nodeType": "Block",
              "src": "8107:110:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 13797,
                            "name": "_beneficiary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13787,
                            "src": "8151:12:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 13798,
                            "name": "_tokenAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13789,
                            "src": "8165:12:37",
                            "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": 13794,
                                "name": "securityToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 9561,
                                "src": "8131:13:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 13793,
                              "name": "IST20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 10048,
                              "src": "8125:5:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IST20_$10048_$",
                                "typeString": "type(contract IST20)"
                              }
                            },
                            "id": 13795,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "8125:20:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IST20_$10048",
                              "typeString": "contract IST20"
                            }
                          },
                          "id": 13796,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mint",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 10030,
                          "src": "8125:25:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 13799,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "8125:53:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4572726f7220696e206d696e74696e672074686520746f6b656e73",
                        "id": 13800,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8180:29:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_44a874e95e71a77b89ab92fa503b62269ceb7d2fcf379a22f3d28955292f2afc",
                          "typeString": "literal_string \"Error in minting the tokens\""
                        },
                        "value": "Error in minting the tokens"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_44a874e95e71a77b89ab92fa503b62269ceb7d2fcf379a22f3d28955292f2afc",
                          "typeString": "literal_string \"Error in minting the tokens\""
                        }
                      ],
                      "id": 13792,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "8117:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13801,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8117:93:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13802,
                  "nodeType": "ExpressionStatement",
                  "src": "8117:93:37"
                }
              ]
            },
            "documentation": "@notice Source of tokens.\nOverride this method to modify the way in which the crowdsale ultimately gets and sends its tokens.\n@param _beneficiary Address performing the token purchase\n@param _tokenAmount Number of tokens to be emitted",
            "id": 13804,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_deliverTokens",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13790,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13787,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 13804,
                  "src": "8054:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13786,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8054:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13789,
                  "name": "_tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 13804,
                  "src": "8076:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13788,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8076:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8053:44:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13791,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8107:0:37"
            },
            "scope": 13934,
            "src": "8030:187:37",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13840,
              "nodeType": "Block",
              "src": "8554:238:37",
              "statements": [
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 13815,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 13811,
                        "name": "investors",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13353,
                        "src": "8568:9:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 13813,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 13812,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13806,
                        "src": "8578:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "8568:23:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 13814,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8595:1:37",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8568:28:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13823,
                  "nodeType": "IfStatement",
                  "src": "8564:92:37",
                  "trueBody": {
                    "id": 13822,
                    "nodeType": "Block",
                    "src": "8598:58:37",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 13820,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 13816,
                            "name": "investorCount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13345,
                            "src": "8612:13:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 13819,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "argumentTypes": null,
                              "id": 13817,
                              "name": "investorCount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 13345,
                              "src": "8628:13:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 13818,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8644:1:37",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "8628:17:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "8612:33:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 13821,
                        "nodeType": "ExpressionStatement",
                        "src": "8612:33:37"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13833,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 13824,
                        "name": "investors",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13353,
                        "src": "8665:9:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 13826,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 13825,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13806,
                        "src": "8675:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8665:23:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 13831,
                          "name": "_tokenAmount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 13808,
                          "src": "8719:12:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 13827,
                            "name": "investors",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13353,
                            "src": "8691:9:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 13829,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 13828,
                            "name": "_beneficiary",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13806,
                            "src": "8701:12:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "8691:23:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 13830,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22577,
                        "src": "8691:27:37",
                        "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": 13832,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8691:41:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8665:67:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 13834,
                  "nodeType": "ExpressionStatement",
                  "src": "8665:67:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13836,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13806,
                        "src": "8758:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13837,
                        "name": "_tokenAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13808,
                        "src": "8772:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 13835,
                      "name": "_deliverTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13804,
                      "src": "8743:14:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 13838,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8743:42:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13839,
                  "nodeType": "ExpressionStatement",
                  "src": "8743:42:37"
                }
              ]
            },
            "documentation": "@notice Executed when a purchase has been validated and is ready to be executed. Not necessarily emits/sends tokens.\n@param _beneficiary Address receiving the tokens\n@param _tokenAmount Number of tokens to be purchased",
            "id": 13841,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_processPurchase",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13809,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13806,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 13841,
                  "src": "8501:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13805,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8501:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13808,
                  "name": "_tokenAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 13841,
                  "src": "8523:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13807,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8523:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8500:44:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13810,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8554:0:37"
            },
            "scope": 13934,
            "src": "8475:317:37",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13848,
              "nodeType": "Block",
              "src": "9046:34:37",
              "statements": []
            },
            "documentation": "@notice Override for extensions that require an internal state to check for validity\n(current user contributions, etc.)",
            "id": 13849,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_updatePurchasingState",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13846,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13843,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13849,
                  "src": "8977:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13842,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8977:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13845,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13849,
                  "src": "9003:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13844,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9003:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8976:55:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13847,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9046:0:37"
            },
            "scope": 13934,
            "src": "8945:135:37",
            "stateMutability": "pure",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13861,
              "nodeType": "Block",
              "src": "9421:49:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13858,
                        "name": "rate",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13341,
                        "src": "9458:4:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13856,
                        "name": "_investedAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13851,
                        "src": "9438:15:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 13857,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22519,
                      "src": "9438:19:37",
                      "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": 13859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9438:25:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 13855,
                  "id": 13860,
                  "nodeType": "Return",
                  "src": "9431:32:37"
                }
              ]
            },
            "documentation": "@notice Override to extend the way in which ether is converted to tokens.\n@param _investedAmount Value in wei to be converted into tokens\n@return Number of tokens that can be purchased with the specified _investedAmount",
            "id": 13862,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "_getTokenAmount",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13852,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13851,
                  "name": "_investedAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 13862,
                  "src": "9364:23:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13850,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9364:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9363:25:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13855,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13854,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 13862,
                  "src": "9412:7:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13853,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9412:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9411:9:37"
            },
            "scope": 13934,
            "src": "9339:131:37",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13872,
              "nodeType": "Block",
              "src": "9592:43:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 13868,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "9618:3:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 13869,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "value",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9618:9:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 13865,
                        "name": "wallet",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13339,
                        "src": "9602:6:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "id": 13867,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "9602:15:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$",
                        "typeString": "function (uint256)"
                      }
                    },
                    "id": 13870,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9602:26:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13871,
                  "nodeType": "ExpressionStatement",
                  "src": "9602:26:37"
                }
              ]
            },
            "documentation": "@notice Determines how ETH is stored/forwarded on purchases.",
            "id": 13873,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_forwardFunds",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13863,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9580:2:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13864,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9592:0:37"
            },
            "scope": 13934,
            "src": "9558:77:37",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13914,
              "nodeType": "Block",
              "src": "9855:313:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "id": 13885,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 13881,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13879,
                            "name": "_fundRaiseType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13875,
                            "src": "9873:14:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 13880,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9891:1:37",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "9873:19:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "||",
                        "rightExpression": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 13884,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 13882,
                            "name": "_fundRaiseType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 13875,
                            "src": "9896:14:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "31",
                            "id": 13883,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9914:1:37",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "9896:19:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "src": "9873:42:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4e6f7420612076616c69642066756e6472616973652074797065",
                        "id": 13886,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9917:28:37",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9c7db3a3deadf3bdfecd1f7258aa1b0b6a68ec11090909e991c0caee9f51eab1",
                          "typeString": "literal_string \"Not a valid fundraise type\""
                        },
                        "value": "Not a valid fundraise type"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9c7db3a3deadf3bdfecd1f7258aa1b0b6a68ec11090909e991c0caee9f51eab1",
                          "typeString": "literal_string \"Not a valid fundraise type\""
                        }
                      ],
                      "id": 13878,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "9865:7:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 13887,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9865:81:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 13888,
                  "nodeType": "ExpressionStatement",
                  "src": "9865:81:37"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 13893,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 13889,
                        "name": "fundRaiseType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14508,
                        "src": "9956:13:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint8_$_t_bool_$",
                          "typeString": "mapping(uint8 => bool)"
                        }
                      },
                      "id": 13891,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 13890,
                        "name": "_fundRaiseType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13875,
                        "src": "9970:14:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "9956:29:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 13892,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9988:4:37",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "9956:36:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13894,
                  "nodeType": "ExpressionStatement",
                  "src": "9956:36:37"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    },
                    "id": 13900,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 13895,
                      "name": "_fundRaiseType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 13875,
                      "src": "10006:14:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 13897,
                            "name": "FundRaiseType",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14504,
                            "src": "10030:13:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_FundRaiseType_$14504_$",
                              "typeString": "type(enum ISTO.FundRaiseType)"
                            }
                          },
                          "id": 13898,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "POLY",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "10030:18:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                            "typeString": "enum ISTO.FundRaiseType"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_enum$_FundRaiseType_$14504",
                            "typeString": "enum ISTO.FundRaiseType"
                          }
                        ],
                        "id": 13896,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "10024:5:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint8_$",
                          "typeString": "type(uint8)"
                        },
                        "typeName": "uint8"
                      },
                      "id": 13899,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "10024:25:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "src": "10006:43:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 13913,
                  "nodeType": "IfStatement",
                  "src": "10002:160:37",
                  "trueBody": {
                    "id": 13912,
                    "nodeType": "Block",
                    "src": "10051:111:37",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              "id": 13908,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 13903,
                                    "name": "polyToken",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 9566,
                                    "src": "10081:9:37",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_ERC20_$22837",
                                      "typeString": "contract ERC20"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_contract$_ERC20_$22837",
                                      "typeString": "contract ERC20"
                                    }
                                  ],
                                  "id": 13902,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "10073:7:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 13904,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10073:18:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "30",
                                    "id": 13906,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "10103:1:37",
                                    "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": 13905,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "10095:7:37",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_$",
                                    "typeString": "type(address)"
                                  },
                                  "typeName": "address"
                                },
                                "id": 13907,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "10095:10:37",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "src": "10073:32:37",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "41646472657373206f662074686520706f6c79546f6b656e2073686f756c64206e6f74206265203078",
                              "id": 13909,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10107:43:37",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_26e6b5cce2ca50d46843d45e9e0dfa581c760c537858fbfb1ee776d8fa9213e1",
                                "typeString": "literal_string \"Address of the polyToken should not be 0x\""
                              },
                              "value": "Address of the polyToken should not be 0x"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_26e6b5cce2ca50d46843d45e9e0dfa581c760c537858fbfb1ee776d8fa9213e1",
                                "typeString": "literal_string \"Address of the polyToken should not be 0x\""
                              }
                            ],
                            "id": 13901,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              23134,
                              23135
                            ],
                            "referencedDeclaration": 23135,
                            "src": "10065:7:37",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 13910,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10065:86:37",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 13911,
                        "nodeType": "ExpressionStatement",
                        "src": "10065:86:37"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Internal function used to check the type of fund raise currency\n@param _fundRaiseType Type of currency used to collect the funds",
            "id": 13915,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_check",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13876,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13875,
                  "name": "_fundRaiseType",
                  "nodeType": "VariableDeclaration",
                  "scope": 13915,
                  "src": "9824:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 13874,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "9824:5:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9823:22:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13877,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9855:0:37"
            },
            "scope": 13934,
            "src": "9808:360:37",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 13932,
              "nodeType": "Block",
              "src": "10525:72:37",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 13927,
                        "name": "_beneficiary",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13917,
                        "src": "10558:12:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13928,
                        "name": "_to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13919,
                        "src": "10572:3:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 13929,
                        "name": "_fundsAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 13921,
                        "src": "10577:12:37",
                        "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": 13924,
                        "name": "polyToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9566,
                        "src": "10535:9:37",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ERC20_$22837",
                          "typeString": "contract ERC20"
                        }
                      },
                      "id": 13926,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "transferFrom",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22819,
                      "src": "10535:22:37",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                        "typeString": "function (address,address,uint256) external returns (bool)"
                      }
                    },
                    "id": 13930,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10535:55:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 13931,
                  "nodeType": "ExpressionStatement",
                  "src": "10535:55:37"
                }
              ]
            },
            "documentation": "@notice Internal function used to forward the POLY raised to beneficiary address\n@param _beneficiary Address of the funds reciever\n@param _to Address who wants to ST-20 tokens\n@param _fundsAmount Amount invested by _to",
            "id": 13933,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_forwardPoly",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 13922,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 13917,
                  "name": "_beneficiary",
                  "nodeType": "VariableDeclaration",
                  "scope": 13933,
                  "src": "10459:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13916,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10459:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13919,
                  "name": "_to",
                  "nodeType": "VariableDeclaration",
                  "scope": 13933,
                  "src": "10481:11:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 13918,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10481:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 13921,
                  "name": "_fundsAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 13933,
                  "src": "10494:20:37",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 13920,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10494:7:37",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10458:57:37"
            },
            "payable": false,
            "returnParameters": {
              "id": 13923,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10525:0:37"
            },
            "scope": 13934,
            "src": "10437:160:37",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          }
        ],
        "scope": 13935,
        "src": "266:10334:37"
      }
    ],
    "src": "0:10601:37"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-08-21T09:48:12.467Z"
}