{
  "contractName": "ERC20DividendCheckpoint",
  "abi": [
    {
      "constant": false,
      "inputs": [
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "takeFee",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "polyToken",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "DISTRIBUTE",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "dividends",
      "outputs": [
        {
          "name": "checkpointId",
          "type": "uint256"
        },
        {
          "name": "created",
          "type": "uint256"
        },
        {
          "name": "maturity",
          "type": "uint256"
        },
        {
          "name": "expiry",
          "type": "uint256"
        },
        {
          "name": "token",
          "type": "address"
        },
        {
          "name": "amount",
          "type": "uint256"
        },
        {
          "name": "claimedAmount",
          "type": "uint256"
        },
        {
          "name": "totalSupply",
          "type": "uint256"
        },
        {
          "name": "reclaimed",
          "type": "bool"
        }
      ],
      "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"
    },
    {
      "inputs": [
        {
          "name": "_securityToken",
          "type": "address"
        },
        {
          "name": "_polyAddress",
          "type": "address"
        }
      ],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_depositor",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_checkpointId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_created",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_maturity",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_expiry",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_totalSupply",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_dividendIndex",
          "type": "uint256"
        }
      ],
      "name": "ERC20DividendDeposited",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_payee",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_dividendIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "ERC20DividendClaimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "name": "_claimer",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_dividendIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "name": "_token",
          "type": "address"
        },
        {
          "indexed": false,
          "name": "_claimedAmount",
          "type": "uint256"
        }
      ],
      "name": "ERC20DividendReclaimed",
      "type": "event"
    },
    {
      "constant": true,
      "inputs": [],
      "name": "getInitFunction",
      "outputs": [
        {
          "name": "",
          "type": "bytes4"
        }
      ],
      "payable": false,
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_maturity",
          "type": "uint256"
        },
        {
          "name": "_expiry",
          "type": "uint256"
        },
        {
          "name": "_token",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "createDividend",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_maturity",
          "type": "uint256"
        },
        {
          "name": "_expiry",
          "type": "uint256"
        },
        {
          "name": "_token",
          "type": "address"
        },
        {
          "name": "_amount",
          "type": "uint256"
        },
        {
          "name": "_checkpointId",
          "type": "uint256"
        }
      ],
      "name": "createDividendWithCheckpoint",
      "outputs": [],
      "payable": true,
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_dividendIndex",
          "type": "uint256"
        },
        {
          "name": "_payees",
          "type": "address[]"
        }
      ],
      "name": "pushDividendPaymentToAddresses",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_dividendIndex",
          "type": "uint256"
        },
        {
          "name": "_start",
          "type": "uint256"
        },
        {
          "name": "_iterations",
          "type": "uint256"
        }
      ],
      "name": "pushDividendPayment",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_dividendIndex",
          "type": "uint256"
        }
      ],
      "name": "pullDividendPayment",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "_dividendIndex",
          "type": "uint256"
        }
      ],
      "name": "reclaimDividend",
      "outputs": [],
      "payable": false,
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_dividendIndex",
          "type": "uint256"
        },
        {
          "name": "_payee",
          "type": "address"
        }
      ],
      "name": "calculateDividend",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        }
      ],
      "payable": false,
      "stateMutability": "view",
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "_checkpointId",
          "type": "uint256"
        }
      ],
      "name": "getDividendIndex",
      "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"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5060405160408061279f83398101604052805160209091015160018054600160a060020a03938416600160a060020a031991821617909155600080548216331790556002805493909216921691909117905561272e806100716000396000f3006080604052600436106100d75763ffffffff60e060020a6000350416631613ec9d81146100dc57806330008b48146101265780634d58e413146101405780635bea0e1c1461019a5780635daff64e146101d05780635f7619a4146102385780636faa22a51461026457806377bbf28a1461029557806380fef5af146102bf578063814b3fe0146102d4578063aa8b76ea1461033d578063b84dfbd214610355578063c3a07df61461036a578063c45a01551461037f578063cf3b98b214610394578063d70afa96146103b4578063e1726faa146103c9575b600080fd5b3480156100e857600080fd5b506100f16103e7565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561013257600080fd5b5061013e6004356103ec565b005b34801561014c57600080fd5b5060408051602060046024803582810135848102808701860190975280865261013e968435963696604495919490910192918291850190849080828437509497506106889650505050505050565b3480156101a657600080fd5b506101be600435600160a060020a0360243516610adc565b60408051918252519081900360200190f35b3480156101dc57600080fd5b506101e8600435610c53565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561022457818101518382015260200161020c565b505050509050019250505060405180910390f35b34801561024457600080fd5b50610250600435610d38565b604080519115158252519081900360200190f35b34801561027057600080fd5b50610279611077565b60408051600160a060020a039092168252519081900360200190f35b3480156102a157600080fd5b5061013e600435602435600160a060020a0360443516606435611086565b3480156102cb57600080fd5b506101be611591565b3480156102e057600080fd5b506102ec6004356115a3565b60408051998a5260208a0198909852888801969096526060880194909452600160a060020a03909216608087015260a086015260c085015260e0840152151561010083015251908190036101200190f35b34801561034957600080fd5b5061013e600435611609565b34801561036157600080fd5b506102796119da565b34801561037657600080fd5b506101e86119e9565b34801561038b57600080fd5b50610279611a3b565b61013e600435602435600160a060020a0360443516606435608435611a4a565b3480156103c057600080fd5b506101be611f27565b3480156103d557600080fd5b5061013e600435602435604435611f4b565b600090565b60035460009082908110610438576040805160e560020a62461bcd02815260206004820152601860248201526000805160206126e3833981519152604482015290519081900360640190fd5b600380548290811061044657fe5b90600052602060002090600a02016002015442101515156104d7576040805160e560020a62461bcd02815260206004820152602260248201527f4469766964656e64206d6174757269747920697320696e20746865206675747560448201527f7265000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60038054829081106104e557fe5b90600052602060002090600a0201600301544210151561054f576040805160e560020a62461bcd02815260206004820152601e60248201527f4469766964656e642065787069727920697320696e2074686520706173740000604482015290519081900360640190fd5b600380548290811061055d57fe5b600091825260209091206008600a90920201015460ff16156105ef576040805160e560020a62461bcd02815260206004820152602560248201527f4469766964656e6420686173206265656e207265636c61696d6564206279206960448201527f7373756572000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60038054849081106105fd57fe5b600091825260208083203384526009600a90930201918201905260409091205490925060ff1615610678576040805160e560020a62461bcd02815260206004820152601a60248201527f4469766964656e6420616c7265616479207265636c61696d6564000000000000604482015290519081900360640190fd5b61068333838561249f565b505050565b6000806000805160206126c3833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050506040513d602081101561071a57600080fd5b505160005433600160a060020a03928316811494509116149050818061073d5750805b806107e35750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b1580156107b657600080fd5b505af11580156107ca573d6000803e3d6000fd5b505050506040513d60208110156107e057600080fd5b50515b1515610839576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60035487908110610882576040805160e560020a62461bcd02815260206004820152601860248201526000805160206126e3833981519152604482015290519081900360640190fd5b600380548290811061089057fe5b90600052602060002090600a0201600201544210151515610921576040805160e560020a62461bcd02815260206004820152602260248201527f4469766964656e64206d6174757269747920697320696e20746865206675747560448201527f7265000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600380548290811061092f57fe5b90600052602060002090600a02016003015442101515610999576040805160e560020a62461bcd02815260206004820152601e60248201527f4469766964656e642065787069727920697320696e2074686520706173740000604482015290519081900360640190fd5b60038054829081106109a757fe5b600091825260209091206008600a90920201015460ff1615610a39576040805160e560020a62461bcd02815260206004820152602560248201527f4469766964656e6420686173206265656e207265636c61696d6564206279206960448201527f7373756572000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6003805489908110610a4757fe5b90600052602060002090600a02019550600094505b8651851015610ad2578560090160008887815181101515610a7957fe5b6020908102909101810151600160a060020a031682528101919091526040016000205460ff161515610ac757610ac78786815181101515610ab657fe5b90602001906020020151878a61249f565b600190940193610a5c565b5050505050505050565b6000806000600385815481101515610af057fe5b60009182526020808320600160a060020a03881684526009600a90930201918201905260409091205490925060ff1615610b2d5760009250610c4b565b60015460038054600160a060020a0390921691634ee2cd7e91879189908110610b5257fe5b90600052602060002090600a0201600001546040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610bb657600080fd5b505af1158015610bca573d6000803e3d6000fd5b505050506040513d6020811015610be057600080fd5b505160038054919250610c489187908110610bf757fe5b90600052602060002090600a020160070154610c3c600388815481101515610c1b57fe5b90600052602060002090600a0201600501548461264790919063ffffffff16565b9063ffffffff61267616565b92505b505092915050565b606060008082815b600354831015610c9f5785600384815481101515610c7557fe5b90600052602060002090600a0201600001541415610c94576001909301925b600190920191610c5b565b83604051908082528060200260200182016040528015610cc9578160200160208202803883390190505b50915060009350600090505b600354811015610d2f5785600382815481101515610cef57fe5b90600052602060002090600a0201600001541415610d2757808285815181101515610d1657fe5b602090810290910101526001909301925b600101610cd5565b50949350505050565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b505050506040513d6020811015610ddb57600080fd5b505160005433600160a060020a039283168114945091161490508180610dfe5750805b80610ea45750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015610e7757600080fd5b505af1158015610e8b573d6000803e3d6000fd5b505050506040513d6020811015610ea157600080fd5b50515b1515610efa576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b158015610f6957600080fd5b505af1158015610f7d573d6000803e3d6000fd5b505050506040513d6020811015610f9357600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b158015610fea57600080fd5b505af1158015610ffe573d6000803e3d6000fd5b505050506040513d602081101561101457600080fd5b5051151561106c576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b600254600160a060020a031681565b6000806000600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156110de57600080fd5b505af11580156110f2573d6000803e3d6000fd5b505050506040513d602081101561110857600080fd5b5051600160a060020a03163314611169576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b86861161117557600080fd5b42861161118157600080fd5b600160a060020a038516151561119657600080fd5b600084116111a357600080fd5b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a038716916323b872dd9160648083019260209291908290030181600087803b15801561121157600080fd5b505af1158015611225573d6000803e3d6000fd5b505050506040513d602081101561123b57600080fd5b505115156112b9576040805160e560020a62461bcd02815260206004820152602660248201527f556e61626c6520746f207472616e7366657220746f6b656e7320666f7220646960448201527f766964656e640000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600354600154604080517fff0b9c900000000000000000000000000000000000000000000000000000000081529051929550600160a060020a039091169163ff0b9c90916004808201926020929091908290030181600087803b15801561131f57600080fd5b505af1158015611333573d6000803e3d6000fd5b505050506040513d602081101561134957600080fd5b5051600154604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051929450600160a060020a03909116916318160ddd916004808201926020929091908290030181600087803b1580156113ae57600080fd5b505af11580156113c2573d6000803e3d6000fd5b505050506040513d60208110156113d857600080fd5b8101908080519060200190929190505050905060036101206040519081016040528084815260200142815260200189815260200188815260200187600160a060020a0316815260200186815260200160008152602001838152602001600015158152509080600181540180825580915050906001820390600052602060002090600a0201600090919290919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a815481600160a060020a030219169083600160a060020a0316021790555060a0820151816005015560c0820151816006015560e082015181600701556101008201518160080160006101000a81548160ff02191690831515021790555050505033600160a060020a03167fb5d843cebbb7595af0860a94ddef15ce747f966392b0ab3705d48c5c08cf0c5583428a8a8a8a888b6040518089815260200188815260200187815260200186815260200185600160a060020a0316600160a060020a031681526020018481526020018381526020018281526020019850505050505050505060405180910390a250505050505050565b6000805160206126c383398151915281565b60038054829081106115b157fe5b60009182526020909120600a9091020180546001820154600283015460038401546004850154600586015460068701546007880154600890980154969850949693959294600160a060020a0390921693909260ff1689565b600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561165f57600080fd5b505af1158015611673573d6000803e3d6000fd5b505050506040513d602081101561168957600080fd5b5051600160a060020a031633146116ea576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b6003548310611731576040805160e560020a62461bcd02815260206004820152601860248201526000805160206126e3833981519152604482015290519081900360640190fd5b600380548490811061173f57fe5b90600052602060002090600a02016003015442101515156117aa576040805160e560020a62461bcd02815260206004820181905260248201527f4469766964656e642065787069727920697320696e2074686520667574757265604482015290519081900360640190fd5b60038054849081106117b857fe5b600091825260209091206008600a90920201015460ff1615611824576040805160e560020a62461bcd02815260206004820152601860248201527f4469766964656e6420616c726561647920636c61696d65640000000000000000604482015290519081900360640190fd5b600160038481548110151561183557fe5b60009182526020909120600a90910201600801805460ff1916911515919091179055600380548490811061186557fe5b90600052602060002090600a020191506118908260060154836005015461268b90919063ffffffff16565b600480840154604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233938101939093526024830184905251929350600160a060020a03169163a9059cbb916044808201926020929091908290030181600087803b15801561190257600080fd5b505af1158015611916573d6000803e3d6000fd5b505050506040513d602081101561192c57600080fd5b50511515611984576040805160e560020a62461bcd02815260206004820152601960248201527f556e61626c6520746f207472616e7366657220746f6b656e7300000000000000604482015290519081900360640190fd5b600482015460408051858152600160a060020a039290921660208301528181018390525133917f9766d0325a2a3c017f6cf974bfd1bd0b26e705570ce8250fe5e078a3e832d52d919081900360600190a2505050565b600154600160a060020a031681565b604080516001808252818301909252606091829190602080830190803883390190505090506000805160206126c3833981519152816000815181101515611a2c57fe5b60209081029091010152905090565b600054600160a060020a031681565b600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611aa057600080fd5b505af1158015611ab4573d6000803e3d6000fd5b505050506040513d6020811015611aca57600080fd5b5051600160a060020a03163314611b2b576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b868611611b3757600080fd5b428611611b4357600080fd5b600160009054906101000a9004600160a060020a0316600160a060020a0316635488cc806040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611b9657600080fd5b505af1158015611baa573d6000803e3d6000fd5b505050506040513d6020811015611bc057600080fd5b5051831115611bce57600080fd5b600354600154604080517f981b24d0000000000000000000000000000000000000000000000000000000008152600481018790529051929450600160a060020a039091169163981b24d0916024808201926020929091908290030181600087803b158015611c3b57600080fd5b505af1158015611c4f573d6000803e3d6000fd5b505050506040513d6020811015611c6557600080fd5b5051604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790529051919250600160a060020a038716916323b872dd916064808201926020929091908290030181600087803b158015611cd957600080fd5b505af1158015611ced573d6000803e3d6000fd5b505050506040513d6020811015611d0357600080fd5b50511515611d81576040805160e560020a62461bcd02815260206004820152602660248201527f556e61626c6520746f207472616e7366657220746f6b656e7320666f7220646960448201527f766964656e640000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60036101206040519081016040528085815260200142815260200189815260200188815260200187600160a060020a0316815260200186815260200160008152602001838152602001600015158152509080600181540180825580915050906001820390600052602060002090600a0201600090919290919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a815481600160a060020a030219169083600160a060020a0316021790555060a0820151816005015560c0820151816006015560e082015181600701556101008201518160080160006101000a81548160ff02191690831515021790555050505033600160a060020a03167fb5d843cebbb7595af0860a94ddef15ce747f966392b0ab3705d48c5c08cf0c5584428a8a8a8a888a6040518089815260200188815260200187815260200186815260200185600160a060020a0316600160a060020a031681526020018481526020018381526020018281526020019850505050505050505060405180910390a250505050505050565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b6000806000806000805160206126c3833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611fb657600080fd5b505af1158015611fca573d6000803e3d6000fd5b505050506040513d6020811015611fe057600080fd5b505160005433600160a060020a0392831681149450911614905081806120035750805b806120a95750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561207c57600080fd5b505af1158015612090573d6000803e3d6000fd5b505050506040513d60208110156120a657600080fd5b50515b15156120ff576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b6003548a908110612148576040805160e560020a62461bcd02815260206004820152601860248201526000805160206126e3833981519152604482015290519081900360640190fd5b600380548290811061215657fe5b90600052602060002090600a02016002015442101515156121e7576040805160e560020a62461bcd02815260206004820152602260248201527f4469766964656e64206d6174757269747920697320696e20746865206675747560448201527f7265000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60038054829081106121f557fe5b90600052602060002090600a0201600301544210151561225f576040805160e560020a62461bcd02815260206004820152601e60248201527f4469766964656e642065787069727920697320696e2074686520706173740000604482015290519081900360640190fd5b600380548290811061226d57fe5b600091825260209091206008600a90920201015460ff16156122ff576040805160e560020a62461bcd02815260206004820152602560248201527f4469766964656e6420686173206265656e207265636c61696d6564206279206960448201527f7373756572000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600380548c90811061230d57fe5b90600052602060002090600a02019750600160009054906101000a9004600160a060020a0316600160a060020a031663e3cc65e26040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561237057600080fd5b505af1158015612384573d6000803e3d6000fd5b505050506040513d602081101561239a57600080fd5b505196508995505b6123bb876123b68c8c63ffffffff61269d16565b6126aa565b86101561249257600154604080517f3feb5f2b000000000000000000000000000000000000000000000000000000008152600481018990529051600160a060020a0390921691633feb5f2b916024808201926020929091908290030181600087803b15801561242957600080fd5b505af115801561243d573d6000803e3d6000fd5b505050506040513d602081101561245357600080fd5b5051600160a060020a038116600090815260098a01602052604090205490955060ff1615156124875761248785898d61249f565b6001909501946123a2565b5050505050505050505050565b60006124ab8285610adc565b600160a060020a03851660009081526009850160205260409020805460ff1916600117905560068401549091506124e990829063ffffffff61269d16565b6006840155600081111561264157600480840154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0388811694820194909452602481018590529051929091169163a9059cbb916044808201926020929091908290030181600087803b15801561256c57600080fd5b505af1158015612580573d6000803e3d6000fd5b505050506040513d602081101561259657600080fd5b505115156125ee576040805160e560020a62461bcd02815260206004820152601960248201527f556e61626c6520746f207472616e7366657220746f6b656e7300000000000000604482015290519081900360640190fd5b600483015460408051848152600160a060020a0392831660208201528082018490529051918616917ff5ffd235949c0ad2967ecb39d7f97e8e12a3bd81f6c62d6c92c61d2b61543a179181900360600190a25b50505050565b600082151561265857506000612670565b5081810281838281151561266857fe5b041461267057fe5b92915050565b6000818381151561268357fe5b049392505050565b60008282111561269757fe5b50900390565b8181018281101561267057fe5b60008183106126b957816126bb565b825b939250505056004449535452494255544500000000000000000000000000000000000000000000496e636f7272656374206469766964656e6420696e6465780000000000000000a165627a7a72305820323b94b923db7149176947dca9be55c1d5f15ed5a92795edb64c981c322316ed0029",
  "deployedBytecode": "0x6080604052600436106100d75763ffffffff60e060020a6000350416631613ec9d81146100dc57806330008b48146101265780634d58e413146101405780635bea0e1c1461019a5780635daff64e146101d05780635f7619a4146102385780636faa22a51461026457806377bbf28a1461029557806380fef5af146102bf578063814b3fe0146102d4578063aa8b76ea1461033d578063b84dfbd214610355578063c3a07df61461036a578063c45a01551461037f578063cf3b98b214610394578063d70afa96146103b4578063e1726faa146103c9575b600080fd5b3480156100e857600080fd5b506100f16103e7565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b34801561013257600080fd5b5061013e6004356103ec565b005b34801561014c57600080fd5b5060408051602060046024803582810135848102808701860190975280865261013e968435963696604495919490910192918291850190849080828437509497506106889650505050505050565b3480156101a657600080fd5b506101be600435600160a060020a0360243516610adc565b60408051918252519081900360200190f35b3480156101dc57600080fd5b506101e8600435610c53565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561022457818101518382015260200161020c565b505050509050019250505060405180910390f35b34801561024457600080fd5b50610250600435610d38565b604080519115158252519081900360200190f35b34801561027057600080fd5b50610279611077565b60408051600160a060020a039092168252519081900360200190f35b3480156102a157600080fd5b5061013e600435602435600160a060020a0360443516606435611086565b3480156102cb57600080fd5b506101be611591565b3480156102e057600080fd5b506102ec6004356115a3565b60408051998a5260208a0198909852888801969096526060880194909452600160a060020a03909216608087015260a086015260c085015260e0840152151561010083015251908190036101200190f35b34801561034957600080fd5b5061013e600435611609565b34801561036157600080fd5b506102796119da565b34801561037657600080fd5b506101e86119e9565b34801561038b57600080fd5b50610279611a3b565b61013e600435602435600160a060020a0360443516606435608435611a4a565b3480156103c057600080fd5b506101be611f27565b3480156103d557600080fd5b5061013e600435602435604435611f4b565b600090565b60035460009082908110610438576040805160e560020a62461bcd02815260206004820152601860248201526000805160206126e3833981519152604482015290519081900360640190fd5b600380548290811061044657fe5b90600052602060002090600a02016002015442101515156104d7576040805160e560020a62461bcd02815260206004820152602260248201527f4469766964656e64206d6174757269747920697320696e20746865206675747560448201527f7265000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60038054829081106104e557fe5b90600052602060002090600a0201600301544210151561054f576040805160e560020a62461bcd02815260206004820152601e60248201527f4469766964656e642065787069727920697320696e2074686520706173740000604482015290519081900360640190fd5b600380548290811061055d57fe5b600091825260209091206008600a90920201015460ff16156105ef576040805160e560020a62461bcd02815260206004820152602560248201527f4469766964656e6420686173206265656e207265636c61696d6564206279206960448201527f7373756572000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60038054849081106105fd57fe5b600091825260208083203384526009600a90930201918201905260409091205490925060ff1615610678576040805160e560020a62461bcd02815260206004820152601a60248201527f4469766964656e6420616c7265616479207265636c61696d6564000000000000604482015290519081900360640190fd5b61068333838561249f565b505050565b6000806000805160206126c3833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156106f057600080fd5b505af1158015610704573d6000803e3d6000fd5b505050506040513d602081101561071a57600080fd5b505160005433600160a060020a03928316811494509116149050818061073d5750805b806107e35750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b1580156107b657600080fd5b505af11580156107ca573d6000803e3d6000fd5b505050506040513d60208110156107e057600080fd5b50515b1515610839576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60035487908110610882576040805160e560020a62461bcd02815260206004820152601860248201526000805160206126e3833981519152604482015290519081900360640190fd5b600380548290811061089057fe5b90600052602060002090600a0201600201544210151515610921576040805160e560020a62461bcd02815260206004820152602260248201527f4469766964656e64206d6174757269747920697320696e20746865206675747560448201527f7265000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600380548290811061092f57fe5b90600052602060002090600a02016003015442101515610999576040805160e560020a62461bcd02815260206004820152601e60248201527f4469766964656e642065787069727920697320696e2074686520706173740000604482015290519081900360640190fd5b60038054829081106109a757fe5b600091825260209091206008600a90920201015460ff1615610a39576040805160e560020a62461bcd02815260206004820152602560248201527f4469766964656e6420686173206265656e207265636c61696d6564206279206960448201527f7373756572000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b6003805489908110610a4757fe5b90600052602060002090600a02019550600094505b8651851015610ad2578560090160008887815181101515610a7957fe5b6020908102909101810151600160a060020a031682528101919091526040016000205460ff161515610ac757610ac78786815181101515610ab657fe5b90602001906020020151878a61249f565b600190940193610a5c565b5050505050505050565b6000806000600385815481101515610af057fe5b60009182526020808320600160a060020a03881684526009600a90930201918201905260409091205490925060ff1615610b2d5760009250610c4b565b60015460038054600160a060020a0390921691634ee2cd7e91879189908110610b5257fe5b90600052602060002090600a0201600001546040518363ffffffff1660e060020a0281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015610bb657600080fd5b505af1158015610bca573d6000803e3d6000fd5b505050506040513d6020811015610be057600080fd5b505160038054919250610c489187908110610bf757fe5b90600052602060002090600a020160070154610c3c600388815481101515610c1b57fe5b90600052602060002090600a0201600501548461264790919063ffffffff16565b9063ffffffff61267616565b92505b505092915050565b606060008082815b600354831015610c9f5785600384815481101515610c7557fe5b90600052602060002090600a0201600001541415610c94576001909301925b600190920191610c5b565b83604051908082528060200260200182016040528015610cc9578160200160208202803883390190505b50915060009350600090505b600354811015610d2f5785600382815481101515610cef57fe5b90600052602060002090600a0201600001541415610d2757808285815181101515610d1657fe5b602090810290910101526001909301925b600101610cd5565b50949350505050565b60007f4645455f41444d494e0000000000000000000000000000000000000000000000600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015610db157600080fd5b505af1158015610dc5573d6000803e3d6000fd5b505050506040513d6020811015610ddb57600080fd5b505160005433600160a060020a039283168114945091161490508180610dfe5750805b80610ea45750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b158015610e7757600080fd5b505af1158015610e8b573d6000803e3d6000fd5b505050506040513d6020811015610ea157600080fd5b50515b1515610efa576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b60025460008054604080517f8da5cb5b0000000000000000000000000000000000000000000000000000000081529051600160a060020a03948516946323b872dd94309490911692638da5cb5b9260048083019360209383900390910190829087803b158015610f6957600080fd5b505af1158015610f7d573d6000803e3d6000fd5b505050506040513d6020811015610f9357600080fd5b50516040805160e060020a63ffffffff8616028152600160a060020a039384166004820152929091166024830152604482018990525160648083019260209291908290030181600087803b158015610fea57600080fd5b505af1158015610ffe573d6000803e3d6000fd5b505050506040513d602081101561101457600080fd5b5051151561106c576040805160e560020a62461bcd02815260206004820152601260248201527f556e61626c6520746f2074616b65206665650000000000000000000000000000604482015290519081900360640190fd5b506001949350505050565b600254600160a060020a031681565b6000806000600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b1580156110de57600080fd5b505af11580156110f2573d6000803e3d6000fd5b505050506040513d602081101561110857600080fd5b5051600160a060020a03163314611169576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b86861161117557600080fd5b42861161118157600080fd5b600160a060020a038516151561119657600080fd5b600084116111a357600080fd5b604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a038716916323b872dd9160648083019260209291908290030181600087803b15801561121157600080fd5b505af1158015611225573d6000803e3d6000fd5b505050506040513d602081101561123b57600080fd5b505115156112b9576040805160e560020a62461bcd02815260206004820152602660248201527f556e61626c6520746f207472616e7366657220746f6b656e7320666f7220646960448201527f766964656e640000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600354600154604080517fff0b9c900000000000000000000000000000000000000000000000000000000081529051929550600160a060020a039091169163ff0b9c90916004808201926020929091908290030181600087803b15801561131f57600080fd5b505af1158015611333573d6000803e3d6000fd5b505050506040513d602081101561134957600080fd5b5051600154604080517f18160ddd0000000000000000000000000000000000000000000000000000000081529051929450600160a060020a03909116916318160ddd916004808201926020929091908290030181600087803b1580156113ae57600080fd5b505af11580156113c2573d6000803e3d6000fd5b505050506040513d60208110156113d857600080fd5b8101908080519060200190929190505050905060036101206040519081016040528084815260200142815260200189815260200188815260200187600160a060020a0316815260200186815260200160008152602001838152602001600015158152509080600181540180825580915050906001820390600052602060002090600a0201600090919290919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a815481600160a060020a030219169083600160a060020a0316021790555060a0820151816005015560c0820151816006015560e082015181600701556101008201518160080160006101000a81548160ff02191690831515021790555050505033600160a060020a03167fb5d843cebbb7595af0860a94ddef15ce747f966392b0ab3705d48c5c08cf0c5583428a8a8a8a888b6040518089815260200188815260200187815260200186815260200185600160a060020a0316600160a060020a031681526020018481526020018381526020018281526020019850505050505050505060405180910390a250505050505050565b6000805160206126c383398151915281565b60038054829081106115b157fe5b60009182526020909120600a9091020180546001820154600283015460038401546004850154600586015460068701546007880154600890980154969850949693959294600160a060020a0390921693909260ff1689565b600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561165f57600080fd5b505af1158015611673573d6000803e3d6000fd5b505050506040513d602081101561168957600080fd5b5051600160a060020a031633146116ea576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b6003548310611731576040805160e560020a62461bcd02815260206004820152601860248201526000805160206126e3833981519152604482015290519081900360640190fd5b600380548490811061173f57fe5b90600052602060002090600a02016003015442101515156117aa576040805160e560020a62461bcd02815260206004820181905260248201527f4469766964656e642065787069727920697320696e2074686520667574757265604482015290519081900360640190fd5b60038054849081106117b857fe5b600091825260209091206008600a90920201015460ff1615611824576040805160e560020a62461bcd02815260206004820152601860248201527f4469766964656e6420616c726561647920636c61696d65640000000000000000604482015290519081900360640190fd5b600160038481548110151561183557fe5b60009182526020909120600a90910201600801805460ff1916911515919091179055600380548490811061186557fe5b90600052602060002090600a020191506118908260060154836005015461268b90919063ffffffff16565b600480840154604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233938101939093526024830184905251929350600160a060020a03169163a9059cbb916044808201926020929091908290030181600087803b15801561190257600080fd5b505af1158015611916573d6000803e3d6000fd5b505050506040513d602081101561192c57600080fd5b50511515611984576040805160e560020a62461bcd02815260206004820152601960248201527f556e61626c6520746f207472616e7366657220746f6b656e7300000000000000604482015290519081900360640190fd5b600482015460408051858152600160a060020a039290921660208301528181018390525133917f9766d0325a2a3c017f6cf974bfd1bd0b26e705570ce8250fe5e078a3e832d52d919081900360600190a2505050565b600154600160a060020a031681565b604080516001808252818301909252606091829190602080830190803883390190505090506000805160206126c3833981519152816000815181101515611a2c57fe5b60209081029091010152905090565b600054600160a060020a031681565b600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611aa057600080fd5b505af1158015611ab4573d6000803e3d6000fd5b505050506040513d6020811015611aca57600080fd5b5051600160a060020a03163314611b2b576040805160e560020a62461bcd02815260206004820152601360248201527f53656e646572206973206e6f74206f776e657200000000000000000000000000604482015290519081900360640190fd5b868611611b3757600080fd5b428611611b4357600080fd5b600160009054906101000a9004600160a060020a0316600160a060020a0316635488cc806040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611b9657600080fd5b505af1158015611baa573d6000803e3d6000fd5b505050506040513d6020811015611bc057600080fd5b5051831115611bce57600080fd5b600354600154604080517f981b24d0000000000000000000000000000000000000000000000000000000008152600481018790529051929450600160a060020a039091169163981b24d0916024808201926020929091908290030181600087803b158015611c3b57600080fd5b505af1158015611c4f573d6000803e3d6000fd5b505050506040513d6020811015611c6557600080fd5b5051604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018790529051919250600160a060020a038716916323b872dd916064808201926020929091908290030181600087803b158015611cd957600080fd5b505af1158015611ced573d6000803e3d6000fd5b505050506040513d6020811015611d0357600080fd5b50511515611d81576040805160e560020a62461bcd02815260206004820152602660248201527f556e61626c6520746f207472616e7366657220746f6b656e7320666f7220646960448201527f766964656e640000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60036101206040519081016040528085815260200142815260200189815260200188815260200187600160a060020a0316815260200186815260200160008152602001838152602001600015158152509080600181540180825580915050906001820390600052602060002090600a0201600090919290919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a815481600160a060020a030219169083600160a060020a0316021790555060a0820151816005015560c0820151816006015560e082015181600701556101008201518160080160006101000a81548160ff02191690831515021790555050505033600160a060020a03167fb5d843cebbb7595af0860a94ddef15ce747f966392b0ab3705d48c5c08cf0c5584428a8a8a8a888a6040518089815260200188815260200187815260200186815260200185600160a060020a0316600160a060020a031681526020018481526020018381526020018281526020019850505050505050505060405180910390a250505050505050565b7f4645455f41444d494e000000000000000000000000000000000000000000000081565b6000806000806000805160206126c3833981519152600080600160009054906101000a9004600160a060020a0316600160a060020a0316638da5cb5b6040518163ffffffff1660e060020a028152600401602060405180830381600087803b158015611fb657600080fd5b505af1158015611fca573d6000803e3d6000fd5b505050506040513d6020811015611fe057600080fd5b505160005433600160a060020a0392831681149450911614905081806120035750805b806120a95750600154604080517f8658b8b9000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051600160a060020a0390921691638658b8b9916064808201926020929091908290030181600087803b15801561207c57600080fd5b505af1158015612090573d6000803e3d6000fd5b505050506040513d60208110156120a657600080fd5b50515b15156120ff576040805160e560020a62461bcd02815260206004820152601760248201527f5065726d697373696f6e20636865636b206661696c6564000000000000000000604482015290519081900360640190fd5b6003548a908110612148576040805160e560020a62461bcd02815260206004820152601860248201526000805160206126e3833981519152604482015290519081900360640190fd5b600380548290811061215657fe5b90600052602060002090600a02016002015442101515156121e7576040805160e560020a62461bcd02815260206004820152602260248201527f4469766964656e64206d6174757269747920697320696e20746865206675747560448201527f7265000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b60038054829081106121f557fe5b90600052602060002090600a0201600301544210151561225f576040805160e560020a62461bcd02815260206004820152601e60248201527f4469766964656e642065787069727920697320696e2074686520706173740000604482015290519081900360640190fd5b600380548290811061226d57fe5b600091825260209091206008600a90920201015460ff16156122ff576040805160e560020a62461bcd02815260206004820152602560248201527f4469766964656e6420686173206265656e207265636c61696d6564206279206960448201527f7373756572000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600380548c90811061230d57fe5b90600052602060002090600a02019750600160009054906101000a9004600160a060020a0316600160a060020a031663e3cc65e26040518163ffffffff1660e060020a028152600401602060405180830381600087803b15801561237057600080fd5b505af1158015612384573d6000803e3d6000fd5b505050506040513d602081101561239a57600080fd5b505196508995505b6123bb876123b68c8c63ffffffff61269d16565b6126aa565b86101561249257600154604080517f3feb5f2b000000000000000000000000000000000000000000000000000000008152600481018990529051600160a060020a0390921691633feb5f2b916024808201926020929091908290030181600087803b15801561242957600080fd5b505af115801561243d573d6000803e3d6000fd5b505050506040513d602081101561245357600080fd5b5051600160a060020a038116600090815260098a01602052604090205490955060ff1615156124875761248785898d61249f565b6001909501946123a2565b5050505050505050505050565b60006124ab8285610adc565b600160a060020a03851660009081526009850160205260409020805460ff1916600117905560068401549091506124e990829063ffffffff61269d16565b6006840155600081111561264157600480840154604080517fa9059cbb000000000000000000000000000000000000000000000000000000008152600160a060020a0388811694820194909452602481018590529051929091169163a9059cbb916044808201926020929091908290030181600087803b15801561256c57600080fd5b505af1158015612580573d6000803e3d6000fd5b505050506040513d602081101561259657600080fd5b505115156125ee576040805160e560020a62461bcd02815260206004820152601960248201527f556e61626c6520746f207472616e7366657220746f6b656e7300000000000000604482015290519081900360640190fd5b600483015460408051848152600160a060020a0392831660208201528082018490529051918616917ff5ffd235949c0ad2967ecb39d7f97e8e12a3bd81f6c62d6c92c61d2b61543a179181900360600190a25b50505050565b600082151561265857506000612670565b5081810281838281151561266857fe5b041461267057fe5b92915050565b6000818381151561268357fe5b049392505050565b60008282111561269757fe5b50900390565b8181018281101561267057fe5b60008183106126b957816126bb565b825b939250505056004449535452494255544500000000000000000000000000000000000000000000496e636f7272656374206469766964656e6420696e6465780000000000000000a165627a7a72305820323b94b923db7149176947dca9be55c1d5f15ed5a92795edb64c981c322316ed0029",
  "sourceMap": "739:10499:29:-;;;2795:119;8:9:-1;5:2;;;30:1;27;20:12;5:2;2795:119:29;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;739:10499:29;;;;;;",
  "deployedSourceMap": "739:10499:29:-;;;;;;;;-1:-1:-1;;;739:10499:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3057:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3057:89:29;;;;;;;;;;;;;;;;;;;;;;;7588:307;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;7588:307:29;;;;;;;6138:412;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6138:412:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6138:412:29;;-1:-1:-1;6138:412:29;;-1:-1:-1;;;;;;;6138:412:29;9719:460;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9719:460:29;;;;;-1:-1:-1;;;;;9719:460:29;;;;;;;;;;;;;;;;;;;10335:582;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10335:582:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;10335:582:29;;;;;;;;;;;;;;;;;1890:223:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1890:223:13;;;;;;;;;;;;;;;;;;;;;;;365:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;365:22:13;;;;;;;;-1:-1:-1;;;;;365:22:13;;;;;;;;;;;;;;3535:977:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;3535:977:29;;;;;;;-1:-1:-1;;;;;3535:977:29;;;;;826:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;826:49:29;;;;1710:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;1710:27:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1710:27:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8792:729;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8792:729:29;;;;;276:28:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;276:28:13;;;;11040:195:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11040:195:29;;;;247:22:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;247:22:13;;;;4969:976:29;;;;;;;;-1:-1:-1;;;;;4969:976:29;;;;;;;311:47:13;;8:9:-1;5:2;;;30:1;27;20:12;5:2;311:47:13;;;;6855:611:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6855:611:29;;;;;;;;;3057:89;3105:6;3057:89;:::o;7588:307::-;2287:9;:16;7697:25;;7667:14;;2270:33;;2262:70;;;;;-1:-1:-1;;;;;2262:70:29;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;2262:70:29;;;;;;;;;;;;;;;2357:9;:25;;2367:14;;2357:25;;;;;;;;;;;;;;;;:34;;;2350:3;:41;;2342:88;;;;;;;-1:-1:-1;;;;;2342:88:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2454:9;:25;;2464:14;;2454:25;;;;;;;;;;;;;;;;:32;;;2448:3;:38;2440:81;;;;;;;-1:-1:-1;;;;;2440:81:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;2540:9;:25;;2550:14;;2540:25;;;;;;;;;;;;;;:35;:25;;;;;:35;;;;2539:36;2531:86;;;;;-1:-1:-1;;;;;2531:86:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7725:9;:25;;7735:14;;7725:25;;;;;;;;;;;;;;7786:10;7769:28;;:16;7725:25;;;;;7769:16;;;:28;;;;;;;7725:25;;-1:-1:-1;7769:28:29;;7768:29;7760:68;;;;;-1:-1:-1;;;;;7760:68:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;7838:50;7851:10;7863:8;7873:14;7838:12;:50::i;:::-;7588:307;;;:::o;6138:412::-;6294:25;6362:9;-1:-1:-1;;;;;;;;;;;1029:13:13;;1014:37;;;-1:-1:-1;;;;;1014:37:13;;;;-1:-1:-1;;;;;;;;;1029:13:13;;;;1014:35;;:37;;;;;;;;;;;;;;;-1:-1:-1;1029:13: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;;;;;;;;;;;;;;;;;;;;;;;;;;;;2287:9:29;:16;6268:14;;2270:33;;2262:70;;;;;-1:-1:-1;;;;;2262:70:29;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;2262:70:29;;;;;;;;;;;;;;;2357:9;:25;;2367:14;;2357:25;;;;;;;;;;;;;;;;:34;;;2350:3;:41;;2342:88;;;;;;;-1:-1:-1;;;;;2342:88:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2454:9;:25;;2464:14;;2454:25;;;;;;;;;;;;;;;;:32;;;2448:3;:38;2440:81;;;;;;;-1:-1:-1;;;;;2440:81:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;2540:9;:25;;2550:14;;2540:25;;;;;;;;;;;;;;:35;:25;;;;;:35;;;;2539:36;2531:86;;;;;-1:-1:-1;;;;;2531:86:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6322:9;:25;;6332:14;;6322:25;;;;;;;;;;;;;;;;6294:53;;6374:1;6362:13;;6357:187;6381:7;:14;6377:1;:18;6357:187;;;6421:8;:16;;:28;6438:7;6446:1;6438:10;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6421:28:29;;;;;;;;;;;-1:-1:-1;6421:28:29;;;;6420:29;6416:118;;;6469:50;6482:7;6490:1;6482:10;;;;;;;;;;;;;;;;;;6494:8;6504:14;6469:12;:50::i;:::-;6397:3;;;;;6357:187;;;1254:1:13;6138:412:29;;;;;;;:::o;9719:460::-;9806:7;9825:25;9960:15;9853:9;9863:14;9853:25;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9892:24:29;;;;:16;9853:25;;;;;;9892:16;;;:24;;;;;;;9853:25;;-1:-1:-1;9892:24:29;;9888:63;;;9939:1;9932:8;;;;9888:63;9993:13;;10028:9;:25;;-1:-1:-1;;;;;9993:13:29;;;;9978:41;;10020:6;;10038:14;;10028:25;;;;;;;;;;;;;;;;;;;;;:38;9978:89;;;-1:-1:-1;;;9978:89:29;;;;;;-1:-1:-1;;;;;9978:89:29;;;;;;;;;;;;;;;;;;;;10028:25;;9978:89;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;9978:89:29;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9978:89:29;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9978:89:29;10134:9;:25;;9978:89;;-1:-1:-1;10084:88:29;;10144:14;;10134:25;;;;;;;;;;;;;;;;:37;;;10084:45;10096:9;10106:14;10096:25;;;;;;;;;;;;;;;;;;;;:32;;;10084:7;:11;;:45;;;;:::i;:::-;:49;:88;:49;:88;:::i;:::-;10077:95;;9719:460;;;;;;;:::o;10335:582::-;10404:9;10425:15;;10404:9;10425:15;10454:160;10477:9;:16;10473:20;;10454:160;;;10547:13;10518:9;10528:1;10518:12;;;;;;;;;;;;;;;;;;;;:25;;;:42;10514:90;;;10580:9;;;;;10514:90;10495:3;;;;;10454:160;;;10662:7;10648:22;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;136:17;;-1:-1;10648:22:29;;10623:47;;10689:1;10679:11;;10715:1;10703:13;;10699:191;10722:9;:16;10718:20;;10699:191;;;10791:13;10762:9;10772:1;10762:12;;;;;;;;;;;;;;;;;;;;:25;;;:42;10758:123;;;10840:1;10823:5;10829:7;10823:14;;;;;;;;;;;;;;;;;;:18;10858:9;;;;;10758:123;10740:3;;10699:191;;;-1:-1:-1;10905:5:29;10335:582;-1:-1:-1;;;;10335:582:29: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;365:22::-;;;-1:-1:-1;;;;;365:22:13;;:::o;3535:977:29:-;1334:13:13;;1319:37;;;-1:-1:-1;;;;;1319:37:13;;;;3917:21:29;;;;;;-1:-1:-1;;;;;1334:13:13;;;;1319:35;;:37;;;;;;;;;;;;;;;3917:21:29;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;3663:19:29;;;3655:28;;;;;;3711:3;3701:13;;3693:22;;;;;;-1:-1:-1;;;;;3733:20:29;;;;3725:29;;;;;;3782:1;3772:11;;3764:20;;;;;;3802:62;;;;;;3829:10;3802:62;;;;3849:4;3802:62;;;;;;;;;;;;-1:-1:-1;;;;;3802:26:29;;;;;:62;;;;;;;;;;;;;;-1:-1:-1;3802:26:29;:62;;;5:2:-1;;;;30:1;27;20:12;5:2;3802:62:29;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3802:62:29;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3802:62:29;3794:113;;;;;;;-1:-1:-1;;;;;3794:113:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3941:9;:16;4005:13;;3990:48;;;;;;;;3941:16;;-1:-1:-1;;;;;;4005:13:29;;;;3990:46;;:48;;;;;;;;;;;;;;;4005:13;;3990:48;;;5:2:-1;;;;30:1;27;20:12;5:2;3990:48:29;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3990:48:29;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3990:48:29;4087:13;;4072:43;;;;;;;;3990:48;;-1:-1:-1;;;;;;4087:13:29;;;;4072:41;;:43;;;;;3990:48;;4072:43;;;;;;;;4087:13;;4072:43;;;5:2:-1;;;;30:1;27;20:12;5:2;4072:43:29;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4072:43:29;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4072:43:29;;;;;;;;;;;;;;;;4048:67;;4125:9;4151:209;;;;;;;;;4173:12;4151:209;;;;4199:3;4151:209;;;;4216:9;4151:209;;;;4239:7;4151:209;;;;4260:6;-1:-1:-1;;;;;4151:209:29;;;;;4280:7;4151:209;;;;4301:1;4151:209;;;;4316:13;4151:209;;;;4343:5;4151:209;;;;;4125:245;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;4125:245:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4125:245:29;;;;;-1:-1:-1;;;;;4125:245:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4408:10;-1:-1:-1;;;;;4385:120:29;;4420:12;4434:3;4439:9;4450:7;4459:6;4467:7;4476:13;4491;4385:120;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4385:120:29;-1:-1:-1;;;;;4385:120:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3535:977;;;;;;;:::o;826:49::-;-1:-1:-1;;;;;;;;;;;826:49:29;:::o;1710:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1710:27:29;;;;;;-1:-1:-1;;;;;1710:27:29;;;;;;;;;:::o;8792:729::-;1334:13:13;;1319:37;;;-1:-1:-1;;;;;1319:37:13;;;;9177:25:29;;;;-1:-1:-1;;;;;1334:13:13;;;;1319:35;;:37;;;;;;;;;;;;;;;9177:25:29;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;8893:9:29;:16;8876:33;;8868:70;;;;;-1:-1:-1;;;;;8868:70:29;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;8868:70:29;;;;;;;;;;;;;;;8963:9;:25;;8973:14;;8963:25;;;;;;;;;;;;;;;;:32;;;8956:3;:39;;8948:84;;;;;;;-1:-1:-1;;;;;8948:84:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9051:9;:25;;9061:14;;9051:25;;;;;;;;;;;;;;:35;:25;;;;;:35;;;;9050:36;9042:73;;;;;-1:-1:-1;;;;;9042:73:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;9163:4;9125:9;9135:14;9125:25;;;;;;;;;;;;;;;;;;;;;;;:35;;:42;;-1:-1:-1;;9125:42:29;;;;;;;;;;9205:9;:25;;9215:14;;9205:25;;;;;;;;;;;;;;;;9177:53;;9266:43;9286:8;:22;;;9266:8;:15;;;:19;;:43;;;;:::i;:::-;9333:14;;;;;9327:59;;;;;;9358:10;9327:59;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;9333:14:29;;9327:30;;:59;;;;;;;;;;;;;;;-1:-1:-1;9333:14:29;9327:59;;;5:2:-1;;;;30:1;27;20:12;5:2;9327:59:29;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9327:59:29;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9327:59:29;9319:97;;;;;;;-1:-1:-1;;;;;9319:97:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;9482:14;;;;9431:83;;;;;;-1:-1:-1;;;;;9482:14:29;;;9431:83;;;;;;;;;;;9454:10;;9431:83;;;;;;;;;;8792:729;;;:::o;276:28:13:-;;;-1:-1:-1;;;;;276:28:13;;:::o;11040:195:29:-;11141:16;;;11155:1;11141:16;;;;;;;;;11086:9;;;;11141:16;;;;;;;105:10:-1;11141:16:29;88:34:-1;136:17;;-1:-1;11141:16:29;11107:50;;-1:-1:-1;;;;;;;;;;;11167:14:29;11182:1;11167:17;;;;;;;;;;;;;;;;;;:30;11214:14;-1:-1:-1;11040:195:29;:::o;247:22:13:-;;;-1:-1:-1;;;;;247:22:13;;:::o;4969:976:29:-;1334:13:13;;1319:37;;;-1:-1:-1;;;;;1319:37:13;;;;5291:21:29;;;;-1:-1:-1;;;;;1334:13:13;;;;1319:35;;:37;;;;;;;;;;;;;;;5291:21:29;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;5142:19:29;;;5134:28;;;;;;5190:3;5180:13;;5172:22;;;;;;5244:13;;5229:51;;;;;;;;-1:-1:-1;;;;;5244:13:29;;;;5229:49;;:51;;;;;;;;;;;;;;;5244:13;;5229:51;;;5:2:-1;;;;30:1;27;20:12;5:2;5229:51:29;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5229:51:29;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5229:51:29;5212:68;;;5204:77;;;;;;5315:9;:16;5380:13;;5365:58;;;;;;;;;;;;;;5315:16;;-1:-1:-1;;;;;;5380:13:29;;;;5365:43;;:58;;;;;;;;;;;;;;;-1:-1:-1;5380:13:29;5365:58;;;5:2:-1;;;;30:1;27;20:12;5:2;5365:58:29;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5365:58:29;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5365:58:29;5441:62;;;;;;5468:10;5441:62;;;;5488:4;5441:62;;;;;;;;;;;;5365:58;;-1:-1:-1;;;;;;5441:26:29;;;;;:62;;;;;5365:58;;5441:62;;;;;;;;-1:-1:-1;5441:26:29;:62;;;5:2:-1;;;;30:1;27;20:12;5:2;5441:62:29;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5441:62:29;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5441:62:29;5433:113;;;;;;;-1:-1:-1;;;;;5433:113:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5556:9;5582:210;;;;;;;;;5604:13;5582:210;;;;5631:3;5582:210;;;;5648:9;5582:210;;;;5671:7;5582:210;;;;5692:6;-1:-1:-1;;;;;5582:210:29;;;;;5712:7;5582:210;;;;5733:1;5582:210;;;;5748:13;5582:210;;;;5775:5;5582:210;;;;;5556:246;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;5556:246:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5556:246:29;;;;;-1:-1:-1;;;;;5556:246:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5840:10;-1:-1:-1;;;;;5817:121:29;;5852:13;5867:3;5872:9;5883:7;5892:6;5900:7;5909:13;5924;5817:121;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5817:121:29;-1:-1:-1;;;;;5817:121:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4969:976;;;;;;;:::o;311:47:13:-;;;:::o;6855:611:29:-;7018:25;7081:23;7172:9;7270:13;-1:-1:-1;;;;;;;;;;;1029:13:13;;1014:37;;;-1:-1:-1;;;;;1014:37:13;;;;-1:-1:-1;;;;;;;;;1029:13:13;;;;1014:35;;:37;;;;;;;;;;;;;;;-1:-1:-1;1029:13: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;;;;;;;;;;;;;;;;;;;;;;;;;;;;2287:9:29;:16;6992:14;;2270:33;;2262:70;;;;;-1:-1:-1;;;;;2262:70:29;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;2262:70:29;;;;;;;;;;;;;;;2357:9;:25;;2367:14;;2357:25;;;;;;;;;;;;;;;;:34;;;2350:3;:41;;2342:88;;;;;;;-1:-1:-1;;;;;2342:88:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2454:9;:25;;2464:14;;2454:25;;;;;;;;;;;;;;;;:32;;;2448:3;:38;2440:81;;;;;;;-1:-1:-1;;;;;2440:81:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;2540:9;:25;;2550:14;;2540:25;;;;;;;;;;;;;;:35;:25;;;;;:35;;;;2539:36;2531:86;;;;;-1:-1:-1;;;;;2531:86:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7046:9;:25;;7056:14;;7046:25;;;;;;;;;;;;;;7122:13;;7107:50;;;;;;;;7046:25;;;;;;;;-1:-1:-1;;;;;;7122:13:29;;7107:48;;:50;;;;;7046:25;7107:50;;;;;;;;;;7122:13;7107:50;;;5:2:-1;;;;30:1;27;20:12;5:2;7107:50:29;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7107:50:29;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7107:50:29;;-1:-1:-1;7184:6:29;;-1:-1:-1;7167:293:29;7196:53;7208:15;7225:23;:6;7236:11;7225:23;:10;:23;:::i;:::-;7196:11;:53::i;:::-;7192:1;:57;7167:293;;;7301:13;;7286:42;;;;;;;;;;;;;;-1:-1:-1;;;;;7301:13:29;;;;7286:39;;:42;;;;;;;;;;;;;;;-1:-1:-1;7301:13:29;7286:42;;;5:2:-1;;;;30:1;27;20:12;5:2;7286:42:29;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7286:42:29;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7286:42:29;-1:-1:-1;;;;;7347:23:29;;;;;;:16;;;7286:42;7347:23;;;;;7286:42;;-1:-1:-1;7347:23:29;;7346:24;7342:108;;;7390:45;7403:5;7410:8;7420:14;7390:12;:45::i;:::-;7251:3;;;;;7167:293;;;1254:1:13;6855:611:29;;;;;;;;;;:::o;8122:505::-;8231:13;8247:41;8265:14;8281:6;8247:17;:41::i;:::-;-1:-1:-1;;;;;8298:25:29;;;;;;:17;;;:25;;;;;:32;;-1:-1:-1;;8298:32:29;-1:-1:-1;8298:32:29;;;8376:23;;;;8231:57;;-1:-1:-1;8366:34:29;;8231:57;;8366:9;:34::i;:::-;8340:23;;;:60;8422:1;8414:9;;8410:211;;;8453:15;;;;;8447:46;;;;;;-1:-1:-1;;;;;8447:46:29;;;;;;;;;;;;;;;;;;8453:15;;;;;8447:31;;:46;;;;;;;;;;;;;;;-1:-1:-1;8453:15:29;8447:46;;;5:2:-1;;;;30:1;27;20:12;5:2;8447:46:29;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8447:46:29;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8447:46:29;8439:84;;;;;;;-1:-1:-1;;;;;8439:84:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;8587:15;;;;8542:68;;;;;;-1:-1:-1;;;;;8587:15:29;;;8542:68;;;;;;;;;;;;;;;;;;;;;;;;;8410:211;8122:505;;;;:::o;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;;;;203:373;;;;:::o;658:272::-;716:7;924:1;920;:5;;;;;;;;;658:272;-1:-1:-1;;;658:272:63:o;1042:110::-;1100:7;1122:6;;;;1115:14;;;;-1:-1:-1;1142:5:63;;;1042:110::o;1214:123::-;1293:5;;;1311:6;;;;1304:14;;;409:101:62;470:7;496:1;492;:5;:13;;504:1;492:13;;;500:1;492:13;485:20;409:101;-1:-1:-1;;;409:101:62:o",
  "source": "pragma solidity ^0.4.24;\n\nimport \"./ICheckpoint.sol\";\nimport \"../../interfaces/ISecurityToken.sol\";\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\nimport \"openzeppelin-solidity/contracts/math/Math.sol\";\nimport \"openzeppelin-solidity/contracts/token/ERC20/ERC20.sol\";\n\n/////////////////////\n// Module permissions\n/////////////////////\n//                                        Owner       DISTRIBUTE\n// pushDividendPaymentToAddresses           X               X\n// pushDividendPayment                      X               X\n// createDividend                           X\n// createDividendWithCheckpoint             X\n// reclaimDividend                          X\n\n/**\n * @title Checkpoint module for issuing ERC20 dividends\n */\ncontract ERC20DividendCheckpoint is ICheckpoint {\n    using SafeMath for uint256;\n\n    bytes32 public constant DISTRIBUTE = \"DISTRIBUTE\";\n\n    struct Dividend {\n      uint256 checkpointId;\n      uint256 created; // Time at which the dividend was created\n      uint256 maturity; // Time after which dividend can be claimed - set to 0 to bypass\n      uint256 expiry;  // Time until which dividend can be claimed - after this time any remaining amount can be withdrawn by issuer - set to very high value to bypass\n      address token; // Address of ERC20 token that dividend is denominated in\n      uint256 amount; // Dividend amount in base token amounts\n      uint256 claimedAmount; // Amount of dividend claimed so far\n      uint256 totalSupply; // Total supply at the associated checkpoint (avoids recalculating this)\n      bool reclaimed;\n      mapping (address => bool) claimed; // List of addresses which have claimed dividend\n    }\n\n    // List of all dividends\n    Dividend[] public dividends;\n\n    event ERC20DividendDeposited(address indexed _depositor, uint256 _checkpointId, uint256 _created, uint256 _maturity, uint256 _expiry, address _token, uint256 _amount, uint256 _totalSupply, uint256 _dividendIndex);\n    event ERC20DividendClaimed(address indexed _payee, uint256 _dividendIndex, address _token, uint256 _amount);\n    event ERC20DividendReclaimed(address indexed _claimer, uint256 _dividendIndex, address _token, uint256 _claimedAmount);\n\n    modifier validDividendIndex(uint256 _dividendIndex) {\n        require(_dividendIndex < dividends.length, \"Incorrect dividend index\");\n        require(now >= dividends[_dividendIndex].maturity, \"Dividend maturity is in the future\");\n        require(now < dividends[_dividendIndex].expiry, \"Dividend expiry is in the past\");\n        require(!dividends[_dividendIndex].reclaimed, \"Dividend has been reclaimed by issuer\");\n        _;\n    }\n\n    /**\n     * @notice Constructor\n     * @param _securityToken Address of the security token\n     * @param _polyAddress Address of the polytoken\n     */\n    constructor (address _securityToken, address _polyAddress) public\n    IModule(_securityToken, _polyAddress)\n    {\n    }\n\n    /**\n    * @notice Init function i.e generalise function to maintain the structure of the module contract\n    * @return bytes4\n    */\n    function getInitFunction() public pure returns (bytes4) {\n        return bytes4(0);\n    }\n\n    /**\n     * @notice Creates a dividend and checkpoint for the dividend\n     * @param _maturity Time from which dividend can be paid\n     * @param _expiry Time until dividend can no longer be paid, and can be reclaimed by issuer\n     * @param _token Address of ERC20 token in which dividend is to be denominated\n     * @param _amount Amount of specified token for dividend\n     */\n    function createDividend(uint256 _maturity, uint256 _expiry, address _token, uint256 _amount) public onlyOwner {\n        require(_expiry > _maturity);\n        require(_expiry > now);\n        require(_token != address(0));\n        require(_amount > 0);\n        require(ERC20(_token).transferFrom(msg.sender, address(this), _amount), \"Unable to transfer tokens for dividend\");\n        uint256 dividendIndex = dividends.length;\n        uint256 checkpointId = ISecurityToken(securityToken).createCheckpoint();\n        uint256 currentSupply = ISecurityToken(securityToken).totalSupply();\n        dividends.push(\n          Dividend(\n            checkpointId,\n            now,\n            _maturity,\n            _expiry,\n            _token,\n            _amount,\n            0,\n            currentSupply,\n            false\n          )\n        );\n        emit ERC20DividendDeposited(msg.sender, checkpointId, now, _maturity, _expiry, _token, _amount, currentSupply, dividendIndex);\n    }\n\n    /**\n     * @notice Creates a dividend with a provided checkpoint\n     * @param _maturity Time from which dividend can be paid\n     * @param _expiry Time until dividend can no longer be paid, and can be reclaimed by issuer\n     * @param _token Address of ERC20 token in which dividend is to be denominated\n     * @param _amount Amount of specified token for dividend\n     * @param _checkpointId Checkpoint id from which to create dividends\n     */\n    function createDividendWithCheckpoint(uint256 _maturity, uint256 _expiry, address _token, uint256 _amount, uint256 _checkpointId) payable public onlyOwner {\n        require(_expiry > _maturity);\n        require(_expiry > now);\n        require(_checkpointId <= ISecurityToken(securityToken).currentCheckpointId());\n        uint256 dividendIndex = dividends.length;\n        uint256 currentSupply = ISecurityToken(securityToken).totalSupplyAt(_checkpointId);\n        require(ERC20(_token).transferFrom(msg.sender, address(this), _amount), \"Unable to transfer tokens for dividend\");\n        dividends.push(\n          Dividend(\n            _checkpointId,\n            now,\n            _maturity,\n            _expiry,\n            _token,\n            _amount,\n            0,\n            currentSupply,\n            false\n          )\n        );\n        emit ERC20DividendDeposited(msg.sender, _checkpointId, now, _maturity, _expiry, _token, _amount, currentSupply, dividendIndex);\n    }\n\n    /**\n     * @notice Issuer can push dividends to provided addresses\n     * @param _dividendIndex Dividend to push\n     * @param _payees Addresses to which to push the dividend\n     */\n    function pushDividendPaymentToAddresses(uint256 _dividendIndex, address[] _payees) public withPerm(DISTRIBUTE) validDividendIndex(_dividendIndex) {\n        Dividend storage dividend = dividends[_dividendIndex];\n        for (uint256 i = 0; i < _payees.length; i++) {\n            if (!dividend.claimed[_payees[i]]) {\n                _payDividend(_payees[i], dividend, _dividendIndex);\n            }\n        }\n    }\n\n    /**\n     * @notice Issuer can push dividends using the investor list from the security token\n     * @param _dividendIndex Dividend to push\n     * @param _start Index in investor list at which to start pushing dividends\n     * @param _iterations Number of addresses to push dividends for\n     */\n    function pushDividendPayment(uint256 _dividendIndex, uint256 _start, uint256 _iterations) public withPerm(DISTRIBUTE) validDividendIndex(_dividendIndex) {\n        Dividend storage dividend = dividends[_dividendIndex];\n        uint256 numberInvestors = ISecurityToken(securityToken).getInvestorsLength();\n        for (uint256 i = _start; i < Math.min256(numberInvestors, _start.add(_iterations)); i++) {\n            address payee = ISecurityToken(securityToken).investors(i);\n            if (!dividend.claimed[payee]) {\n                _payDividend(payee, dividend, _dividendIndex);\n            }\n        }\n    }\n\n    /**\n     * @notice Investors can pull their own dividends\n     * @param _dividendIndex Dividend to pull\n     */\n    function pullDividendPayment(uint256 _dividendIndex) public validDividendIndex(_dividendIndex)\n    {\n        Dividend storage dividend = dividends[_dividendIndex];\n        require(!dividend.claimed[msg.sender], \"Dividend already reclaimed\");\n        _payDividend(msg.sender, dividend, _dividendIndex);\n    }\n\n    /**\n     * @notice Internal function for paying dividends\n     * @param _payee address of investor\n     * @param _dividend storage with previously issued dividends\n     * @param _dividendIndex Dividend to pay\n     */\n    function _payDividend(address _payee, Dividend storage _dividend, uint256 _dividendIndex) internal {\n        uint256 claim = calculateDividend(_dividendIndex, _payee);\n        _dividend.claimed[_payee] = true;\n        _dividend.claimedAmount = claim.add(_dividend.claimedAmount);\n        if (claim > 0) {\n            require(ERC20(_dividend.token).transfer(_payee, claim), \"Unable to transfer tokens\");\n            emit ERC20DividendClaimed(_payee, _dividendIndex, _dividend.token, claim);\n        }\n    }\n\n    /**\n     * @notice Issuer can reclaim remaining unclaimed dividend amounts, for expired dividends\n     * @param _dividendIndex Dividend to reclaim\n     */\n    function reclaimDividend(uint256 _dividendIndex) public onlyOwner {\n        require(_dividendIndex < dividends.length, \"Incorrect dividend index\");\n        require(now >= dividends[_dividendIndex].expiry, \"Dividend expiry is in the future\");\n        require(!dividends[_dividendIndex].reclaimed, \"Dividend already claimed\");\n        dividends[_dividendIndex].reclaimed = true;\n        Dividend storage dividend = dividends[_dividendIndex];\n        uint256 remainingAmount = dividend.amount.sub(dividend.claimedAmount);\n        require(ERC20(dividend.token).transfer(msg.sender, remainingAmount), \"Unable to transfer tokens\");\n        emit ERC20DividendReclaimed(msg.sender, _dividendIndex, dividend.token, remainingAmount);\n    }\n\n    /**\n     * @notice Calculate amount of dividends claimable\n     * @param _dividendIndex Dividend to calculate\n     * @param _payee Affected investor address\n     * @return unit256\n     */\n    function calculateDividend(uint256 _dividendIndex, address _payee) public view returns(uint256) {\n        Dividend storage dividend = dividends[_dividendIndex];\n        if (dividend.claimed[_payee]) {\n            return 0;\n        }\n        uint256 balance = ISecurityToken(securityToken).balanceOfAt(_payee, dividends[_dividendIndex].checkpointId);\n        return balance.mul(dividends[_dividendIndex].amount).div(dividends[_dividendIndex].totalSupply);\n    }\n\n    /**\n     * @notice Get the index according to the checkpoint id\n     * @param _checkpointId Checkpoint id to query\n     * @return uint256\n     */\n    function getDividendIndex(uint256 _checkpointId) public view returns(uint256[]) {\n        uint256 counter = 0;\n        for(uint256 i = 0; i < dividends.length; i++) {\n            if (dividends[i].checkpointId == _checkpointId) {\n                counter++;\n            }\n        }\n\n       uint256[] memory index = new uint256[](counter);\n       counter = 0;\n       for(uint256 j = 0; j < dividends.length; j++) {\n           if (dividends[j].checkpointId == _checkpointId) {\n               index[counter] = j;\n               counter++;\n           }\n       }\n       return index;\n    }\n\n    /**\n     * @notice Return the permissions flag that are associated with STO\n     * @return bytes32 array\n     */\n    function getPermissions() public view returns(bytes32[]) {\n        bytes32[] memory allPermissions = new bytes32[](1);\n        allPermissions[0] = DISTRIBUTE;\n        return allPermissions;\n    }\n\n}\n",
  "sourcePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/Checkpoint/ERC20DividendCheckpoint.sol",
  "ast": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/Checkpoint/ERC20DividendCheckpoint.sol",
    "exportedSymbols": {
      "ERC20DividendCheckpoint": [
        11916
      ]
    },
    "id": 11917,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 11118,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:29"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/Checkpoint/ICheckpoint.sol",
        "file": "./ICheckpoint.sol",
        "id": 11119,
        "nodeType": "ImportDirective",
        "scope": 11917,
        "sourceUnit": 12950,
        "src": "26:27:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/ISecurityToken.sol",
        "file": "../../interfaces/ISecurityToken.sol",
        "id": 11120,
        "nodeType": "ImportDirective",
        "scope": 11917,
        "sourceUnit": 10160,
        "src": "54:45:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 11121,
        "nodeType": "ImportDirective",
        "scope": 11917,
        "sourceUnit": 22579,
        "src": "100:59:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/Math.sol",
        "file": "openzeppelin-solidity/contracts/math/Math.sol",
        "id": 11122,
        "nodeType": "ImportDirective",
        "scope": 11917,
        "sourceUnit": 22485,
        "src": "160:55:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "id": 11123,
        "nodeType": "ImportDirective",
        "scope": 11917,
        "sourceUnit": 22838,
        "src": "216:63:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 11124,
              "name": "ICheckpoint",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 12949,
              "src": "775:11:29",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ICheckpoint_$12949",
                "typeString": "contract ICheckpoint"
              }
            },
            "id": 11125,
            "nodeType": "InheritanceSpecifier",
            "src": "775:11:29"
          }
        ],
        "contractDependencies": [
          9717,
          12949
        ],
        "contractKind": "contract",
        "documentation": "@title Checkpoint module for issuing ERC20 dividends",
        "fullyImplemented": true,
        "id": 11916,
        "linearizedBaseContracts": [
          11916,
          12949,
          9717
        ],
        "name": "ERC20DividendCheckpoint",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 11128,
            "libraryName": {
              "contractScope": null,
              "id": 11126,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22578,
              "src": "799:8:29",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$22578",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "793:27:29",
            "typeName": {
              "id": 11127,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "812:7:29",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "id": 11131,
            "name": "DISTRIBUTE",
            "nodeType": "VariableDeclaration",
            "scope": 11916,
            "src": "826:49:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 11129,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "826:7:29",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "44495354524942555445",
              "id": 11130,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "863:12:29",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_ca4be9bd739a9ff5362f4ef138b18f1b41c542345f6f1c2ebd90f78da1e5b354",
                "typeString": "literal_string \"DISTRIBUTE\""
              },
              "value": "DISTRIBUTE"
            },
            "visibility": "public"
          },
          {
            "canonicalName": "ERC20DividendCheckpoint.Dividend",
            "id": 11154,
            "members": [
              {
                "constant": false,
                "id": 11133,
                "name": "checkpointId",
                "nodeType": "VariableDeclaration",
                "scope": 11154,
                "src": "906:20:29",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 11132,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "906:7:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 11135,
                "name": "created",
                "nodeType": "VariableDeclaration",
                "scope": 11154,
                "src": "934:15:29",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 11134,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "934:7:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 11137,
                "name": "maturity",
                "nodeType": "VariableDeclaration",
                "scope": 11154,
                "src": "999:16:29",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 11136,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "999:7:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 11139,
                "name": "expiry",
                "nodeType": "VariableDeclaration",
                "scope": 11154,
                "src": "1088:14:29",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 11138,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1088:7:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 11141,
                "name": "token",
                "nodeType": "VariableDeclaration",
                "scope": 11154,
                "src": "1256:13:29",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 11140,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1256:7:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 11143,
                "name": "amount",
                "nodeType": "VariableDeclaration",
                "scope": 11154,
                "src": "1335:14:29",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 11142,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1335:7:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 11145,
                "name": "claimedAmount",
                "nodeType": "VariableDeclaration",
                "scope": 11154,
                "src": "1398:21:29",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 11144,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1398:7:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 11147,
                "name": "totalSupply",
                "nodeType": "VariableDeclaration",
                "scope": 11154,
                "src": "1464:19:29",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 11146,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1464:7:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 11149,
                "name": "reclaimed",
                "nodeType": "VariableDeclaration",
                "scope": 11154,
                "src": "1564:14:29",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 11148,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "1564:4:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 11153,
                "name": "claimed",
                "nodeType": "VariableDeclaration",
                "scope": 11154,
                "src": "1586:33:29",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                  "typeString": "mapping(address => bool)"
                },
                "typeName": {
                  "id": 11152,
                  "keyType": {
                    "id": 11150,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1595:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "1586:25:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "valueType": {
                    "id": 11151,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1606:4:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Dividend",
            "nodeType": "StructDefinition",
            "scope": 11916,
            "src": "882:793:29",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 11157,
            "name": "dividends",
            "nodeType": "VariableDeclaration",
            "scope": 11916,
            "src": "1710:27:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
              "typeString": "struct ERC20DividendCheckpoint.Dividend[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 11155,
                "name": "Dividend",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 11154,
                "src": "1710:8:29",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                  "typeString": "struct ERC20DividendCheckpoint.Dividend"
                }
              },
              "id": 11156,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "1710:10:29",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage_ptr",
                "typeString": "struct ERC20DividendCheckpoint.Dividend[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 11177,
            "name": "ERC20DividendDeposited",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 11176,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11159,
                  "indexed": true,
                  "name": "_depositor",
                  "nodeType": "VariableDeclaration",
                  "scope": 11177,
                  "src": "1773:26:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11158,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1773:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11161,
                  "indexed": false,
                  "name": "_checkpointId",
                  "nodeType": "VariableDeclaration",
                  "scope": 11177,
                  "src": "1801:21:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11160,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1801:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11163,
                  "indexed": false,
                  "name": "_created",
                  "nodeType": "VariableDeclaration",
                  "scope": 11177,
                  "src": "1824:16:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11162,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1824:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11165,
                  "indexed": false,
                  "name": "_maturity",
                  "nodeType": "VariableDeclaration",
                  "scope": 11177,
                  "src": "1842:17:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11164,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1842:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11167,
                  "indexed": false,
                  "name": "_expiry",
                  "nodeType": "VariableDeclaration",
                  "scope": 11177,
                  "src": "1861:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11166,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1861:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11169,
                  "indexed": false,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 11177,
                  "src": "1878:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11168,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1878:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11171,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 11177,
                  "src": "1894:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11170,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1894:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11173,
                  "indexed": false,
                  "name": "_totalSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 11177,
                  "src": "1911:20:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11172,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1911:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11175,
                  "indexed": false,
                  "name": "_dividendIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 11177,
                  "src": "1933:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11174,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1933:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1772:184:29"
            },
            "src": "1744:213:29"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 11187,
            "name": "ERC20DividendClaimed",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 11186,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11179,
                  "indexed": true,
                  "name": "_payee",
                  "nodeType": "VariableDeclaration",
                  "scope": 11187,
                  "src": "1989:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11178,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1989:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11181,
                  "indexed": false,
                  "name": "_dividendIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 11187,
                  "src": "2013:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11180,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2013:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11183,
                  "indexed": false,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 11187,
                  "src": "2037:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11182,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2037:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11185,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 11187,
                  "src": "2053:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11184,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2053:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1988:81:29"
            },
            "src": "1962:108:29"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 11197,
            "name": "ERC20DividendReclaimed",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 11196,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11189,
                  "indexed": true,
                  "name": "_claimer",
                  "nodeType": "VariableDeclaration",
                  "scope": 11197,
                  "src": "2104:24:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11188,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2104:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11191,
                  "indexed": false,
                  "name": "_dividendIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 11197,
                  "src": "2130:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11190,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2130:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11193,
                  "indexed": false,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 11197,
                  "src": "2154:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11192,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2154:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11195,
                  "indexed": false,
                  "name": "_claimedAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 11197,
                  "src": "2170:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11194,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2170:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2103:90:29"
            },
            "src": "2075:119:29"
          },
          {
            "body": {
              "id": 11239,
              "nodeType": "Block",
              "src": "2252:383:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11205,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11202,
                          "name": "_dividendIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11199,
                          "src": "2270:14:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 11203,
                            "name": "dividends",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11157,
                            "src": "2287:9:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                              "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                            }
                          },
                          "id": 11204,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2287:16:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2270:33:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e636f7272656374206469766964656e6420696e646578",
                        "id": 11206,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2305:26:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_493598b4f85c7110e712482cd4f4c764fe64a77e153f7dd336580d7956ede6a0",
                          "typeString": "literal_string \"Incorrect dividend index\""
                        },
                        "value": "Incorrect dividend index"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_493598b4f85c7110e712482cd4f4c764fe64a77e153f7dd336580d7956ede6a0",
                          "typeString": "literal_string \"Incorrect dividend index\""
                        }
                      ],
                      "id": 11201,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "2262:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11207,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2262:70:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11208,
                  "nodeType": "ExpressionStatement",
                  "src": "2262:70:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11215,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11210,
                          "name": "now",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23133,
                          "src": "2350:3:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 11211,
                              "name": "dividends",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11157,
                              "src": "2357:9:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                                "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                              }
                            },
                            "id": 11213,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 11212,
                              "name": "_dividendIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11199,
                              "src": "2367:14:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2357:25:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                              "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                            }
                          },
                          "id": 11214,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "maturity",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11137,
                          "src": "2357:34:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2350:41:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4469766964656e64206d6174757269747920697320696e2074686520667574757265",
                        "id": 11216,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2393:36:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_63322e13adabbf379a54e39e04fa0c750bb517eee0b29cbcd78f4f7e2625966b",
                          "typeString": "literal_string \"Dividend maturity is in the future\""
                        },
                        "value": "Dividend maturity is in the future"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_63322e13adabbf379a54e39e04fa0c750bb517eee0b29cbcd78f4f7e2625966b",
                          "typeString": "literal_string \"Dividend maturity is in the future\""
                        }
                      ],
                      "id": 11209,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "2342:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2342:88:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11218,
                  "nodeType": "ExpressionStatement",
                  "src": "2342:88:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11225,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11220,
                          "name": "now",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23133,
                          "src": "2448:3:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 11221,
                              "name": "dividends",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11157,
                              "src": "2454:9:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                                "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                              }
                            },
                            "id": 11223,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 11222,
                              "name": "_dividendIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11199,
                              "src": "2464:14:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2454:25:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                              "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                            }
                          },
                          "id": 11224,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "expiry",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11139,
                          "src": "2454:32:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2448:38:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4469766964656e642065787069727920697320696e207468652070617374",
                        "id": 11226,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2488:32:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3a8d6d593aece756e87679a0e9860056caa9290c209985c444a5dfcedcbfb212",
                          "typeString": "literal_string \"Dividend expiry is in the past\""
                        },
                        "value": "Dividend expiry is in the past"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3a8d6d593aece756e87679a0e9860056caa9290c209985c444a5dfcedcbfb212",
                          "typeString": "literal_string \"Dividend expiry is in the past\""
                        }
                      ],
                      "id": 11219,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "2440:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11227,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2440:81:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11228,
                  "nodeType": "ExpressionStatement",
                  "src": "2440:81:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11234,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "2539:36:29",
                        "subExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 11230,
                              "name": "dividends",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11157,
                              "src": "2540:9:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                                "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                              }
                            },
                            "id": 11232,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 11231,
                              "name": "_dividendIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11199,
                              "src": "2550:14:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2540:25:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                              "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                            }
                          },
                          "id": 11233,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "reclaimed",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11149,
                          "src": "2540:35:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4469766964656e6420686173206265656e207265636c61696d656420627920697373756572",
                        "id": 11235,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2577:39:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b568a7d8822e7fc758f05cb1eab8f71b5fd4d1887ac3d7f57de02dd397af7d10",
                          "typeString": "literal_string \"Dividend has been reclaimed by issuer\""
                        },
                        "value": "Dividend has been reclaimed by issuer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b568a7d8822e7fc758f05cb1eab8f71b5fd4d1887ac3d7f57de02dd397af7d10",
                          "typeString": "literal_string \"Dividend has been reclaimed by issuer\""
                        }
                      ],
                      "id": 11229,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "2531:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2531:86:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11237,
                  "nodeType": "ExpressionStatement",
                  "src": "2531:86:29"
                },
                {
                  "id": 11238,
                  "nodeType": "PlaceholderStatement",
                  "src": "2627:1:29"
                }
              ]
            },
            "documentation": null,
            "id": 11240,
            "name": "validDividendIndex",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 11200,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11199,
                  "name": "_dividendIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 11240,
                  "src": "2228:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11198,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2228:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2227:24:29"
            },
            "src": "2200:435:29",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 11251,
              "nodeType": "Block",
              "src": "2907:7:29",
              "statements": []
            },
            "documentation": "@notice Constructor\n@param _securityToken Address of the security token\n@param _polyAddress Address of the polytoken",
            "id": 11252,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11247,
                    "name": "_securityToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11242,
                    "src": "2873:14:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 11248,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11244,
                    "src": "2889:12:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 11249,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11246,
                  "name": "IModule",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9717,
                  "src": "2865:7:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModule_$9717_$",
                    "typeString": "type(contract IModule)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2865:37:29"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11245,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11242,
                  "name": "_securityToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 11252,
                  "src": "2808:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11241,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2808:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11244,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 11252,
                  "src": "2832:20:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11243,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2832:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2807:46:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11250,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2907:0:29"
            },
            "scope": 11916,
            "src": "2795:119:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11261,
              "nodeType": "Block",
              "src": "3113:33:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 11258,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3137:1:29",
                        "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": 11257,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "3130:6:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes4_$",
                        "typeString": "type(bytes4)"
                      },
                      "typeName": "bytes4"
                    },
                    "id": 11259,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3130:9:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "functionReturnParameters": 11256,
                  "id": 11260,
                  "nodeType": "Return",
                  "src": "3123:16:29"
                }
              ]
            },
            "documentation": "@notice Init function i.e generalise function to maintain the structure of the module contract\n@return bytes4",
            "id": 11262,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInitFunction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11253,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3081:2:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11256,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11255,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11262,
                  "src": "3105:6:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 11254,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "3105:6:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3104:8:29"
            },
            "scope": 11916,
            "src": "3057:89:29",
            "stateMutability": "pure",
            "superFunction": 9594,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11366,
              "nodeType": "Block",
              "src": "3645:867:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11278,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11276,
                          "name": "_expiry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11266,
                          "src": "3663:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 11277,
                          "name": "_maturity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11264,
                          "src": "3673:9:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3663:19:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 11275,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "3655:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 11279,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3655:28:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11280,
                  "nodeType": "ExpressionStatement",
                  "src": "3655:28:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11284,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11282,
                          "name": "_expiry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11266,
                          "src": "3701:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 11283,
                          "name": "now",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23133,
                          "src": "3711:3:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3701:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 11281,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "3693:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 11285,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3693:22:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11286,
                  "nodeType": "ExpressionStatement",
                  "src": "3693:22:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 11292,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11288,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11268,
                          "src": "3733:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 11290,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3751:1:29",
                              "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": 11289,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3743:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 11291,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3743:10:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3733:20:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 11287,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "3725:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 11293,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3725:29:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11294,
                  "nodeType": "ExpressionStatement",
                  "src": "3725:29:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11298,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11296,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11270,
                          "src": "3772:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 11297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3782:1:29",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3772:11:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 11295,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "3764:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 11299,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3764:20:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11300,
                  "nodeType": "ExpressionStatement",
                  "src": "3764:20:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 11306,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "3829:3:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 11307,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3829:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 11309,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23260,
                                "src": "3849:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20DividendCheckpoint_$11916",
                                  "typeString": "contract ERC20DividendCheckpoint"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20DividendCheckpoint_$11916",
                                  "typeString": "contract ERC20DividendCheckpoint"
                                }
                              ],
                              "id": 11308,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3841:7:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 11310,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3841:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11311,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11270,
                            "src": "3856:7:29",
                            "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,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 11303,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11268,
                                "src": "3808:6:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 11302,
                              "name": "ERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22837,
                              "src": "3802:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC20_$22837_$",
                                "typeString": "type(contract ERC20)"
                              }
                            },
                            "id": 11304,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3802:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 11305,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22819,
                          "src": "3802:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) external returns (bool)"
                          }
                        },
                        "id": 11312,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3802:62:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "556e61626c6520746f207472616e7366657220746f6b656e7320666f72206469766964656e64",
                        "id": 11313,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3866:40:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6c1e0aa7d60cd08801d8deb27e6355a9cc13c12c5eac339c24efbf22860765e0",
                          "typeString": "literal_string \"Unable to transfer tokens for dividend\""
                        },
                        "value": "Unable to transfer tokens for dividend"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6c1e0aa7d60cd08801d8deb27e6355a9cc13c12c5eac339c24efbf22860765e0",
                          "typeString": "literal_string \"Unable to transfer tokens for dividend\""
                        }
                      ],
                      "id": 11301,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "3794:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3794:113:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11315,
                  "nodeType": "ExpressionStatement",
                  "src": "3794:113:29"
                },
                {
                  "assignments": [
                    11317
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11317,
                      "name": "dividendIndex",
                      "nodeType": "VariableDeclaration",
                      "scope": 11367,
                      "src": "3917:21:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11316,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3917:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11320,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 11318,
                      "name": "dividends",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11157,
                      "src": "3941:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                      }
                    },
                    "id": 11319,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "3941:16:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3917:40:29"
                },
                {
                  "assignments": [
                    11322
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11322,
                      "name": "checkpointId",
                      "nodeType": "VariableDeclaration",
                      "scope": 11367,
                      "src": "3967:20:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11321,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3967:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11328,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11324,
                            "name": "securityToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9561,
                            "src": "4005:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 11323,
                          "name": "ISecurityToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10159,
                          "src": "3990:14:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ISecurityToken_$10159_$",
                            "typeString": "type(contract ISecurityToken)"
                          }
                        },
                        "id": 11325,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3990:29:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                          "typeString": "contract ISecurityToken"
                        }
                      },
                      "id": 11326,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createCheckpoint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10153,
                      "src": "3990:46:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () external returns (uint256)"
                      }
                    },
                    "id": 11327,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3990:48:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3967:71:29"
                },
                {
                  "assignments": [
                    11330
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11330,
                      "name": "currentSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 11367,
                      "src": "4048:21:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11329,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4048:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11336,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11332,
                            "name": "securityToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9561,
                            "src": "4087:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 11331,
                          "name": "ISecurityToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10159,
                          "src": "4072:14:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ISecurityToken_$10159_$",
                            "typeString": "type(contract ISecurityToken)"
                          }
                        },
                        "id": 11333,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4072:29:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                          "typeString": "contract ISecurityToken"
                        }
                      },
                      "id": 11334,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22687,
                      "src": "4072:41:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 11335,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4072:43:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4048:67:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11341,
                            "name": "checkpointId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11322,
                            "src": "4173:12:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11342,
                            "name": "now",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23133,
                            "src": "4199:3:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11343,
                            "name": "_maturity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11264,
                            "src": "4216:9:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11344,
                            "name": "_expiry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11266,
                            "src": "4239:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11345,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11268,
                            "src": "4260:6:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11346,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11270,
                            "src": "4280:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 11347,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4301:1:29",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          {
                            "argumentTypes": null,
                            "id": 11348,
                            "name": "currentSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11330,
                            "src": "4316:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 11349,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4343:5:29",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          ],
                          "id": 11340,
                          "name": "Dividend",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11154,
                          "src": "4151:8:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Dividend_$11154_storage_ptr_$",
                            "typeString": "type(struct ERC20DividendCheckpoint.Dividend storage pointer)"
                          }
                        },
                        "id": 11350,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4151:209:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_memory",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Dividend_$11154_memory",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 11337,
                        "name": "dividends",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11157,
                        "src": "4125:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                        }
                      },
                      "id": 11339,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4125:14:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_Dividend_$11154_storage_$returns$_t_uint256_$",
                        "typeString": "function (struct ERC20DividendCheckpoint.Dividend storage ref) returns (uint256)"
                      }
                    },
                    "id": 11351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4125:245:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 11352,
                  "nodeType": "ExpressionStatement",
                  "src": "4125:245:29"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11354,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "4408:3:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 11355,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4408:10:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11356,
                        "name": "checkpointId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11322,
                        "src": "4420:12:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11357,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "4434:3:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11358,
                        "name": "_maturity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11264,
                        "src": "4439:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11359,
                        "name": "_expiry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11266,
                        "src": "4450:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11360,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11268,
                        "src": "4459:6:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11361,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11270,
                        "src": "4467:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11362,
                        "name": "currentSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11330,
                        "src": "4476:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11363,
                        "name": "dividendIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11317,
                        "src": "4491:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 11353,
                      "name": "ERC20DividendDeposited",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11177,
                      "src": "4385:22:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 11364,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4385:120:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11365,
                  "nodeType": "EmitStatement",
                  "src": "4380:125:29"
                }
              ]
            },
            "documentation": "@notice Creates a dividend and checkpoint for the dividend\n@param _maturity Time from which dividend can be paid\n@param _expiry Time until dividend can no longer be paid, and can be reclaimed by issuer\n@param _token Address of ERC20 token in which dividend is to be denominated\n@param _amount Amount of specified token for dividend",
            "id": 11367,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 11273,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11272,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9653,
                  "src": "3635:9:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3635:9:29"
              }
            ],
            "name": "createDividend",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11271,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11264,
                  "name": "_maturity",
                  "nodeType": "VariableDeclaration",
                  "scope": 11367,
                  "src": "3559:17:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11263,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3559:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11266,
                  "name": "_expiry",
                  "nodeType": "VariableDeclaration",
                  "scope": 11367,
                  "src": "3578:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11265,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3578:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11268,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 11367,
                  "src": "3595:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11267,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3595:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11270,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 11367,
                  "src": "3611:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11269,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3611:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3558:69:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11274,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3645:0:29"
            },
            "scope": 11916,
            "src": "3535:977:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11462,
              "nodeType": "Block",
              "src": "5124:821:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11385,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11383,
                          "name": "_expiry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11371,
                          "src": "5142:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 11384,
                          "name": "_maturity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11369,
                          "src": "5152:9:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5142:19:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 11382,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "5134:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 11386,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5134:28:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11387,
                  "nodeType": "ExpressionStatement",
                  "src": "5134:28:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11391,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11389,
                          "name": "_expiry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11371,
                          "src": "5180:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 11390,
                          "name": "now",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23133,
                          "src": "5190:3:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5180:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 11388,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "5172:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 11392,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5172:22:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11393,
                  "nodeType": "ExpressionStatement",
                  "src": "5172:22:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11401,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11395,
                          "name": "_checkpointId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11377,
                          "src": "5212:13:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 11397,
                                  "name": "securityToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9561,
                                  "src": "5244:13:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 11396,
                                "name": "ISecurityToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10159,
                                "src": "5229:14:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ISecurityToken_$10159_$",
                                  "typeString": "type(contract ISecurityToken)"
                                }
                              },
                              "id": 11398,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5229:29:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                                "typeString": "contract ISecurityToken"
                              }
                            },
                            "id": 11399,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "currentCheckpointId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 10094,
                            "src": "5229:49:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 11400,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5229:51:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5212:68:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 11394,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "5204:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 11402,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5204:77:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11403,
                  "nodeType": "ExpressionStatement",
                  "src": "5204:77:29"
                },
                {
                  "assignments": [
                    11405
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11405,
                      "name": "dividendIndex",
                      "nodeType": "VariableDeclaration",
                      "scope": 11463,
                      "src": "5291:21:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11404,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5291:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11408,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 11406,
                      "name": "dividends",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11157,
                      "src": "5315:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                      }
                    },
                    "id": 11407,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "5315:16:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5291:40:29"
                },
                {
                  "assignments": [
                    11410
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11410,
                      "name": "currentSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 11463,
                      "src": "5341:21:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11409,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5341:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11417,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11415,
                        "name": "_checkpointId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11377,
                        "src": "5409:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11412,
                            "name": "securityToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9561,
                            "src": "5380:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 11411,
                          "name": "ISecurityToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10159,
                          "src": "5365:14:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ISecurityToken_$10159_$",
                            "typeString": "type(contract ISecurityToken)"
                          }
                        },
                        "id": 11413,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5365:29:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                          "typeString": "contract ISecurityToken"
                        }
                      },
                      "id": 11414,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupplyAt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10139,
                      "src": "5365:43:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view external returns (uint256)"
                      }
                    },
                    "id": 11416,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5365:58:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5341:82:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 11423,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "5468:3:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 11424,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "5468:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 11426,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23260,
                                "src": "5488:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20DividendCheckpoint_$11916",
                                  "typeString": "contract ERC20DividendCheckpoint"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20DividendCheckpoint_$11916",
                                  "typeString": "contract ERC20DividendCheckpoint"
                                }
                              ],
                              "id": 11425,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5480:7:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 11427,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5480:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11428,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11375,
                            "src": "5495:7:29",
                            "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,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 11420,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11373,
                                "src": "5447:6:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 11419,
                              "name": "ERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22837,
                              "src": "5441:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC20_$22837_$",
                                "typeString": "type(contract ERC20)"
                              }
                            },
                            "id": 11421,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5441:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 11422,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22819,
                          "src": "5441:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) external returns (bool)"
                          }
                        },
                        "id": 11429,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5441:62:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "556e61626c6520746f207472616e7366657220746f6b656e7320666f72206469766964656e64",
                        "id": 11430,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5505:40:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6c1e0aa7d60cd08801d8deb27e6355a9cc13c12c5eac339c24efbf22860765e0",
                          "typeString": "literal_string \"Unable to transfer tokens for dividend\""
                        },
                        "value": "Unable to transfer tokens for dividend"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6c1e0aa7d60cd08801d8deb27e6355a9cc13c12c5eac339c24efbf22860765e0",
                          "typeString": "literal_string \"Unable to transfer tokens for dividend\""
                        }
                      ],
                      "id": 11418,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "5433:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11431,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5433:113:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11432,
                  "nodeType": "ExpressionStatement",
                  "src": "5433:113:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11437,
                            "name": "_checkpointId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11377,
                            "src": "5604:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11438,
                            "name": "now",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23133,
                            "src": "5631:3:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11439,
                            "name": "_maturity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11369,
                            "src": "5648:9:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11440,
                            "name": "_expiry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11371,
                            "src": "5671:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11441,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11373,
                            "src": "5692:6:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11442,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11375,
                            "src": "5712:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 11443,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5733:1:29",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          {
                            "argumentTypes": null,
                            "id": 11444,
                            "name": "currentSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11410,
                            "src": "5748:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 11445,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5775:5:29",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          ],
                          "id": 11436,
                          "name": "Dividend",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11154,
                          "src": "5582:8:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Dividend_$11154_storage_ptr_$",
                            "typeString": "type(struct ERC20DividendCheckpoint.Dividend storage pointer)"
                          }
                        },
                        "id": 11446,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5582:210:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_memory",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Dividend_$11154_memory",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 11433,
                        "name": "dividends",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11157,
                        "src": "5556:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                        }
                      },
                      "id": 11435,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5556:14:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_Dividend_$11154_storage_$returns$_t_uint256_$",
                        "typeString": "function (struct ERC20DividendCheckpoint.Dividend storage ref) returns (uint256)"
                      }
                    },
                    "id": 11447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5556:246:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 11448,
                  "nodeType": "ExpressionStatement",
                  "src": "5556:246:29"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11450,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "5840:3:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 11451,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5840:10:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11452,
                        "name": "_checkpointId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11377,
                        "src": "5852:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11453,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "5867:3:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11454,
                        "name": "_maturity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11369,
                        "src": "5872:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11455,
                        "name": "_expiry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11371,
                        "src": "5883:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11456,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11373,
                        "src": "5892:6:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11457,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11375,
                        "src": "5900:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11458,
                        "name": "currentSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11410,
                        "src": "5909:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11459,
                        "name": "dividendIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11405,
                        "src": "5924:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 11449,
                      "name": "ERC20DividendDeposited",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11177,
                      "src": "5817:22:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 11460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5817:121:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11461,
                  "nodeType": "EmitStatement",
                  "src": "5812:126:29"
                }
              ]
            },
            "documentation": "@notice Creates a dividend with a provided checkpoint\n@param _maturity Time from which dividend can be paid\n@param _expiry Time until dividend can no longer be paid, and can be reclaimed by issuer\n@param _token Address of ERC20 token in which dividend is to be denominated\n@param _amount Amount of specified token for dividend\n@param _checkpointId Checkpoint id from which to create dividends",
            "id": 11463,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 11380,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11379,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9653,
                  "src": "5114:9:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5114:9:29"
              }
            ],
            "name": "createDividendWithCheckpoint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11378,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11369,
                  "name": "_maturity",
                  "nodeType": "VariableDeclaration",
                  "scope": 11463,
                  "src": "5007:17:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11368,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5007:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11371,
                  "name": "_expiry",
                  "nodeType": "VariableDeclaration",
                  "scope": 11463,
                  "src": "5026:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11370,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5026:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11373,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 11463,
                  "src": "5043:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11372,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5043:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11375,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 11463,
                  "src": "5059:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11374,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5059:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11377,
                  "name": "_checkpointId",
                  "nodeType": "VariableDeclaration",
                  "scope": 11463,
                  "src": "5076:21:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11376,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5076:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5006:92:29"
            },
            "payable": true,
            "returnParameters": {
              "id": 11381,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5124:0:29"
            },
            "scope": 11916,
            "src": "4969:976:29",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11513,
              "nodeType": "Block",
              "src": "6284:266:29",
              "statements": [
                {
                  "assignments": [
                    11478
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11478,
                      "name": "dividend",
                      "nodeType": "VariableDeclaration",
                      "scope": 11514,
                      "src": "6294:25:29",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 11477,
                        "name": "Dividend",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 11154,
                        "src": "6294:8:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11482,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 11479,
                      "name": "dividends",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11157,
                      "src": "6322:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                      }
                    },
                    "id": 11481,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 11480,
                      "name": "_dividendIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11465,
                      "src": "6332:14:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6322:25:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                      "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6294:53:29"
                },
                {
                  "body": {
                    "id": 11511,
                    "nodeType": "Block",
                    "src": "6402:142:29",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 11500,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "6420:29:29",
                          "subExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 11494,
                                "name": "dividend",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11478,
                                "src": "6421:8:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                                  "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                                }
                              },
                              "id": 11495,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "claimed",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11153,
                              "src": "6421:16:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 11499,
                            "indexExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 11496,
                                "name": "_payees",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11468,
                                "src": "6438:7:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 11498,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 11497,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11484,
                                "src": "6446:1:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6438:10:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6421:28:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 11510,
                        "nodeType": "IfStatement",
                        "src": "6416:118:29",
                        "trueBody": {
                          "id": 11509,
                          "nodeType": "Block",
                          "src": "6451:83:29",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 11502,
                                      "name": "_payees",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11468,
                                      "src": "6482:7:29",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 11504,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 11503,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11484,
                                      "src": "6490:1:29",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "6482:10:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 11505,
                                    "name": "dividend",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11478,
                                    "src": "6494:8:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                                      "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 11506,
                                    "name": "_dividendIndex",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11465,
                                    "src": "6504:14:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                                      "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 11501,
                                  "name": "_payDividend",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11677,
                                  "src": "6469:12:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_struct$_Dividend_$11154_storage_ptr_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,struct ERC20DividendCheckpoint.Dividend storage pointer,uint256)"
                                  }
                                },
                                "id": 11507,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6469:50:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 11508,
                              "nodeType": "ExpressionStatement",
                              "src": "6469:50:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 11490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 11487,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11484,
                      "src": "6377:1:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 11488,
                        "name": "_payees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11468,
                        "src": "6381:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 11489,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6381:14:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6377:18:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 11512,
                  "initializationExpression": {
                    "assignments": [
                      11484
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 11484,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 11514,
                        "src": "6362:9:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11483,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6362:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 11486,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 11485,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6374:1:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "6362:13:29"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 11492,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6397:3:29",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 11491,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11484,
                        "src": "6397:1:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 11493,
                    "nodeType": "ExpressionStatement",
                    "src": "6397:3:29"
                  },
                  "nodeType": "ForStatement",
                  "src": "6357:187:29"
                }
              ]
            },
            "documentation": "@notice Issuer can push dividends to provided addresses\n@param _dividendIndex Dividend to push\n@param _payees Addresses to which to push the dividend",
            "id": 11514,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11471,
                    "name": "DISTRIBUTE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11131,
                    "src": "6237:10:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 11472,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11470,
                  "name": "withPerm",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9637,
                  "src": "6228:8:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6228:20:29"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11474,
                    "name": "_dividendIndex",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11465,
                    "src": "6268:14:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 11475,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11473,
                  "name": "validDividendIndex",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 11240,
                  "src": "6249:18:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6249:34:29"
              }
            ],
            "name": "pushDividendPaymentToAddresses",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11469,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11465,
                  "name": "_dividendIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 11514,
                  "src": "6178:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11464,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6178:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11468,
                  "name": "_payees",
                  "nodeType": "VariableDeclaration",
                  "scope": 11514,
                  "src": "6202:17:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 11466,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "6202:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 11467,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6202:9:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6177:43:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11476,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6284:0:29"
            },
            "scope": 11916,
            "src": "6138:412:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11584,
              "nodeType": "Block",
              "src": "7008:458:29",
              "statements": [
                {
                  "assignments": [
                    11530
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11530,
                      "name": "dividend",
                      "nodeType": "VariableDeclaration",
                      "scope": 11585,
                      "src": "7018:25:29",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 11529,
                        "name": "Dividend",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 11154,
                        "src": "7018:8:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11534,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 11531,
                      "name": "dividends",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11157,
                      "src": "7046:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                      }
                    },
                    "id": 11533,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 11532,
                      "name": "_dividendIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11516,
                      "src": "7056:14:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7046:25:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                      "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7018:53:29"
                },
                {
                  "assignments": [
                    11536
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11536,
                      "name": "numberInvestors",
                      "nodeType": "VariableDeclaration",
                      "scope": 11585,
                      "src": "7081:23:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11535,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7081:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11542,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11538,
                            "name": "securityToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9561,
                            "src": "7122:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 11537,
                          "name": "ISecurityToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10159,
                          "src": "7107:14:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ISecurityToken_$10159_$",
                            "typeString": "type(contract ISecurityToken)"
                          }
                        },
                        "id": 11539,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7107:29:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                          "typeString": "contract ISecurityToken"
                        }
                      },
                      "id": 11540,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getInvestorsLength",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10158,
                      "src": "7107:48:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 11541,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7107:50:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7081:76:29"
                },
                {
                  "body": {
                    "id": 11582,
                    "nodeType": "Block",
                    "src": "7256:204:29",
                    "statements": [
                      {
                        "assignments": [
                          11561
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11561,
                            "name": "payee",
                            "nodeType": "VariableDeclaration",
                            "scope": 11585,
                            "src": "7270:13:29",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 11560,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "7270:7:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 11568,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 11566,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11544,
                              "src": "7326:1:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 11563,
                                  "name": "securityToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9561,
                                  "src": "7301:13:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 11562,
                                "name": "ISecurityToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10159,
                                "src": "7286:14:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ISecurityToken_$10159_$",
                                  "typeString": "type(contract ISecurityToken)"
                                }
                              },
                              "id": 11564,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7286:29:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                                "typeString": "contract ISecurityToken"
                              }
                            },
                            "id": 11565,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "investors",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 10099,
                            "src": "7286:39:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view external returns (address)"
                            }
                          },
                          "id": 11567,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7286:42:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7270:58:29"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 11573,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "7346:24:29",
                          "subExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 11569,
                                "name": "dividend",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11530,
                                "src": "7347:8:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                                  "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                                }
                              },
                              "id": 11570,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "claimed",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11153,
                              "src": "7347:16:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 11572,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 11571,
                              "name": "payee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11561,
                              "src": "7364:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7347:23:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 11581,
                        "nodeType": "IfStatement",
                        "src": "7342:108:29",
                        "trueBody": {
                          "id": 11580,
                          "nodeType": "Block",
                          "src": "7372:78:29",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 11575,
                                    "name": "payee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11561,
                                    "src": "7403:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 11576,
                                    "name": "dividend",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11530,
                                    "src": "7410:8:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                                      "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 11577,
                                    "name": "_dividendIndex",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11516,
                                    "src": "7420:14:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                                      "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 11574,
                                  "name": "_payDividend",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11677,
                                  "src": "7390:12:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_struct$_Dividend_$11154_storage_ptr_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,struct ERC20DividendCheckpoint.Dividend storage pointer,uint256)"
                                  }
                                },
                                "id": 11578,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7390:45:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 11579,
                              "nodeType": "ExpressionStatement",
                              "src": "7390:45:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 11556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 11547,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11544,
                      "src": "7192:1:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 11550,
                          "name": "numberInvestors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11536,
                          "src": "7208:15:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 11553,
                              "name": "_iterations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11520,
                              "src": "7236:11:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 11551,
                              "name": "_start",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11518,
                              "src": "7225:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 11552,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22577,
                            "src": "7225:10:29",
                            "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": 11554,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7225:23:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 11548,
                          "name": "Math",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22484,
                          "src": "7196:4:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Math_$22484_$",
                            "typeString": "type(library Math)"
                          }
                        },
                        "id": 11549,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "min256",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22483,
                        "src": "7196:11:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 11555,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7196:53:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7192:57:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 11583,
                  "initializationExpression": {
                    "assignments": [
                      11544
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 11544,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 11585,
                        "src": "7172:9:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11543,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7172:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 11546,
                    "initialValue": {
                      "argumentTypes": null,
                      "id": 11545,
                      "name": "_start",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11518,
                      "src": "7184:6:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "7172:18:29"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 11558,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "7251:3:29",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 11557,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11544,
                        "src": "7251:1:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 11559,
                    "nodeType": "ExpressionStatement",
                    "src": "7251:3:29"
                  },
                  "nodeType": "ForStatement",
                  "src": "7167:293:29"
                }
              ]
            },
            "documentation": "@notice Issuer can push dividends using the investor list from the security token\n@param _dividendIndex Dividend to push\n@param _start Index in investor list at which to start pushing dividends\n@param _iterations Number of addresses to push dividends for",
            "id": 11585,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11523,
                    "name": "DISTRIBUTE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11131,
                    "src": "6961:10:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 11524,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11522,
                  "name": "withPerm",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9637,
                  "src": "6952:8:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6952:20:29"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11526,
                    "name": "_dividendIndex",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11516,
                    "src": "6992:14:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 11527,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11525,
                  "name": "validDividendIndex",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 11240,
                  "src": "6973:18:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6973:34:29"
              }
            ],
            "name": "pushDividendPayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11521,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11516,
                  "name": "_dividendIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 11585,
                  "src": "6884:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11515,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6884:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11518,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 11585,
                  "src": "6908:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11517,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6908:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11520,
                  "name": "_iterations",
                  "nodeType": "VariableDeclaration",
                  "scope": 11585,
                  "src": "6924:19:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11519,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6924:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6883:61:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11528,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7008:0:29"
            },
            "scope": 11916,
            "src": "6855:611:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11616,
              "nodeType": "Block",
              "src": "7687:208:29",
              "statements": [
                {
                  "assignments": [
                    11594
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11594,
                      "name": "dividend",
                      "nodeType": "VariableDeclaration",
                      "scope": 11617,
                      "src": "7697:25:29",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 11593,
                        "name": "Dividend",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 11154,
                        "src": "7697:8:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11598,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 11595,
                      "name": "dividends",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11157,
                      "src": "7725:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                      }
                    },
                    "id": 11597,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 11596,
                      "name": "_dividendIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11587,
                      "src": "7735:14:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7725:25:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                      "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7697:53:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11605,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "7768:29:29",
                        "subExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 11600,
                              "name": "dividend",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11594,
                              "src": "7769:8:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                                "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                              }
                            },
                            "id": 11601,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "claimed",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11153,
                            "src": "7769:16:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 11604,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 11602,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "7786:3:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 11603,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "7786:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7769:28:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4469766964656e6420616c7265616479207265636c61696d6564",
                        "id": 11606,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7799:28:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1714a10a81f7397348bdfa274c2f8a2730e99ed44f16c5ab4a0ced56e1a7a11c",
                          "typeString": "literal_string \"Dividend already reclaimed\""
                        },
                        "value": "Dividend already reclaimed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1714a10a81f7397348bdfa274c2f8a2730e99ed44f16c5ab4a0ced56e1a7a11c",
                          "typeString": "literal_string \"Dividend already reclaimed\""
                        }
                      ],
                      "id": 11599,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "7760:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7760:68:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11608,
                  "nodeType": "ExpressionStatement",
                  "src": "7760:68:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11610,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "7851:3:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 11611,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7851:10:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11612,
                        "name": "dividend",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11594,
                        "src": "7863:8:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11613,
                        "name": "_dividendIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11587,
                        "src": "7873:14:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 11609,
                      "name": "_payDividend",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11677,
                      "src": "7838:12:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_struct$_Dividend_$11154_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (address,struct ERC20DividendCheckpoint.Dividend storage pointer,uint256)"
                      }
                    },
                    "id": 11614,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7838:50:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11615,
                  "nodeType": "ExpressionStatement",
                  "src": "7838:50:29"
                }
              ]
            },
            "documentation": "@notice Investors can pull their own dividends\n@param _dividendIndex Dividend to pull",
            "id": 11617,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11590,
                    "name": "_dividendIndex",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11587,
                    "src": "7667:14:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 11591,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11589,
                  "name": "validDividendIndex",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 11240,
                  "src": "7648:18:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7648:34:29"
              }
            ],
            "name": "pullDividendPayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11588,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11587,
                  "name": "_dividendIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 11617,
                  "src": "7617:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11586,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7617:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7616:24:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11592,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7687:0:29"
            },
            "scope": 11916,
            "src": "7588:307:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11676,
              "nodeType": "Block",
              "src": "8221:406:29",
              "statements": [
                {
                  "assignments": [
                    11627
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11627,
                      "name": "claim",
                      "nodeType": "VariableDeclaration",
                      "scope": 11677,
                      "src": "8231:13:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11626,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8231:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11632,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11629,
                        "name": "_dividendIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11623,
                        "src": "8265:14:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11630,
                        "name": "_payee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11619,
                        "src": "8281:6:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 11628,
                      "name": "calculateDividend",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11807,
                      "src": "8247:17:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (uint256,address) view returns (uint256)"
                      }
                    },
                    "id": 11631,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8247:41:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8231:57:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11639,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11633,
                          "name": "_dividend",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11621,
                          "src": "8298:9:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                            "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                          }
                        },
                        "id": 11636,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "claimed",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11153,
                        "src": "8298:17:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 11637,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 11635,
                        "name": "_payee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11619,
                        "src": "8316:6:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8298:25:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 11638,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8326:4:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "8298:32:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 11640,
                  "nodeType": "ExpressionStatement",
                  "src": "8298:32:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11649,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 11641,
                        "name": "_dividend",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11621,
                        "src": "8340:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                        }
                      },
                      "id": 11643,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "claimedAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11145,
                      "src": "8340:23:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 11646,
                            "name": "_dividend",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11621,
                            "src": "8376:9:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                              "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                            }
                          },
                          "id": 11647,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "claimedAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11145,
                          "src": "8376:23:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 11644,
                          "name": "claim",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11627,
                          "src": "8366:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 11645,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22577,
                        "src": "8366:9:29",
                        "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": 11648,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8366:34:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8340:60:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 11650,
                  "nodeType": "ExpressionStatement",
                  "src": "8340:60:29"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 11653,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 11651,
                      "name": "claim",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11627,
                      "src": "8414:5:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 11652,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8422:1:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8414:9:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 11675,
                  "nodeType": "IfStatement",
                  "src": "8410:211:29",
                  "trueBody": {
                    "id": 11674,
                    "nodeType": "Block",
                    "src": "8425:196:29",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 11660,
                                  "name": "_payee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11619,
                                  "src": "8479:6:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 11661,
                                  "name": "claim",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11627,
                                  "src": "8487:5:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 11656,
                                        "name": "_dividend",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11621,
                                        "src": "8453:9:29",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                                          "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                                        }
                                      },
                                      "id": 11657,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "token",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 11141,
                                      "src": "8453:15:29",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 11655,
                                    "name": "ERC20",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22837,
                                    "src": "8447:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_ERC20_$22837_$",
                                      "typeString": "type(contract ERC20)"
                                    }
                                  },
                                  "id": 11658,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8447:22:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20_$22837",
                                    "typeString": "contract ERC20"
                                  }
                                },
                                "id": 11659,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transfer",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22860,
                                "src": "8447:31:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) external returns (bool)"
                                }
                              },
                              "id": 11662,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8447:46:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "556e61626c6520746f207472616e7366657220746f6b656e73",
                              "id": 11663,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8495:27:29",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_db8b21f8c5bce1dba39854945d87864b897be9a09a2bf8644d8cb629d9d84761",
                                "typeString": "literal_string \"Unable to transfer tokens\""
                              },
                              "value": "Unable to transfer tokens"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_db8b21f8c5bce1dba39854945d87864b897be9a09a2bf8644d8cb629d9d84761",
                                "typeString": "literal_string \"Unable to transfer tokens\""
                              }
                            ],
                            "id": 11654,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              23134,
                              23135
                            ],
                            "referencedDeclaration": 23135,
                            "src": "8439:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 11664,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8439:84:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 11665,
                        "nodeType": "ExpressionStatement",
                        "src": "8439:84:29"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 11667,
                              "name": "_payee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11619,
                              "src": "8563:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 11668,
                              "name": "_dividendIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11623,
                              "src": "8571:14:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 11669,
                                "name": "_dividend",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11621,
                                "src": "8587:9:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                                  "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                                }
                              },
                              "id": 11670,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "token",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11141,
                              "src": "8587:15:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 11671,
                              "name": "claim",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11627,
                              "src": "8604:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 11666,
                            "name": "ERC20DividendClaimed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11187,
                            "src": "8542:20:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,address,uint256)"
                            }
                          },
                          "id": 11672,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8542:68:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 11673,
                        "nodeType": "EmitStatement",
                        "src": "8537:73:29"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Internal function for paying dividends\n@param _payee address of investor\n@param _dividend storage with previously issued dividends\n@param _dividendIndex Dividend to pay",
            "id": 11677,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_payDividend",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11624,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11619,
                  "name": "_payee",
                  "nodeType": "VariableDeclaration",
                  "scope": 11677,
                  "src": "8144:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11618,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8144:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11621,
                  "name": "_dividend",
                  "nodeType": "VariableDeclaration",
                  "scope": 11677,
                  "src": "8160:26:29",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                    "typeString": "struct ERC20DividendCheckpoint.Dividend"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11620,
                    "name": "Dividend",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 11154,
                    "src": "8160:8:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                      "typeString": "struct ERC20DividendCheckpoint.Dividend"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11623,
                  "name": "_dividendIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 11677,
                  "src": "8188:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11622,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8188:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8143:68:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11625,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8221:0:29"
            },
            "scope": 11916,
            "src": "8122:505:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 11755,
              "nodeType": "Block",
              "src": "8858:663:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11688,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11685,
                          "name": "_dividendIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11679,
                          "src": "8876:14:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 11686,
                            "name": "dividends",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11157,
                            "src": "8893:9:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                              "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                            }
                          },
                          "id": 11687,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "8893:16:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8876:33:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e636f7272656374206469766964656e6420696e646578",
                        "id": 11689,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8911:26:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_493598b4f85c7110e712482cd4f4c764fe64a77e153f7dd336580d7956ede6a0",
                          "typeString": "literal_string \"Incorrect dividend index\""
                        },
                        "value": "Incorrect dividend index"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_493598b4f85c7110e712482cd4f4c764fe64a77e153f7dd336580d7956ede6a0",
                          "typeString": "literal_string \"Incorrect dividend index\""
                        }
                      ],
                      "id": 11684,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "8868:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8868:70:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11691,
                  "nodeType": "ExpressionStatement",
                  "src": "8868:70:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11698,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11693,
                          "name": "now",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23133,
                          "src": "8956:3:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 11694,
                              "name": "dividends",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11157,
                              "src": "8963:9:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                                "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                              }
                            },
                            "id": 11696,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 11695,
                              "name": "_dividendIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11679,
                              "src": "8973:14:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8963:25:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                              "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                            }
                          },
                          "id": 11697,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "expiry",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11139,
                          "src": "8963:32:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8956:39:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4469766964656e642065787069727920697320696e2074686520667574757265",
                        "id": 11699,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8997:34:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3423a6d303ded18ed64e52bcfb7c965bd745fc80ec022cd69f4a83e2bb0eded7",
                          "typeString": "literal_string \"Dividend expiry is in the future\""
                        },
                        "value": "Dividend expiry is in the future"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3423a6d303ded18ed64e52bcfb7c965bd745fc80ec022cd69f4a83e2bb0eded7",
                          "typeString": "literal_string \"Dividend expiry is in the future\""
                        }
                      ],
                      "id": 11692,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "8948:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11700,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8948:84:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11701,
                  "nodeType": "ExpressionStatement",
                  "src": "8948:84:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11707,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "9050:36:29",
                        "subExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 11703,
                              "name": "dividends",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11157,
                              "src": "9051:9:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                                "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                              }
                            },
                            "id": 11705,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 11704,
                              "name": "_dividendIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11679,
                              "src": "9061:14:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9051:25:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                              "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                            }
                          },
                          "id": 11706,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "reclaimed",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11149,
                          "src": "9051:35:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4469766964656e6420616c726561647920636c61696d6564",
                        "id": 11708,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9088:26:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_34d8bfb8ea936959b19e40666b5fd8804718711629a5666d78472ed2589ed75b",
                          "typeString": "literal_string \"Dividend already claimed\""
                        },
                        "value": "Dividend already claimed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_34d8bfb8ea936959b19e40666b5fd8804718711629a5666d78472ed2589ed75b",
                          "typeString": "literal_string \"Dividend already claimed\""
                        }
                      ],
                      "id": 11702,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "9042:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11709,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9042:73:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11710,
                  "nodeType": "ExpressionStatement",
                  "src": "9042:73:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11716,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 11711,
                          "name": "dividends",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11157,
                          "src": "9125:9:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                            "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                          }
                        },
                        "id": 11713,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 11712,
                          "name": "_dividendIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11679,
                          "src": "9135:14:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9125:25:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                        }
                      },
                      "id": 11714,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "reclaimed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11149,
                      "src": "9125:35:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 11715,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9163:4:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "9125:42:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 11717,
                  "nodeType": "ExpressionStatement",
                  "src": "9125:42:29"
                },
                {
                  "assignments": [
                    11719
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11719,
                      "name": "dividend",
                      "nodeType": "VariableDeclaration",
                      "scope": 11756,
                      "src": "9177:25:29",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 11718,
                        "name": "Dividend",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 11154,
                        "src": "9177:8:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11723,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 11720,
                      "name": "dividends",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11157,
                      "src": "9205:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                      }
                    },
                    "id": 11722,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 11721,
                      "name": "_dividendIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11679,
                      "src": "9215:14:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9205:25:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                      "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9177:53:29"
                },
                {
                  "assignments": [
                    11725
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11725,
                      "name": "remainingAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 11756,
                      "src": "9240:23:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11724,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9240:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11732,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11729,
                          "name": "dividend",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11719,
                          "src": "9286:8:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                            "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                          }
                        },
                        "id": 11730,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "claimedAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11145,
                        "src": "9286:22:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11726,
                          "name": "dividend",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11719,
                          "src": "9266:8:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                            "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                          }
                        },
                        "id": 11727,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11143,
                        "src": "9266:15:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 11728,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22553,
                      "src": "9266:19:29",
                      "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": 11731,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9266:43:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9240:69:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 11739,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "9358:3:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 11740,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "9358:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11741,
                            "name": "remainingAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11725,
                            "src": "9370:15:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 11735,
                                  "name": "dividend",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11719,
                                  "src": "9333:8:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                                    "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                                  }
                                },
                                "id": 11736,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "token",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 11141,
                                "src": "9333:14:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 11734,
                              "name": "ERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22837,
                              "src": "9327:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC20_$22837_$",
                                "typeString": "type(contract ERC20)"
                              }
                            },
                            "id": 11737,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9327:21:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 11738,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22860,
                          "src": "9327:30:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 11742,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9327:59:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "556e61626c6520746f207472616e7366657220746f6b656e73",
                        "id": 11743,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9388:27:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_db8b21f8c5bce1dba39854945d87864b897be9a09a2bf8644d8cb629d9d84761",
                          "typeString": "literal_string \"Unable to transfer tokens\""
                        },
                        "value": "Unable to transfer tokens"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_db8b21f8c5bce1dba39854945d87864b897be9a09a2bf8644d8cb629d9d84761",
                          "typeString": "literal_string \"Unable to transfer tokens\""
                        }
                      ],
                      "id": 11733,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "9319:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9319:97:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11745,
                  "nodeType": "ExpressionStatement",
                  "src": "9319:97:29"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11747,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "9454:3:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 11748,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9454:10:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11749,
                        "name": "_dividendIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11679,
                        "src": "9466:14:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11750,
                          "name": "dividend",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11719,
                          "src": "9482:8:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                            "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                          }
                        },
                        "id": 11751,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "token",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11141,
                        "src": "9482:14:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11752,
                        "name": "remainingAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11725,
                        "src": "9498:15:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 11746,
                      "name": "ERC20DividendReclaimed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11197,
                      "src": "9431:22:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,address,uint256)"
                      }
                    },
                    "id": 11753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9431:83:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11754,
                  "nodeType": "EmitStatement",
                  "src": "9426:88:29"
                }
              ]
            },
            "documentation": "@notice Issuer can reclaim remaining unclaimed dividend amounts, for expired dividends\n@param _dividendIndex Dividend to reclaim",
            "id": 11756,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 11682,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11681,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9653,
                  "src": "8848:9:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8848:9:29"
              }
            ],
            "name": "reclaimDividend",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11680,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11679,
                  "name": "_dividendIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 11756,
                  "src": "8817:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11678,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8817:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8816:24:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11683,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8858:0:29"
            },
            "scope": 11916,
            "src": "8792:729:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11806,
              "nodeType": "Block",
              "src": "9815:364:29",
              "statements": [
                {
                  "assignments": [
                    11766
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11766,
                      "name": "dividend",
                      "nodeType": "VariableDeclaration",
                      "scope": 11807,
                      "src": "9825:25:29",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 11765,
                        "name": "Dividend",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 11154,
                        "src": "9825:8:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11770,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 11767,
                      "name": "dividends",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11157,
                      "src": "9853:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                      }
                    },
                    "id": 11769,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 11768,
                      "name": "_dividendIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11758,
                      "src": "9863:14:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9853:25:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                      "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9825:53:29"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 11771,
                        "name": "dividend",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11766,
                        "src": "9892:8:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                        }
                      },
                      "id": 11772,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "claimed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11153,
                      "src": "9892:16:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 11774,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 11773,
                      "name": "_payee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11760,
                      "src": "9909:6:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9892:24:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 11778,
                  "nodeType": "IfStatement",
                  "src": "9888:63:29",
                  "trueBody": {
                    "id": 11777,
                    "nodeType": "Block",
                    "src": "9918:33:29",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 11775,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9939:1:29",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 11764,
                        "id": 11776,
                        "nodeType": "Return",
                        "src": "9932:8:29"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    11780
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11780,
                      "name": "balance",
                      "nodeType": "VariableDeclaration",
                      "scope": 11807,
                      "src": "9960:15:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11779,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9960:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11791,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11785,
                        "name": "_payee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11760,
                        "src": "10020:6:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 11786,
                            "name": "dividends",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11157,
                            "src": "10028:9:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                              "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                            }
                          },
                          "id": 11788,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 11787,
                            "name": "_dividendIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11758,
                            "src": "10038:14:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "10028:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                            "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                          }
                        },
                        "id": 11789,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "checkpointId",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11133,
                        "src": "10028:38:29",
                        "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": 11782,
                            "name": "securityToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9561,
                            "src": "9993:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 11781,
                          "name": "ISecurityToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10159,
                          "src": "9978:14:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ISecurityToken_$10159_$",
                            "typeString": "type(contract ISecurityToken)"
                          }
                        },
                        "id": 11783,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9978:29:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                          "typeString": "contract ISecurityToken"
                        }
                      },
                      "id": 11784,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOfAt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10148,
                      "src": "9978:41:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) view external returns (uint256)"
                      }
                    },
                    "id": 11790,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9978:89:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9960:107:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 11800,
                            "name": "dividends",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11157,
                            "src": "10134:9:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                              "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                            }
                          },
                          "id": 11802,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 11801,
                            "name": "_dividendIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11758,
                            "src": "10144:14:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "10134:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                            "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                          }
                        },
                        "id": 11803,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "totalSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11147,
                        "src": "10134:37:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 11794,
                                "name": "dividends",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11157,
                                "src": "10096:9:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                                  "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                                }
                              },
                              "id": 11796,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 11795,
                                "name": "_dividendIndex",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11758,
                                "src": "10106:14:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10096:25:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                                "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                              }
                            },
                            "id": 11797,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "amount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11143,
                            "src": "10096:32:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 11792,
                            "name": "balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11780,
                            "src": "10084:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 11793,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22519,
                          "src": "10084:11:29",
                          "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": 11798,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10084:45:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 11799,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22533,
                      "src": "10084:49:29",
                      "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": 11804,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10084:88:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 11764,
                  "id": 11805,
                  "nodeType": "Return",
                  "src": "10077:95:29"
                }
              ]
            },
            "documentation": "@notice Calculate amount of dividends claimable\n@param _dividendIndex Dividend to calculate\n@param _payee Affected investor address\n@return unit256",
            "id": 11807,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "calculateDividend",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11761,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11758,
                  "name": "_dividendIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 11807,
                  "src": "9746:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11757,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9746:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11760,
                  "name": "_payee",
                  "nodeType": "VariableDeclaration",
                  "scope": 11807,
                  "src": "9770:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11759,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9770:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9745:40:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11764,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11763,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11807,
                  "src": "9806:7:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11762,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9806:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9805:9:29"
            },
            "scope": 11916,
            "src": "9719:460:29",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11889,
              "nodeType": "Block",
              "src": "10415:502:29",
              "statements": [
                {
                  "assignments": [
                    11816
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11816,
                      "name": "counter",
                      "nodeType": "VariableDeclaration",
                      "scope": 11890,
                      "src": "10425:15:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11815,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10425:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11818,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 11817,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "10443:1:29",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10425:19:29"
                },
                {
                  "body": {
                    "id": 11841,
                    "nodeType": "Block",
                    "src": "10500:114:29",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 11835,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 11830,
                                "name": "dividends",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11157,
                                "src": "10518:9:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                                  "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                                }
                              },
                              "id": 11832,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 11831,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11820,
                                "src": "10528:1:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10518:12:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                                "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                              }
                            },
                            "id": 11833,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "checkpointId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11133,
                            "src": "10518:25:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 11834,
                            "name": "_checkpointId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11809,
                            "src": "10547:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10518:42:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 11840,
                        "nodeType": "IfStatement",
                        "src": "10514:90:29",
                        "trueBody": {
                          "id": 11839,
                          "nodeType": "Block",
                          "src": "10562:42:29",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 11837,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "10580:9:29",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 11836,
                                  "name": "counter",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11816,
                                  "src": "10580:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 11838,
                              "nodeType": "ExpressionStatement",
                              "src": "10580:9:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 11826,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 11823,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11820,
                      "src": "10473:1:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 11824,
                        "name": "dividends",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11157,
                        "src": "10477:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                        }
                      },
                      "id": 11825,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "10477:16:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10473:20:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 11842,
                  "initializationExpression": {
                    "assignments": [
                      11820
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 11820,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 11890,
                        "src": "10458:9:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11819,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10458:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 11822,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 11821,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10470:1:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "10458:13:29"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 11828,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "10495:3:29",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 11827,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11820,
                        "src": "10495:1:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 11829,
                    "nodeType": "ExpressionStatement",
                    "src": "10495:3:29"
                  },
                  "nodeType": "ForStatement",
                  "src": "10454:160:29"
                },
                {
                  "assignments": [
                    11846
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11846,
                      "name": "index",
                      "nodeType": "VariableDeclaration",
                      "scope": 11890,
                      "src": "10623:22:29",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 11844,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10623:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 11845,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "10623:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11852,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11850,
                        "name": "counter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11816,
                        "src": "10662:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 11849,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "10648:13:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (uint256[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 11847,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10652:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 11848,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "10652:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      }
                    },
                    "id": 11851,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10648:22:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10623:47:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 11853,
                      "name": "counter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11816,
                      "src": "10679:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 11854,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10689:1:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "10679:11:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 11856,
                  "nodeType": "ExpressionStatement",
                  "src": "10679:11:29"
                },
                {
                  "body": {
                    "id": 11885,
                    "nodeType": "Block",
                    "src": "10745:145:29",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 11873,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 11868,
                                "name": "dividends",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11157,
                                "src": "10762:9:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                                  "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                                }
                              },
                              "id": 11870,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 11869,
                                "name": "j",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11858,
                                "src": "10772:1:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10762:12:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                                "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                              }
                            },
                            "id": 11871,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "checkpointId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11133,
                            "src": "10762:25:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 11872,
                            "name": "_checkpointId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11809,
                            "src": "10791:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10762:42:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 11884,
                        "nodeType": "IfStatement",
                        "src": "10758:123:29",
                        "trueBody": {
                          "id": 11883,
                          "nodeType": "Block",
                          "src": "10806:75:29",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 11878,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 11874,
                                    "name": "index",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11846,
                                    "src": "10823:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 11876,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 11875,
                                    "name": "counter",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11816,
                                    "src": "10829:7:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "10823:14:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 11877,
                                  "name": "j",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11858,
                                  "src": "10840:1:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10823:18:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 11879,
                              "nodeType": "ExpressionStatement",
                              "src": "10823:18:29"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 11881,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "10858:9:29",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 11880,
                                  "name": "counter",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11816,
                                  "src": "10858:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 11882,
                              "nodeType": "ExpressionStatement",
                              "src": "10858:9:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 11864,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 11861,
                      "name": "j",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11858,
                      "src": "10718:1:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 11862,
                        "name": "dividends",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11157,
                        "src": "10722:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                        }
                      },
                      "id": 11863,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "10722:16:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10718:20:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 11886,
                  "initializationExpression": {
                    "assignments": [
                      11858
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 11858,
                        "name": "j",
                        "nodeType": "VariableDeclaration",
                        "scope": 11890,
                        "src": "10703:9:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11857,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10703:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 11860,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 11859,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10715:1:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "10703:13:29"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 11866,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "10740:3:29",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 11865,
                        "name": "j",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11858,
                        "src": "10740:1:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 11867,
                    "nodeType": "ExpressionStatement",
                    "src": "10740:3:29"
                  },
                  "nodeType": "ForStatement",
                  "src": "10699:191:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11887,
                    "name": "index",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11846,
                    "src": "10905:5:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "functionReturnParameters": 11814,
                  "id": 11888,
                  "nodeType": "Return",
                  "src": "10898:12:29"
                }
              ]
            },
            "documentation": "@notice Get the index according to the checkpoint id\n@param _checkpointId Checkpoint id to query\n@return uint256",
            "id": 11890,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDividendIndex",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11810,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11809,
                  "name": "_checkpointId",
                  "nodeType": "VariableDeclaration",
                  "scope": 11890,
                  "src": "10361:21:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11808,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10361:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10360:23:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11814,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11813,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11890,
                  "src": "10404:9:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 11811,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "10404:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 11812,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "10404:9:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10403:11:29"
            },
            "scope": 11916,
            "src": "10335:582:29",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11914,
              "nodeType": "Block",
              "src": "11097:138:29",
              "statements": [
                {
                  "assignments": [
                    11899
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11899,
                      "name": "allPermissions",
                      "nodeType": "VariableDeclaration",
                      "scope": 11915,
                      "src": "11107:31:29",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 11897,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "11107:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 11898,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "11107:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11905,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 11903,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11155:1:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 11902,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "11141:13:29",
                      "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": 11900,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "11145:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 11901,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "11145:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 11904,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11141:16:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11107:50:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11910,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 11906,
                        "name": "allPermissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11899,
                        "src": "11167:14:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 11908,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 11907,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11182:1:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "11167:17:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 11909,
                      "name": "DISTRIBUTE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11131,
                      "src": "11187:10:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "11167:30:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 11911,
                  "nodeType": "ExpressionStatement",
                  "src": "11167:30:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11912,
                    "name": "allPermissions",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11899,
                    "src": "11214:14:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 11895,
                  "id": 11913,
                  "nodeType": "Return",
                  "src": "11207:21:29"
                }
              ]
            },
            "documentation": "@notice Return the permissions flag that are associated with STO\n@return bytes32 array",
            "id": 11915,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11891,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11063:2:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11895,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11894,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11915,
                  "src": "11086:9:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 11892,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "11086:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 11893,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11086:9:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11085:11:29"
            },
            "scope": 11916,
            "src": "11040:195:29",
            "stateMutability": "view",
            "superFunction": 9687,
            "visibility": "public"
          }
        ],
        "scope": 11917,
        "src": "739:10499:29"
      }
    ],
    "src": "0:11239:29"
  },
  "legacyAST": {
    "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/Checkpoint/ERC20DividendCheckpoint.sol",
    "exportedSymbols": {
      "ERC20DividendCheckpoint": [
        11916
      ]
    },
    "id": 11917,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 11118,
        "literals": [
          "solidity",
          "^",
          "0.4",
          ".24"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:24:29"
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/modules/Checkpoint/ICheckpoint.sol",
        "file": "./ICheckpoint.sol",
        "id": 11119,
        "nodeType": "ImportDirective",
        "scope": 11917,
        "sourceUnit": 12950,
        "src": "26:27:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/satyamagrawal/Repositories/testing-package/polymath-core/contracts/interfaces/ISecurityToken.sol",
        "file": "../../interfaces/ISecurityToken.sol",
        "id": 11120,
        "nodeType": "ImportDirective",
        "scope": 11917,
        "sourceUnit": 10160,
        "src": "54:45:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "file": "openzeppelin-solidity/contracts/math/SafeMath.sol",
        "id": 11121,
        "nodeType": "ImportDirective",
        "scope": 11917,
        "sourceUnit": 22579,
        "src": "100:59:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/math/Math.sol",
        "file": "openzeppelin-solidity/contracts/math/Math.sol",
        "id": 11122,
        "nodeType": "ImportDirective",
        "scope": 11917,
        "sourceUnit": 22485,
        "src": "160:55:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol",
        "id": 11123,
        "nodeType": "ImportDirective",
        "scope": 11917,
        "sourceUnit": 22838,
        "src": "216:63:29",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 11124,
              "name": "ICheckpoint",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 12949,
              "src": "775:11:29",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ICheckpoint_$12949",
                "typeString": "contract ICheckpoint"
              }
            },
            "id": 11125,
            "nodeType": "InheritanceSpecifier",
            "src": "775:11:29"
          }
        ],
        "contractDependencies": [
          9717,
          12949
        ],
        "contractKind": "contract",
        "documentation": "@title Checkpoint module for issuing ERC20 dividends",
        "fullyImplemented": true,
        "id": 11916,
        "linearizedBaseContracts": [
          11916,
          12949,
          9717
        ],
        "name": "ERC20DividendCheckpoint",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 11128,
            "libraryName": {
              "contractScope": null,
              "id": 11126,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 22578,
              "src": "799:8:29",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$22578",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "793:27:29",
            "typeName": {
              "id": 11127,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "812:7:29",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "constant": true,
            "id": 11131,
            "name": "DISTRIBUTE",
            "nodeType": "VariableDeclaration",
            "scope": 11916,
            "src": "826:49:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 11129,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "826:7:29",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "44495354524942555445",
              "id": 11130,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "string",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "863:12:29",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_stringliteral_ca4be9bd739a9ff5362f4ef138b18f1b41c542345f6f1c2ebd90f78da1e5b354",
                "typeString": "literal_string \"DISTRIBUTE\""
              },
              "value": "DISTRIBUTE"
            },
            "visibility": "public"
          },
          {
            "canonicalName": "ERC20DividendCheckpoint.Dividend",
            "id": 11154,
            "members": [
              {
                "constant": false,
                "id": 11133,
                "name": "checkpointId",
                "nodeType": "VariableDeclaration",
                "scope": 11154,
                "src": "906:20:29",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 11132,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "906:7:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 11135,
                "name": "created",
                "nodeType": "VariableDeclaration",
                "scope": 11154,
                "src": "934:15:29",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 11134,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "934:7:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 11137,
                "name": "maturity",
                "nodeType": "VariableDeclaration",
                "scope": 11154,
                "src": "999:16:29",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 11136,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "999:7:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 11139,
                "name": "expiry",
                "nodeType": "VariableDeclaration",
                "scope": 11154,
                "src": "1088:14:29",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 11138,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1088:7:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 11141,
                "name": "token",
                "nodeType": "VariableDeclaration",
                "scope": 11154,
                "src": "1256:13:29",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 11140,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1256:7:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 11143,
                "name": "amount",
                "nodeType": "VariableDeclaration",
                "scope": 11154,
                "src": "1335:14:29",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 11142,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1335:7:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 11145,
                "name": "claimedAmount",
                "nodeType": "VariableDeclaration",
                "scope": 11154,
                "src": "1398:21:29",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 11144,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1398:7:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 11147,
                "name": "totalSupply",
                "nodeType": "VariableDeclaration",
                "scope": 11154,
                "src": "1464:19:29",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 11146,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1464:7:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 11149,
                "name": "reclaimed",
                "nodeType": "VariableDeclaration",
                "scope": 11154,
                "src": "1564:14:29",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 11148,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "1564:4:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 11153,
                "name": "claimed",
                "nodeType": "VariableDeclaration",
                "scope": 11154,
                "src": "1586:33:29",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                  "typeString": "mapping(address => bool)"
                },
                "typeName": {
                  "id": 11152,
                  "keyType": {
                    "id": 11150,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1595:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "1586:25:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                    "typeString": "mapping(address => bool)"
                  },
                  "valueType": {
                    "id": 11151,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1606:4:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Dividend",
            "nodeType": "StructDefinition",
            "scope": 11916,
            "src": "882:793:29",
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 11157,
            "name": "dividends",
            "nodeType": "VariableDeclaration",
            "scope": 11916,
            "src": "1710:27:29",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
              "typeString": "struct ERC20DividendCheckpoint.Dividend[]"
            },
            "typeName": {
              "baseType": {
                "contractScope": null,
                "id": 11155,
                "name": "Dividend",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 11154,
                "src": "1710:8:29",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                  "typeString": "struct ERC20DividendCheckpoint.Dividend"
                }
              },
              "id": 11156,
              "length": null,
              "nodeType": "ArrayTypeName",
              "src": "1710:10:29",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage_ptr",
                "typeString": "struct ERC20DividendCheckpoint.Dividend[]"
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 11177,
            "name": "ERC20DividendDeposited",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 11176,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11159,
                  "indexed": true,
                  "name": "_depositor",
                  "nodeType": "VariableDeclaration",
                  "scope": 11177,
                  "src": "1773:26:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11158,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1773:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11161,
                  "indexed": false,
                  "name": "_checkpointId",
                  "nodeType": "VariableDeclaration",
                  "scope": 11177,
                  "src": "1801:21:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11160,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1801:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11163,
                  "indexed": false,
                  "name": "_created",
                  "nodeType": "VariableDeclaration",
                  "scope": 11177,
                  "src": "1824:16:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11162,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1824:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11165,
                  "indexed": false,
                  "name": "_maturity",
                  "nodeType": "VariableDeclaration",
                  "scope": 11177,
                  "src": "1842:17:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11164,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1842:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11167,
                  "indexed": false,
                  "name": "_expiry",
                  "nodeType": "VariableDeclaration",
                  "scope": 11177,
                  "src": "1861:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11166,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1861:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11169,
                  "indexed": false,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 11177,
                  "src": "1878:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11168,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1878:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11171,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 11177,
                  "src": "1894:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11170,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1894:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11173,
                  "indexed": false,
                  "name": "_totalSupply",
                  "nodeType": "VariableDeclaration",
                  "scope": 11177,
                  "src": "1911:20:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11172,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1911:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11175,
                  "indexed": false,
                  "name": "_dividendIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 11177,
                  "src": "1933:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11174,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1933:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1772:184:29"
            },
            "src": "1744:213:29"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 11187,
            "name": "ERC20DividendClaimed",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 11186,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11179,
                  "indexed": true,
                  "name": "_payee",
                  "nodeType": "VariableDeclaration",
                  "scope": 11187,
                  "src": "1989:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11178,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1989:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11181,
                  "indexed": false,
                  "name": "_dividendIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 11187,
                  "src": "2013:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11180,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2013:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11183,
                  "indexed": false,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 11187,
                  "src": "2037:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11182,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2037:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11185,
                  "indexed": false,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 11187,
                  "src": "2053:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11184,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2053:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1988:81:29"
            },
            "src": "1962:108:29"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 11197,
            "name": "ERC20DividendReclaimed",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 11196,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11189,
                  "indexed": true,
                  "name": "_claimer",
                  "nodeType": "VariableDeclaration",
                  "scope": 11197,
                  "src": "2104:24:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11188,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2104:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11191,
                  "indexed": false,
                  "name": "_dividendIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 11197,
                  "src": "2130:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11190,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2130:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11193,
                  "indexed": false,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 11197,
                  "src": "2154:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11192,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2154:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11195,
                  "indexed": false,
                  "name": "_claimedAmount",
                  "nodeType": "VariableDeclaration",
                  "scope": 11197,
                  "src": "2170:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11194,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2170:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2103:90:29"
            },
            "src": "2075:119:29"
          },
          {
            "body": {
              "id": 11239,
              "nodeType": "Block",
              "src": "2252:383:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11205,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11202,
                          "name": "_dividendIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11199,
                          "src": "2270:14:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 11203,
                            "name": "dividends",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11157,
                            "src": "2287:9:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                              "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                            }
                          },
                          "id": 11204,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "2287:16:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2270:33:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e636f7272656374206469766964656e6420696e646578",
                        "id": 11206,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2305:26:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_493598b4f85c7110e712482cd4f4c764fe64a77e153f7dd336580d7956ede6a0",
                          "typeString": "literal_string \"Incorrect dividend index\""
                        },
                        "value": "Incorrect dividend index"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_493598b4f85c7110e712482cd4f4c764fe64a77e153f7dd336580d7956ede6a0",
                          "typeString": "literal_string \"Incorrect dividend index\""
                        }
                      ],
                      "id": 11201,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "2262:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11207,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2262:70:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11208,
                  "nodeType": "ExpressionStatement",
                  "src": "2262:70:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11215,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11210,
                          "name": "now",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23133,
                          "src": "2350:3:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 11211,
                              "name": "dividends",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11157,
                              "src": "2357:9:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                                "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                              }
                            },
                            "id": 11213,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 11212,
                              "name": "_dividendIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11199,
                              "src": "2367:14:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2357:25:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                              "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                            }
                          },
                          "id": 11214,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "maturity",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11137,
                          "src": "2357:34:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2350:41:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4469766964656e64206d6174757269747920697320696e2074686520667574757265",
                        "id": 11216,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2393:36:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_63322e13adabbf379a54e39e04fa0c750bb517eee0b29cbcd78f4f7e2625966b",
                          "typeString": "literal_string \"Dividend maturity is in the future\""
                        },
                        "value": "Dividend maturity is in the future"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_63322e13adabbf379a54e39e04fa0c750bb517eee0b29cbcd78f4f7e2625966b",
                          "typeString": "literal_string \"Dividend maturity is in the future\""
                        }
                      ],
                      "id": 11209,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "2342:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11217,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2342:88:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11218,
                  "nodeType": "ExpressionStatement",
                  "src": "2342:88:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11225,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11220,
                          "name": "now",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23133,
                          "src": "2448:3:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 11221,
                              "name": "dividends",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11157,
                              "src": "2454:9:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                                "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                              }
                            },
                            "id": 11223,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 11222,
                              "name": "_dividendIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11199,
                              "src": "2464:14:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2454:25:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                              "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                            }
                          },
                          "id": 11224,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "expiry",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11139,
                          "src": "2454:32:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "2448:38:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4469766964656e642065787069727920697320696e207468652070617374",
                        "id": 11226,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2488:32:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3a8d6d593aece756e87679a0e9860056caa9290c209985c444a5dfcedcbfb212",
                          "typeString": "literal_string \"Dividend expiry is in the past\""
                        },
                        "value": "Dividend expiry is in the past"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3a8d6d593aece756e87679a0e9860056caa9290c209985c444a5dfcedcbfb212",
                          "typeString": "literal_string \"Dividend expiry is in the past\""
                        }
                      ],
                      "id": 11219,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "2440:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11227,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2440:81:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11228,
                  "nodeType": "ExpressionStatement",
                  "src": "2440:81:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11234,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "2539:36:29",
                        "subExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 11230,
                              "name": "dividends",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11157,
                              "src": "2540:9:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                                "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                              }
                            },
                            "id": 11232,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 11231,
                              "name": "_dividendIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11199,
                              "src": "2550:14:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "2540:25:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                              "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                            }
                          },
                          "id": 11233,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "reclaimed",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11149,
                          "src": "2540:35:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4469766964656e6420686173206265656e207265636c61696d656420627920697373756572",
                        "id": 11235,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2577:39:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b568a7d8822e7fc758f05cb1eab8f71b5fd4d1887ac3d7f57de02dd397af7d10",
                          "typeString": "literal_string \"Dividend has been reclaimed by issuer\""
                        },
                        "value": "Dividend has been reclaimed by issuer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b568a7d8822e7fc758f05cb1eab8f71b5fd4d1887ac3d7f57de02dd397af7d10",
                          "typeString": "literal_string \"Dividend has been reclaimed by issuer\""
                        }
                      ],
                      "id": 11229,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "2531:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11236,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2531:86:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11237,
                  "nodeType": "ExpressionStatement",
                  "src": "2531:86:29"
                },
                {
                  "id": 11238,
                  "nodeType": "PlaceholderStatement",
                  "src": "2627:1:29"
                }
              ]
            },
            "documentation": null,
            "id": 11240,
            "name": "validDividendIndex",
            "nodeType": "ModifierDefinition",
            "parameters": {
              "id": 11200,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11199,
                  "name": "_dividendIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 11240,
                  "src": "2228:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11198,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2228:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2227:24:29"
            },
            "src": "2200:435:29",
            "visibility": "internal"
          },
          {
            "body": {
              "id": 11251,
              "nodeType": "Block",
              "src": "2907:7:29",
              "statements": []
            },
            "documentation": "@notice Constructor\n@param _securityToken Address of the security token\n@param _polyAddress Address of the polytoken",
            "id": 11252,
            "implemented": true,
            "isConstructor": true,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11247,
                    "name": "_securityToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11242,
                    "src": "2873:14:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  {
                    "argumentTypes": null,
                    "id": 11248,
                    "name": "_polyAddress",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11244,
                    "src": "2889:12:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 11249,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11246,
                  "name": "IModule",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9717,
                  "src": "2865:7:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_IModule_$9717_$",
                    "typeString": "type(contract IModule)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2865:37:29"
              }
            ],
            "name": "",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11245,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11242,
                  "name": "_securityToken",
                  "nodeType": "VariableDeclaration",
                  "scope": 11252,
                  "src": "2808:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11241,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2808:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11244,
                  "name": "_polyAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 11252,
                  "src": "2832:20:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11243,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2832:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2807:46:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11250,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2907:0:29"
            },
            "scope": 11916,
            "src": "2795:119:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11261,
              "nodeType": "Block",
              "src": "3113:33:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 11258,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3137:1:29",
                        "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": 11257,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "3130:6:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes4_$",
                        "typeString": "type(bytes4)"
                      },
                      "typeName": "bytes4"
                    },
                    "id": 11259,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3130:9:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "functionReturnParameters": 11256,
                  "id": 11260,
                  "nodeType": "Return",
                  "src": "3123:16:29"
                }
              ]
            },
            "documentation": "@notice Init function i.e generalise function to maintain the structure of the module contract\n@return bytes4",
            "id": 11262,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getInitFunction",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11253,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3081:2:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11256,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11255,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11262,
                  "src": "3105:6:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes4",
                    "typeString": "bytes4"
                  },
                  "typeName": {
                    "id": 11254,
                    "name": "bytes4",
                    "nodeType": "ElementaryTypeName",
                    "src": "3105:6:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes4",
                      "typeString": "bytes4"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3104:8:29"
            },
            "scope": 11916,
            "src": "3057:89:29",
            "stateMutability": "pure",
            "superFunction": 9594,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11366,
              "nodeType": "Block",
              "src": "3645:867:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11278,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11276,
                          "name": "_expiry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11266,
                          "src": "3663:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 11277,
                          "name": "_maturity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11264,
                          "src": "3673:9:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3663:19:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 11275,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "3655:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 11279,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3655:28:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11280,
                  "nodeType": "ExpressionStatement",
                  "src": "3655:28:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11284,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11282,
                          "name": "_expiry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11266,
                          "src": "3701:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 11283,
                          "name": "now",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23133,
                          "src": "3711:3:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "3701:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 11281,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "3693:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 11285,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3693:22:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11286,
                  "nodeType": "ExpressionStatement",
                  "src": "3693:22:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 11292,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11288,
                          "name": "_token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11268,
                          "src": "3733:6:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 11290,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3751:1:29",
                              "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": 11289,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3743:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": "address"
                          },
                          "id": 11291,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3743:10:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "3733:20:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 11287,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "3725:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 11293,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3725:29:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11294,
                  "nodeType": "ExpressionStatement",
                  "src": "3725:29:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11298,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11296,
                          "name": "_amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11270,
                          "src": "3772:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 11297,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "3782:1:29",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "3772:11:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 11295,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "3764:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 11299,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3764:20:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11300,
                  "nodeType": "ExpressionStatement",
                  "src": "3764:20:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 11306,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "3829:3:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 11307,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "3829:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 11309,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23260,
                                "src": "3849:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20DividendCheckpoint_$11916",
                                  "typeString": "contract ERC20DividendCheckpoint"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20DividendCheckpoint_$11916",
                                  "typeString": "contract ERC20DividendCheckpoint"
                                }
                              ],
                              "id": 11308,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3841:7:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 11310,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3841:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11311,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11270,
                            "src": "3856:7:29",
                            "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,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 11303,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11268,
                                "src": "3808:6:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 11302,
                              "name": "ERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22837,
                              "src": "3802:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC20_$22837_$",
                                "typeString": "type(contract ERC20)"
                              }
                            },
                            "id": 11304,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3802:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 11305,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22819,
                          "src": "3802:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) external returns (bool)"
                          }
                        },
                        "id": 11312,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3802:62:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "556e61626c6520746f207472616e7366657220746f6b656e7320666f72206469766964656e64",
                        "id": 11313,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3866:40:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6c1e0aa7d60cd08801d8deb27e6355a9cc13c12c5eac339c24efbf22860765e0",
                          "typeString": "literal_string \"Unable to transfer tokens for dividend\""
                        },
                        "value": "Unable to transfer tokens for dividend"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6c1e0aa7d60cd08801d8deb27e6355a9cc13c12c5eac339c24efbf22860765e0",
                          "typeString": "literal_string \"Unable to transfer tokens for dividend\""
                        }
                      ],
                      "id": 11301,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "3794:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3794:113:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11315,
                  "nodeType": "ExpressionStatement",
                  "src": "3794:113:29"
                },
                {
                  "assignments": [
                    11317
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11317,
                      "name": "dividendIndex",
                      "nodeType": "VariableDeclaration",
                      "scope": 11367,
                      "src": "3917:21:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11316,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3917:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11320,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 11318,
                      "name": "dividends",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11157,
                      "src": "3941:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                      }
                    },
                    "id": 11319,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "3941:16:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3917:40:29"
                },
                {
                  "assignments": [
                    11322
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11322,
                      "name": "checkpointId",
                      "nodeType": "VariableDeclaration",
                      "scope": 11367,
                      "src": "3967:20:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11321,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "3967:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11328,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11324,
                            "name": "securityToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9561,
                            "src": "4005:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 11323,
                          "name": "ISecurityToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10159,
                          "src": "3990:14:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ISecurityToken_$10159_$",
                            "typeString": "type(contract ISecurityToken)"
                          }
                        },
                        "id": 11325,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3990:29:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                          "typeString": "contract ISecurityToken"
                        }
                      },
                      "id": 11326,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "createCheckpoint",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10153,
                      "src": "3990:46:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$__$returns$_t_uint256_$",
                        "typeString": "function () external returns (uint256)"
                      }
                    },
                    "id": 11327,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3990:48:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3967:71:29"
                },
                {
                  "assignments": [
                    11330
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11330,
                      "name": "currentSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 11367,
                      "src": "4048:21:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11329,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "4048:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11336,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11332,
                            "name": "securityToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9561,
                            "src": "4087:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 11331,
                          "name": "ISecurityToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10159,
                          "src": "4072:14:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ISecurityToken_$10159_$",
                            "typeString": "type(contract ISecurityToken)"
                          }
                        },
                        "id": 11333,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4072:29:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                          "typeString": "contract ISecurityToken"
                        }
                      },
                      "id": 11334,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupply",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22687,
                      "src": "4072:41:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 11335,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4072:43:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4048:67:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11341,
                            "name": "checkpointId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11322,
                            "src": "4173:12:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11342,
                            "name": "now",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23133,
                            "src": "4199:3:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11343,
                            "name": "_maturity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11264,
                            "src": "4216:9:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11344,
                            "name": "_expiry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11266,
                            "src": "4239:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11345,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11268,
                            "src": "4260:6:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11346,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11270,
                            "src": "4280:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 11347,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4301:1:29",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          {
                            "argumentTypes": null,
                            "id": 11348,
                            "name": "currentSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11330,
                            "src": "4316:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 11349,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4343:5:29",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          ],
                          "id": 11340,
                          "name": "Dividend",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11154,
                          "src": "4151:8:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Dividend_$11154_storage_ptr_$",
                            "typeString": "type(struct ERC20DividendCheckpoint.Dividend storage pointer)"
                          }
                        },
                        "id": 11350,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4151:209:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_memory",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Dividend_$11154_memory",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 11337,
                        "name": "dividends",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11157,
                        "src": "4125:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                        }
                      },
                      "id": 11339,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "4125:14:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_Dividend_$11154_storage_$returns$_t_uint256_$",
                        "typeString": "function (struct ERC20DividendCheckpoint.Dividend storage ref) returns (uint256)"
                      }
                    },
                    "id": 11351,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4125:245:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 11352,
                  "nodeType": "ExpressionStatement",
                  "src": "4125:245:29"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11354,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "4408:3:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 11355,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "4408:10:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11356,
                        "name": "checkpointId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11322,
                        "src": "4420:12:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11357,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "4434:3:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11358,
                        "name": "_maturity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11264,
                        "src": "4439:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11359,
                        "name": "_expiry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11266,
                        "src": "4450:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11360,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11268,
                        "src": "4459:6:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11361,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11270,
                        "src": "4467:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11362,
                        "name": "currentSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11330,
                        "src": "4476:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11363,
                        "name": "dividendIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11317,
                        "src": "4491:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 11353,
                      "name": "ERC20DividendDeposited",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11177,
                      "src": "4385:22:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 11364,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4385:120:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11365,
                  "nodeType": "EmitStatement",
                  "src": "4380:125:29"
                }
              ]
            },
            "documentation": "@notice Creates a dividend and checkpoint for the dividend\n@param _maturity Time from which dividend can be paid\n@param _expiry Time until dividend can no longer be paid, and can be reclaimed by issuer\n@param _token Address of ERC20 token in which dividend is to be denominated\n@param _amount Amount of specified token for dividend",
            "id": 11367,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 11273,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11272,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9653,
                  "src": "3635:9:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3635:9:29"
              }
            ],
            "name": "createDividend",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11271,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11264,
                  "name": "_maturity",
                  "nodeType": "VariableDeclaration",
                  "scope": 11367,
                  "src": "3559:17:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11263,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3559:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11266,
                  "name": "_expiry",
                  "nodeType": "VariableDeclaration",
                  "scope": 11367,
                  "src": "3578:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11265,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3578:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11268,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 11367,
                  "src": "3595:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11267,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3595:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11270,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 11367,
                  "src": "3611:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11269,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3611:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3558:69:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11274,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3645:0:29"
            },
            "scope": 11916,
            "src": "3535:977:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11462,
              "nodeType": "Block",
              "src": "5124:821:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11385,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11383,
                          "name": "_expiry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11371,
                          "src": "5142:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 11384,
                          "name": "_maturity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11369,
                          "src": "5152:9:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5142:19:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 11382,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "5134:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 11386,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5134:28:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11387,
                  "nodeType": "ExpressionStatement",
                  "src": "5134:28:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11391,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11389,
                          "name": "_expiry",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11371,
                          "src": "5180:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 11390,
                          "name": "now",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23133,
                          "src": "5190:3:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5180:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 11388,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "5172:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 11392,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5172:22:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11393,
                  "nodeType": "ExpressionStatement",
                  "src": "5172:22:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11401,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11395,
                          "name": "_checkpointId",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11377,
                          "src": "5212:13:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 11397,
                                  "name": "securityToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9561,
                                  "src": "5244:13:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 11396,
                                "name": "ISecurityToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10159,
                                "src": "5229:14:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ISecurityToken_$10159_$",
                                  "typeString": "type(contract ISecurityToken)"
                                }
                              },
                              "id": 11398,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "5229:29:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                                "typeString": "contract ISecurityToken"
                              }
                            },
                            "id": 11399,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "currentCheckpointId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 10094,
                            "src": "5229:49:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                              "typeString": "function () view external returns (uint256)"
                            }
                          },
                          "id": 11400,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5229:51:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "5212:68:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 11394,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23134,
                      "src": "5204:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$",
                        "typeString": "function (bool) pure"
                      }
                    },
                    "id": 11402,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5204:77:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11403,
                  "nodeType": "ExpressionStatement",
                  "src": "5204:77:29"
                },
                {
                  "assignments": [
                    11405
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11405,
                      "name": "dividendIndex",
                      "nodeType": "VariableDeclaration",
                      "scope": 11463,
                      "src": "5291:21:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11404,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5291:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11408,
                  "initialValue": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 11406,
                      "name": "dividends",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11157,
                      "src": "5315:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                      }
                    },
                    "id": 11407,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "length",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "5315:16:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5291:40:29"
                },
                {
                  "assignments": [
                    11410
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11410,
                      "name": "currentSupply",
                      "nodeType": "VariableDeclaration",
                      "scope": 11463,
                      "src": "5341:21:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11409,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "5341:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11417,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11415,
                        "name": "_checkpointId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11377,
                        "src": "5409:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11412,
                            "name": "securityToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9561,
                            "src": "5380:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 11411,
                          "name": "ISecurityToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10159,
                          "src": "5365:14:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ISecurityToken_$10159_$",
                            "typeString": "type(contract ISecurityToken)"
                          }
                        },
                        "id": 11413,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5365:29:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                          "typeString": "contract ISecurityToken"
                        }
                      },
                      "id": 11414,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "totalSupplyAt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10139,
                      "src": "5365:43:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256) view external returns (uint256)"
                      }
                    },
                    "id": 11416,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5365:58:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5341:82:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 11423,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "5468:3:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 11424,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "5468:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 11426,
                                "name": "this",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 23260,
                                "src": "5488:4:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_ERC20DividendCheckpoint_$11916",
                                  "typeString": "contract ERC20DividendCheckpoint"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_ERC20DividendCheckpoint_$11916",
                                  "typeString": "contract ERC20DividendCheckpoint"
                                }
                              ],
                              "id": 11425,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "5480:7:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": "address"
                            },
                            "id": 11427,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5480:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11428,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11375,
                            "src": "5495:7:29",
                            "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,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 11420,
                                "name": "_token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11373,
                                "src": "5447:6:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 11419,
                              "name": "ERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22837,
                              "src": "5441:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC20_$22837_$",
                                "typeString": "type(contract ERC20)"
                              }
                            },
                            "id": 11421,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5441:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 11422,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transferFrom",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22819,
                          "src": "5441:26:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,address,uint256) external returns (bool)"
                          }
                        },
                        "id": 11429,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5441:62:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "556e61626c6520746f207472616e7366657220746f6b656e7320666f72206469766964656e64",
                        "id": 11430,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5505:40:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6c1e0aa7d60cd08801d8deb27e6355a9cc13c12c5eac339c24efbf22860765e0",
                          "typeString": "literal_string \"Unable to transfer tokens for dividend\""
                        },
                        "value": "Unable to transfer tokens for dividend"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6c1e0aa7d60cd08801d8deb27e6355a9cc13c12c5eac339c24efbf22860765e0",
                          "typeString": "literal_string \"Unable to transfer tokens for dividend\""
                        }
                      ],
                      "id": 11418,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "5433:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11431,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5433:113:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11432,
                  "nodeType": "ExpressionStatement",
                  "src": "5433:113:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11437,
                            "name": "_checkpointId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11377,
                            "src": "5604:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11438,
                            "name": "now",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 23133,
                            "src": "5631:3:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11439,
                            "name": "_maturity",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11369,
                            "src": "5648:9:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11440,
                            "name": "_expiry",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11371,
                            "src": "5671:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11441,
                            "name": "_token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11373,
                            "src": "5692:6:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11442,
                            "name": "_amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11375,
                            "src": "5712:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 11443,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5733:1:29",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          {
                            "argumentTypes": null,
                            "id": 11444,
                            "name": "currentSupply",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11410,
                            "src": "5748:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "hexValue": "66616c7365",
                            "id": 11445,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5775:5:29",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "false"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          ],
                          "id": 11436,
                          "name": "Dividend",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11154,
                          "src": "5582:8:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_struct$_Dividend_$11154_storage_ptr_$",
                            "typeString": "type(struct ERC20DividendCheckpoint.Dividend storage pointer)"
                          }
                        },
                        "id": 11446,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "structConstructorCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5582:210:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_memory",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Dividend_$11154_memory",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend memory"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 11433,
                        "name": "dividends",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11157,
                        "src": "5556:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                        }
                      },
                      "id": 11435,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "push",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "5556:14:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_arraypush_nonpayable$_t_struct$_Dividend_$11154_storage_$returns$_t_uint256_$",
                        "typeString": "function (struct ERC20DividendCheckpoint.Dividend storage ref) returns (uint256)"
                      }
                    },
                    "id": 11447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5556:246:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 11448,
                  "nodeType": "ExpressionStatement",
                  "src": "5556:246:29"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11450,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "5840:3:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 11451,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "5840:10:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11452,
                        "name": "_checkpointId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11377,
                        "src": "5852:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11453,
                        "name": "now",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 23133,
                        "src": "5867:3:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11454,
                        "name": "_maturity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11369,
                        "src": "5872:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11455,
                        "name": "_expiry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11371,
                        "src": "5883:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11456,
                        "name": "_token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11373,
                        "src": "5892:6:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11457,
                        "name": "_amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11375,
                        "src": "5900:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11458,
                        "name": "currentSupply",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11410,
                        "src": "5909:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11459,
                        "name": "dividendIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11405,
                        "src": "5924:13:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 11449,
                      "name": "ERC20DividendDeposited",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11177,
                      "src": "5817:22:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,uint256,uint256,uint256,address,uint256,uint256,uint256)"
                      }
                    },
                    "id": 11460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5817:121:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11461,
                  "nodeType": "EmitStatement",
                  "src": "5812:126:29"
                }
              ]
            },
            "documentation": "@notice Creates a dividend with a provided checkpoint\n@param _maturity Time from which dividend can be paid\n@param _expiry Time until dividend can no longer be paid, and can be reclaimed by issuer\n@param _token Address of ERC20 token in which dividend is to be denominated\n@param _amount Amount of specified token for dividend\n@param _checkpointId Checkpoint id from which to create dividends",
            "id": 11463,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 11380,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11379,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9653,
                  "src": "5114:9:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5114:9:29"
              }
            ],
            "name": "createDividendWithCheckpoint",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11378,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11369,
                  "name": "_maturity",
                  "nodeType": "VariableDeclaration",
                  "scope": 11463,
                  "src": "5007:17:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11368,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5007:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11371,
                  "name": "_expiry",
                  "nodeType": "VariableDeclaration",
                  "scope": 11463,
                  "src": "5026:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11370,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5026:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11373,
                  "name": "_token",
                  "nodeType": "VariableDeclaration",
                  "scope": 11463,
                  "src": "5043:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11372,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5043:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11375,
                  "name": "_amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 11463,
                  "src": "5059:15:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11374,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5059:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11377,
                  "name": "_checkpointId",
                  "nodeType": "VariableDeclaration",
                  "scope": 11463,
                  "src": "5076:21:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11376,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5076:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5006:92:29"
            },
            "payable": true,
            "returnParameters": {
              "id": 11381,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5124:0:29"
            },
            "scope": 11916,
            "src": "4969:976:29",
            "stateMutability": "payable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11513,
              "nodeType": "Block",
              "src": "6284:266:29",
              "statements": [
                {
                  "assignments": [
                    11478
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11478,
                      "name": "dividend",
                      "nodeType": "VariableDeclaration",
                      "scope": 11514,
                      "src": "6294:25:29",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 11477,
                        "name": "Dividend",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 11154,
                        "src": "6294:8:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11482,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 11479,
                      "name": "dividends",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11157,
                      "src": "6322:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                      }
                    },
                    "id": 11481,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 11480,
                      "name": "_dividendIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11465,
                      "src": "6332:14:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6322:25:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                      "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6294:53:29"
                },
                {
                  "body": {
                    "id": 11511,
                    "nodeType": "Block",
                    "src": "6402:142:29",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 11500,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "6420:29:29",
                          "subExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 11494,
                                "name": "dividend",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11478,
                                "src": "6421:8:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                                  "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                                }
                              },
                              "id": 11495,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "claimed",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11153,
                              "src": "6421:16:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 11499,
                            "indexExpression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 11496,
                                "name": "_payees",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11468,
                                "src": "6438:7:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 11498,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 11497,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11484,
                                "src": "6446:1:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6438:10:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "6421:28:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 11510,
                        "nodeType": "IfStatement",
                        "src": "6416:118:29",
                        "trueBody": {
                          "id": 11509,
                          "nodeType": "Block",
                          "src": "6451:83:29",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 11502,
                                      "name": "_payees",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11468,
                                      "src": "6482:7:29",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 11504,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 11503,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 11484,
                                      "src": "6490:1:29",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "6482:10:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 11505,
                                    "name": "dividend",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11478,
                                    "src": "6494:8:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                                      "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 11506,
                                    "name": "_dividendIndex",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11465,
                                    "src": "6504:14:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                                      "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 11501,
                                  "name": "_payDividend",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11677,
                                  "src": "6469:12:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_struct$_Dividend_$11154_storage_ptr_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,struct ERC20DividendCheckpoint.Dividend storage pointer,uint256)"
                                  }
                                },
                                "id": 11507,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6469:50:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 11508,
                              "nodeType": "ExpressionStatement",
                              "src": "6469:50:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 11490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 11487,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11484,
                      "src": "6377:1:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 11488,
                        "name": "_payees",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11468,
                        "src": "6381:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 11489,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6381:14:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6377:18:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 11512,
                  "initializationExpression": {
                    "assignments": [
                      11484
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 11484,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 11514,
                        "src": "6362:9:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11483,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "6362:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 11486,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 11485,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6374:1:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "6362:13:29"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 11492,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6397:3:29",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 11491,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11484,
                        "src": "6397:1:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 11493,
                    "nodeType": "ExpressionStatement",
                    "src": "6397:3:29"
                  },
                  "nodeType": "ForStatement",
                  "src": "6357:187:29"
                }
              ]
            },
            "documentation": "@notice Issuer can push dividends to provided addresses\n@param _dividendIndex Dividend to push\n@param _payees Addresses to which to push the dividend",
            "id": 11514,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11471,
                    "name": "DISTRIBUTE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11131,
                    "src": "6237:10:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 11472,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11470,
                  "name": "withPerm",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9637,
                  "src": "6228:8:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6228:20:29"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11474,
                    "name": "_dividendIndex",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11465,
                    "src": "6268:14:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 11475,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11473,
                  "name": "validDividendIndex",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 11240,
                  "src": "6249:18:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6249:34:29"
              }
            ],
            "name": "pushDividendPaymentToAddresses",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11469,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11465,
                  "name": "_dividendIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 11514,
                  "src": "6178:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11464,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6178:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11468,
                  "name": "_payees",
                  "nodeType": "VariableDeclaration",
                  "scope": 11514,
                  "src": "6202:17:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 11466,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "6202:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 11467,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6202:9:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6177:43:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11476,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6284:0:29"
            },
            "scope": 11916,
            "src": "6138:412:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11584,
              "nodeType": "Block",
              "src": "7008:458:29",
              "statements": [
                {
                  "assignments": [
                    11530
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11530,
                      "name": "dividend",
                      "nodeType": "VariableDeclaration",
                      "scope": 11585,
                      "src": "7018:25:29",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 11529,
                        "name": "Dividend",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 11154,
                        "src": "7018:8:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11534,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 11531,
                      "name": "dividends",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11157,
                      "src": "7046:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                      }
                    },
                    "id": 11533,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 11532,
                      "name": "_dividendIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11516,
                      "src": "7056:14:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7046:25:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                      "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7018:53:29"
                },
                {
                  "assignments": [
                    11536
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11536,
                      "name": "numberInvestors",
                      "nodeType": "VariableDeclaration",
                      "scope": 11585,
                      "src": "7081:23:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11535,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7081:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11542,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 11538,
                            "name": "securityToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9561,
                            "src": "7122:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 11537,
                          "name": "ISecurityToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10159,
                          "src": "7107:14:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ISecurityToken_$10159_$",
                            "typeString": "type(contract ISecurityToken)"
                          }
                        },
                        "id": 11539,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7107:29:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                          "typeString": "contract ISecurityToken"
                        }
                      },
                      "id": 11540,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getInvestorsLength",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10158,
                      "src": "7107:48:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$__$returns$_t_uint256_$",
                        "typeString": "function () view external returns (uint256)"
                      }
                    },
                    "id": 11541,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7107:50:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7081:76:29"
                },
                {
                  "body": {
                    "id": 11582,
                    "nodeType": "Block",
                    "src": "7256:204:29",
                    "statements": [
                      {
                        "assignments": [
                          11561
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 11561,
                            "name": "payee",
                            "nodeType": "VariableDeclaration",
                            "scope": 11585,
                            "src": "7270:13:29",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 11560,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "7270:7:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 11568,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 11566,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11544,
                              "src": "7326:1:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 11563,
                                  "name": "securityToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 9561,
                                  "src": "7301:13:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 11562,
                                "name": "ISecurityToken",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 10159,
                                "src": "7286:14:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_ISecurityToken_$10159_$",
                                  "typeString": "type(contract ISecurityToken)"
                                }
                              },
                              "id": 11564,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "7286:29:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                                "typeString": "contract ISecurityToken"
                              }
                            },
                            "id": 11565,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "investors",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 10099,
                            "src": "7286:39:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_address_$",
                              "typeString": "function (uint256) view external returns (address)"
                            }
                          },
                          "id": 11567,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7286:42:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7270:58:29"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "id": 11573,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "!",
                          "prefix": true,
                          "src": "7346:24:29",
                          "subExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 11569,
                                "name": "dividend",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11530,
                                "src": "7347:8:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                                  "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                                }
                              },
                              "id": 11570,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "claimed",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11153,
                              "src": "7347:16:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 11572,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 11571,
                              "name": "payee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11561,
                              "src": "7364:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "7347:23:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 11581,
                        "nodeType": "IfStatement",
                        "src": "7342:108:29",
                        "trueBody": {
                          "id": 11580,
                          "nodeType": "Block",
                          "src": "7372:78:29",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 11575,
                                    "name": "payee",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11561,
                                    "src": "7403:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 11576,
                                    "name": "dividend",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11530,
                                    "src": "7410:8:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                                      "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 11577,
                                    "name": "_dividendIndex",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11516,
                                    "src": "7420:14:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                                      "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 11574,
                                  "name": "_payDividend",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11677,
                                  "src": "7390:12:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_struct$_Dividend_$11154_storage_ptr_$_t_uint256_$returns$__$",
                                    "typeString": "function (address,struct ERC20DividendCheckpoint.Dividend storage pointer,uint256)"
                                  }
                                },
                                "id": 11578,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7390:45:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 11579,
                              "nodeType": "ExpressionStatement",
                              "src": "7390:45:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 11556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 11547,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11544,
                      "src": "7192:1:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 11550,
                          "name": "numberInvestors",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11536,
                          "src": "7208:15:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 11553,
                              "name": "_iterations",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11520,
                              "src": "7236:11:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 11551,
                              "name": "_start",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11518,
                              "src": "7225:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 11552,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22577,
                            "src": "7225:10:29",
                            "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": 11554,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7225:23:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 11548,
                          "name": "Math",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22484,
                          "src": "7196:4:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_Math_$22484_$",
                            "typeString": "type(library Math)"
                          }
                        },
                        "id": 11549,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "min256",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22483,
                        "src": "7196:11:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 11555,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7196:53:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7192:57:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 11583,
                  "initializationExpression": {
                    "assignments": [
                      11544
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 11544,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 11585,
                        "src": "7172:9:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11543,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "7172:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 11546,
                    "initialValue": {
                      "argumentTypes": null,
                      "id": 11545,
                      "name": "_start",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11518,
                      "src": "7184:6:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "7172:18:29"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 11558,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "7251:3:29",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 11557,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11544,
                        "src": "7251:1:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 11559,
                    "nodeType": "ExpressionStatement",
                    "src": "7251:3:29"
                  },
                  "nodeType": "ForStatement",
                  "src": "7167:293:29"
                }
              ]
            },
            "documentation": "@notice Issuer can push dividends using the investor list from the security token\n@param _dividendIndex Dividend to push\n@param _start Index in investor list at which to start pushing dividends\n@param _iterations Number of addresses to push dividends for",
            "id": 11585,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11523,
                    "name": "DISTRIBUTE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11131,
                    "src": "6961:10:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 11524,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11522,
                  "name": "withPerm",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9637,
                  "src": "6952:8:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_bytes32_$",
                    "typeString": "modifier (bytes32)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6952:20:29"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11526,
                    "name": "_dividendIndex",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11516,
                    "src": "6992:14:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 11527,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11525,
                  "name": "validDividendIndex",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 11240,
                  "src": "6973:18:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6973:34:29"
              }
            ],
            "name": "pushDividendPayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11521,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11516,
                  "name": "_dividendIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 11585,
                  "src": "6884:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11515,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6884:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11518,
                  "name": "_start",
                  "nodeType": "VariableDeclaration",
                  "scope": 11585,
                  "src": "6908:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11517,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6908:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11520,
                  "name": "_iterations",
                  "nodeType": "VariableDeclaration",
                  "scope": 11585,
                  "src": "6924:19:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11519,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6924:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6883:61:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11528,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7008:0:29"
            },
            "scope": 11916,
            "src": "6855:611:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11616,
              "nodeType": "Block",
              "src": "7687:208:29",
              "statements": [
                {
                  "assignments": [
                    11594
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11594,
                      "name": "dividend",
                      "nodeType": "VariableDeclaration",
                      "scope": 11617,
                      "src": "7697:25:29",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 11593,
                        "name": "Dividend",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 11154,
                        "src": "7697:8:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11598,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 11595,
                      "name": "dividends",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11157,
                      "src": "7725:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                      }
                    },
                    "id": 11597,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 11596,
                      "name": "_dividendIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11587,
                      "src": "7735:14:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7725:25:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                      "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7697:53:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11605,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "7768:29:29",
                        "subExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 11600,
                              "name": "dividend",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11594,
                              "src": "7769:8:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                                "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                              }
                            },
                            "id": 11601,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "claimed",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11153,
                            "src": "7769:16:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                              "typeString": "mapping(address => bool)"
                            }
                          },
                          "id": 11604,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 11602,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "7786:3:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 11603,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "7786:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "7769:28:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4469766964656e6420616c7265616479207265636c61696d6564",
                        "id": 11606,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7799:28:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1714a10a81f7397348bdfa274c2f8a2730e99ed44f16c5ab4a0ced56e1a7a11c",
                          "typeString": "literal_string \"Dividend already reclaimed\""
                        },
                        "value": "Dividend already reclaimed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1714a10a81f7397348bdfa274c2f8a2730e99ed44f16c5ab4a0ced56e1a7a11c",
                          "typeString": "literal_string \"Dividend already reclaimed\""
                        }
                      ],
                      "id": 11599,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "7760:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11607,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7760:68:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11608,
                  "nodeType": "ExpressionStatement",
                  "src": "7760:68:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11610,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "7851:3:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 11611,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7851:10:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11612,
                        "name": "dividend",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11594,
                        "src": "7863:8:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11613,
                        "name": "_dividendIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11587,
                        "src": "7873:14:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 11609,
                      "name": "_payDividend",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11677,
                      "src": "7838:12:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_struct$_Dividend_$11154_storage_ptr_$_t_uint256_$returns$__$",
                        "typeString": "function (address,struct ERC20DividendCheckpoint.Dividend storage pointer,uint256)"
                      }
                    },
                    "id": 11614,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7838:50:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11615,
                  "nodeType": "ExpressionStatement",
                  "src": "7838:50:29"
                }
              ]
            },
            "documentation": "@notice Investors can pull their own dividends\n@param _dividendIndex Dividend to pull",
            "id": 11617,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 11590,
                    "name": "_dividendIndex",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11587,
                    "src": "7667:14:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  }
                ],
                "id": 11591,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11589,
                  "name": "validDividendIndex",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 11240,
                  "src": "7648:18:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_uint256_$",
                    "typeString": "modifier (uint256)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7648:34:29"
              }
            ],
            "name": "pullDividendPayment",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11588,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11587,
                  "name": "_dividendIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 11617,
                  "src": "7617:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11586,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7617:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7616:24:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11592,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7687:0:29"
            },
            "scope": 11916,
            "src": "7588:307:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11676,
              "nodeType": "Block",
              "src": "8221:406:29",
              "statements": [
                {
                  "assignments": [
                    11627
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11627,
                      "name": "claim",
                      "nodeType": "VariableDeclaration",
                      "scope": 11677,
                      "src": "8231:13:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11626,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8231:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11632,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11629,
                        "name": "_dividendIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11623,
                        "src": "8265:14:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11630,
                        "name": "_payee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11619,
                        "src": "8281:6:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 11628,
                      "name": "calculateDividend",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11807,
                      "src": "8247:17:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (uint256,address) view returns (uint256)"
                      }
                    },
                    "id": 11631,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8247:41:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8231:57:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11639,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11633,
                          "name": "_dividend",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11621,
                          "src": "8298:9:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                            "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                          }
                        },
                        "id": 11636,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "claimed",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11153,
                        "src": "8298:17:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 11637,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 11635,
                        "name": "_payee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11619,
                        "src": "8316:6:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "8298:25:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 11638,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8326:4:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "8298:32:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 11640,
                  "nodeType": "ExpressionStatement",
                  "src": "8298:32:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11649,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 11641,
                        "name": "_dividend",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11621,
                        "src": "8340:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                        }
                      },
                      "id": 11643,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "claimedAmount",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11145,
                      "src": "8340:23:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 11646,
                            "name": "_dividend",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11621,
                            "src": "8376:9:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                              "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                            }
                          },
                          "id": 11647,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "claimedAmount",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11145,
                          "src": "8376:23:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "id": 11644,
                          "name": "claim",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11627,
                          "src": "8366:5:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 11645,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22577,
                        "src": "8366:9:29",
                        "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": 11648,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8366:34:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "8340:60:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 11650,
                  "nodeType": "ExpressionStatement",
                  "src": "8340:60:29"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 11653,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 11651,
                      "name": "claim",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11627,
                      "src": "8414:5:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 11652,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8422:1:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8414:9:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 11675,
                  "nodeType": "IfStatement",
                  "src": "8410:211:29",
                  "trueBody": {
                    "id": 11674,
                    "nodeType": "Block",
                    "src": "8425:196:29",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 11660,
                                  "name": "_payee",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11619,
                                  "src": "8479:6:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "argumentTypes": null,
                                  "id": 11661,
                                  "name": "claim",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11627,
                                  "src": "8487:5:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 11656,
                                        "name": "_dividend",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 11621,
                                        "src": "8453:9:29",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                                          "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                                        }
                                      },
                                      "id": 11657,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "token",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 11141,
                                      "src": "8453:15:29",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    ],
                                    "id": 11655,
                                    "name": "ERC20",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 22837,
                                    "src": "8447:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_contract$_ERC20_$22837_$",
                                      "typeString": "type(contract ERC20)"
                                    }
                                  },
                                  "id": 11658,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8447:22:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20_$22837",
                                    "typeString": "contract ERC20"
                                  }
                                },
                                "id": 11659,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "transfer",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22860,
                                "src": "8447:31:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                                  "typeString": "function (address,uint256) external returns (bool)"
                                }
                              },
                              "id": 11662,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "8447:46:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "556e61626c6520746f207472616e7366657220746f6b656e73",
                              "id": 11663,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "8495:27:29",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_db8b21f8c5bce1dba39854945d87864b897be9a09a2bf8644d8cb629d9d84761",
                                "typeString": "literal_string \"Unable to transfer tokens\""
                              },
                              "value": "Unable to transfer tokens"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_db8b21f8c5bce1dba39854945d87864b897be9a09a2bf8644d8cb629d9d84761",
                                "typeString": "literal_string \"Unable to transfer tokens\""
                              }
                            ],
                            "id": 11654,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              23134,
                              23135
                            ],
                            "referencedDeclaration": 23135,
                            "src": "8439:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 11664,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8439:84:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 11665,
                        "nodeType": "ExpressionStatement",
                        "src": "8439:84:29"
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 11667,
                              "name": "_payee",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11619,
                              "src": "8563:6:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 11668,
                              "name": "_dividendIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11623,
                              "src": "8571:14:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 11669,
                                "name": "_dividend",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11621,
                                "src": "8587:9:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                                  "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                                }
                              },
                              "id": 11670,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "token",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 11141,
                              "src": "8587:15:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 11671,
                              "name": "claim",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11627,
                              "src": "8604:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 11666,
                            "name": "ERC20DividendClaimed",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11187,
                            "src": "8542:20:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (address,uint256,address,uint256)"
                            }
                          },
                          "id": 11672,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8542:68:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 11673,
                        "nodeType": "EmitStatement",
                        "src": "8537:73:29"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": "@notice Internal function for paying dividends\n@param _payee address of investor\n@param _dividend storage with previously issued dividends\n@param _dividendIndex Dividend to pay",
            "id": 11677,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [],
            "name": "_payDividend",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11624,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11619,
                  "name": "_payee",
                  "nodeType": "VariableDeclaration",
                  "scope": 11677,
                  "src": "8144:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11618,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8144:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11621,
                  "name": "_dividend",
                  "nodeType": "VariableDeclaration",
                  "scope": 11677,
                  "src": "8160:26:29",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                    "typeString": "struct ERC20DividendCheckpoint.Dividend"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 11620,
                    "name": "Dividend",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 11154,
                    "src": "8160:8:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                      "typeString": "struct ERC20DividendCheckpoint.Dividend"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11623,
                  "name": "_dividendIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 11677,
                  "src": "8188:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11622,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8188:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8143:68:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11625,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8221:0:29"
            },
            "scope": 11916,
            "src": "8122:505:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 11755,
              "nodeType": "Block",
              "src": "8858:663:29",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11688,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11685,
                          "name": "_dividendIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11679,
                          "src": "8876:14:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 11686,
                            "name": "dividends",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11157,
                            "src": "8893:9:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                              "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                            }
                          },
                          "id": 11687,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "8893:16:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8876:33:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "496e636f7272656374206469766964656e6420696e646578",
                        "id": 11689,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8911:26:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_493598b4f85c7110e712482cd4f4c764fe64a77e153f7dd336580d7956ede6a0",
                          "typeString": "literal_string \"Incorrect dividend index\""
                        },
                        "value": "Incorrect dividend index"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_493598b4f85c7110e712482cd4f4c764fe64a77e153f7dd336580d7956ede6a0",
                          "typeString": "literal_string \"Incorrect dividend index\""
                        }
                      ],
                      "id": 11684,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "8868:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11690,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8868:70:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11691,
                  "nodeType": "ExpressionStatement",
                  "src": "8868:70:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 11698,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 11693,
                          "name": "now",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23133,
                          "src": "8956:3:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 11694,
                              "name": "dividends",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11157,
                              "src": "8963:9:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                                "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                              }
                            },
                            "id": 11696,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 11695,
                              "name": "_dividendIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11679,
                              "src": "8973:14:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "8963:25:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                              "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                            }
                          },
                          "id": 11697,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "expiry",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11139,
                          "src": "8963:32:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "8956:39:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4469766964656e642065787069727920697320696e2074686520667574757265",
                        "id": 11699,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "8997:34:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3423a6d303ded18ed64e52bcfb7c965bd745fc80ec022cd69f4a83e2bb0eded7",
                          "typeString": "literal_string \"Dividend expiry is in the future\""
                        },
                        "value": "Dividend expiry is in the future"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3423a6d303ded18ed64e52bcfb7c965bd745fc80ec022cd69f4a83e2bb0eded7",
                          "typeString": "literal_string \"Dividend expiry is in the future\""
                        }
                      ],
                      "id": 11692,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "8948:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11700,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8948:84:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11701,
                  "nodeType": "ExpressionStatement",
                  "src": "8948:84:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11707,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "9050:36:29",
                        "subExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 11703,
                              "name": "dividends",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11157,
                              "src": "9051:9:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                                "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                              }
                            },
                            "id": 11705,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 11704,
                              "name": "_dividendIndex",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 11679,
                              "src": "9061:14:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "9051:25:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                              "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                            }
                          },
                          "id": 11706,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "reclaimed",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 11149,
                          "src": "9051:35:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4469766964656e6420616c726561647920636c61696d6564",
                        "id": 11708,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9088:26:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_34d8bfb8ea936959b19e40666b5fd8804718711629a5666d78472ed2589ed75b",
                          "typeString": "literal_string \"Dividend already claimed\""
                        },
                        "value": "Dividend already claimed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_34d8bfb8ea936959b19e40666b5fd8804718711629a5666d78472ed2589ed75b",
                          "typeString": "literal_string \"Dividend already claimed\""
                        }
                      ],
                      "id": 11702,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "9042:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11709,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9042:73:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11710,
                  "nodeType": "ExpressionStatement",
                  "src": "9042:73:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11716,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 11711,
                          "name": "dividends",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11157,
                          "src": "9125:9:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                            "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                          }
                        },
                        "id": 11713,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 11712,
                          "name": "_dividendIndex",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11679,
                          "src": "9135:14:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "9125:25:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                        }
                      },
                      "id": 11714,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "reclaimed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11149,
                      "src": "9125:35:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 11715,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9163:4:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "9125:42:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 11717,
                  "nodeType": "ExpressionStatement",
                  "src": "9125:42:29"
                },
                {
                  "assignments": [
                    11719
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11719,
                      "name": "dividend",
                      "nodeType": "VariableDeclaration",
                      "scope": 11756,
                      "src": "9177:25:29",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 11718,
                        "name": "Dividend",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 11154,
                        "src": "9177:8:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11723,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 11720,
                      "name": "dividends",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11157,
                      "src": "9205:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                      }
                    },
                    "id": 11722,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 11721,
                      "name": "_dividendIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11679,
                      "src": "9215:14:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9205:25:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                      "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9177:53:29"
                },
                {
                  "assignments": [
                    11725
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11725,
                      "name": "remainingAmount",
                      "nodeType": "VariableDeclaration",
                      "scope": 11756,
                      "src": "9240:23:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11724,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9240:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11732,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11729,
                          "name": "dividend",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11719,
                          "src": "9286:8:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                            "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                          }
                        },
                        "id": 11730,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "claimedAmount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11145,
                        "src": "9286:22:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11726,
                          "name": "dividend",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11719,
                          "src": "9266:8:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                            "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                          }
                        },
                        "id": 11727,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "amount",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11143,
                        "src": "9266:15:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 11728,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sub",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22553,
                      "src": "9266:19:29",
                      "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": 11731,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9266:43:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9240:69:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 11739,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 23131,
                              "src": "9358:3:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 11740,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "9358:10:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 11741,
                            "name": "remainingAmount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11725,
                            "src": "9370:15:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 11735,
                                  "name": "dividend",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11719,
                                  "src": "9333:8:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                                    "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                                  }
                                },
                                "id": 11736,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "token",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 11141,
                                "src": "9333:14:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 11734,
                              "name": "ERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 22837,
                              "src": "9327:5:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_ERC20_$22837_$",
                                "typeString": "type(contract ERC20)"
                              }
                            },
                            "id": 11737,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9327:21:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC20_$22837",
                              "typeString": "contract ERC20"
                            }
                          },
                          "id": 11738,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "transfer",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22860,
                          "src": "9327:30:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$",
                            "typeString": "function (address,uint256) external returns (bool)"
                          }
                        },
                        "id": 11742,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9327:59:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "556e61626c6520746f207472616e7366657220746f6b656e73",
                        "id": 11743,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9388:27:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_db8b21f8c5bce1dba39854945d87864b897be9a09a2bf8644d8cb629d9d84761",
                          "typeString": "literal_string \"Unable to transfer tokens\""
                        },
                        "value": "Unable to transfer tokens"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_db8b21f8c5bce1dba39854945d87864b897be9a09a2bf8644d8cb629d9d84761",
                          "typeString": "literal_string \"Unable to transfer tokens\""
                        }
                      ],
                      "id": 11733,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        23134,
                        23135
                      ],
                      "referencedDeclaration": 23135,
                      "src": "9319:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 11744,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9319:97:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11745,
                  "nodeType": "ExpressionStatement",
                  "src": "9319:97:29"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11747,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23131,
                          "src": "9454:3:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 11748,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "9454:10:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11749,
                        "name": "_dividendIndex",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11679,
                        "src": "9466:14:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 11750,
                          "name": "dividend",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 11719,
                          "src": "9482:8:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                            "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                          }
                        },
                        "id": 11751,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "token",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11141,
                        "src": "9482:14:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 11752,
                        "name": "remainingAmount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11725,
                        "src": "9498:15:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 11746,
                      "name": "ERC20DividendReclaimed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11197,
                      "src": "9431:22:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256,address,uint256)"
                      }
                    },
                    "id": 11753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9431:83:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 11754,
                  "nodeType": "EmitStatement",
                  "src": "9426:88:29"
                }
              ]
            },
            "documentation": "@notice Issuer can reclaim remaining unclaimed dividend amounts, for expired dividends\n@param _dividendIndex Dividend to reclaim",
            "id": 11756,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": false,
            "modifiers": [
              {
                "arguments": null,
                "id": 11682,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 11681,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 9653,
                  "src": "8848:9:29",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8848:9:29"
              }
            ],
            "name": "reclaimDividend",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11680,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11679,
                  "name": "_dividendIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 11756,
                  "src": "8817:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11678,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8817:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8816:24:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11683,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8858:0:29"
            },
            "scope": 11916,
            "src": "8792:729:29",
            "stateMutability": "nonpayable",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11806,
              "nodeType": "Block",
              "src": "9815:364:29",
              "statements": [
                {
                  "assignments": [
                    11766
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11766,
                      "name": "dividend",
                      "nodeType": "VariableDeclaration",
                      "scope": 11807,
                      "src": "9825:25:29",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 11765,
                        "name": "Dividend",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 11154,
                        "src": "9825:8:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11770,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 11767,
                      "name": "dividends",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11157,
                      "src": "9853:9:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                        "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                      }
                    },
                    "id": 11769,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 11768,
                      "name": "_dividendIndex",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11758,
                      "src": "9863:14:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9853:25:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                      "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9825:53:29"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 11771,
                        "name": "dividend",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11766,
                        "src": "9892:8:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Dividend_$11154_storage_ptr",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend storage pointer"
                        }
                      },
                      "id": 11772,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "claimed",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 11153,
                      "src": "9892:16:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 11774,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 11773,
                      "name": "_payee",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11760,
                      "src": "9909:6:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9892:24:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 11778,
                  "nodeType": "IfStatement",
                  "src": "9888:63:29",
                  "trueBody": {
                    "id": 11777,
                    "nodeType": "Block",
                    "src": "9918:33:29",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 11775,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9939:1:29",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 11764,
                        "id": 11776,
                        "nodeType": "Return",
                        "src": "9932:8:29"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    11780
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11780,
                      "name": "balance",
                      "nodeType": "VariableDeclaration",
                      "scope": 11807,
                      "src": "9960:15:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11779,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "9960:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11791,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11785,
                        "name": "_payee",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11760,
                        "src": "10020:6:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 11786,
                            "name": "dividends",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11157,
                            "src": "10028:9:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                              "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                            }
                          },
                          "id": 11788,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 11787,
                            "name": "_dividendIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11758,
                            "src": "10038:14:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "10028:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                            "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                          }
                        },
                        "id": 11789,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "checkpointId",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11133,
                        "src": "10028:38:29",
                        "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": 11782,
                            "name": "securityToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9561,
                            "src": "9993:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 11781,
                          "name": "ISecurityToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10159,
                          "src": "9978:14:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_ISecurityToken_$10159_$",
                            "typeString": "type(contract ISecurityToken)"
                          }
                        },
                        "id": 11783,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "9978:29:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_ISecurityToken_$10159",
                          "typeString": "contract ISecurityToken"
                        }
                      },
                      "id": 11784,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "balanceOfAt",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 10148,
                      "src": "9978:41:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (address,uint256) view external returns (uint256)"
                      }
                    },
                    "id": 11790,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9978:89:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9960:107:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 11800,
                            "name": "dividends",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11157,
                            "src": "10134:9:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                              "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                            }
                          },
                          "id": 11802,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 11801,
                            "name": "_dividendIndex",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11758,
                            "src": "10144:14:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "10134:25:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                            "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                          }
                        },
                        "id": 11803,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "totalSupply",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 11147,
                        "src": "10134:37:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 11794,
                                "name": "dividends",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11157,
                                "src": "10096:9:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                                  "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                                }
                              },
                              "id": 11796,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 11795,
                                "name": "_dividendIndex",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11758,
                                "src": "10106:14:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10096:25:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                                "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                              }
                            },
                            "id": 11797,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "amount",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11143,
                            "src": "10096:32:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 11792,
                            "name": "balance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11780,
                            "src": "10084:7:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 11793,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "mul",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22519,
                          "src": "10084:11:29",
                          "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": 11798,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10084:45:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 11799,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22533,
                      "src": "10084:49:29",
                      "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": 11804,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10084:88:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 11764,
                  "id": 11805,
                  "nodeType": "Return",
                  "src": "10077:95:29"
                }
              ]
            },
            "documentation": "@notice Calculate amount of dividends claimable\n@param _dividendIndex Dividend to calculate\n@param _payee Affected investor address\n@return unit256",
            "id": 11807,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "calculateDividend",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11761,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11758,
                  "name": "_dividendIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 11807,
                  "src": "9746:22:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11757,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9746:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 11760,
                  "name": "_payee",
                  "nodeType": "VariableDeclaration",
                  "scope": 11807,
                  "src": "9770:14:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 11759,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9770:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9745:40:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11764,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11763,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11807,
                  "src": "9806:7:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11762,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9806:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9805:9:29"
            },
            "scope": 11916,
            "src": "9719:460:29",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11889,
              "nodeType": "Block",
              "src": "10415:502:29",
              "statements": [
                {
                  "assignments": [
                    11816
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11816,
                      "name": "counter",
                      "nodeType": "VariableDeclaration",
                      "scope": 11890,
                      "src": "10425:15:29",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 11815,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "10425:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11818,
                  "initialValue": {
                    "argumentTypes": null,
                    "hexValue": "30",
                    "id": 11817,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "10443:1:29",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_0_by_1",
                      "typeString": "int_const 0"
                    },
                    "value": "0"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10425:19:29"
                },
                {
                  "body": {
                    "id": 11841,
                    "nodeType": "Block",
                    "src": "10500:114:29",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 11835,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 11830,
                                "name": "dividends",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11157,
                                "src": "10518:9:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                                  "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                                }
                              },
                              "id": 11832,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 11831,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11820,
                                "src": "10528:1:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10518:12:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                                "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                              }
                            },
                            "id": 11833,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "checkpointId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11133,
                            "src": "10518:25:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 11834,
                            "name": "_checkpointId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11809,
                            "src": "10547:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10518:42:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 11840,
                        "nodeType": "IfStatement",
                        "src": "10514:90:29",
                        "trueBody": {
                          "id": 11839,
                          "nodeType": "Block",
                          "src": "10562:42:29",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 11837,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "10580:9:29",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 11836,
                                  "name": "counter",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11816,
                                  "src": "10580:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 11838,
                              "nodeType": "ExpressionStatement",
                              "src": "10580:9:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 11826,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 11823,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11820,
                      "src": "10473:1:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 11824,
                        "name": "dividends",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11157,
                        "src": "10477:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                        }
                      },
                      "id": 11825,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "10477:16:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10473:20:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 11842,
                  "initializationExpression": {
                    "assignments": [
                      11820
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 11820,
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 11890,
                        "src": "10458:9:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11819,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10458:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 11822,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 11821,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10470:1:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "10458:13:29"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 11828,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "10495:3:29",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 11827,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11820,
                        "src": "10495:1:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 11829,
                    "nodeType": "ExpressionStatement",
                    "src": "10495:3:29"
                  },
                  "nodeType": "ForStatement",
                  "src": "10454:160:29"
                },
                {
                  "assignments": [
                    11846
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11846,
                      "name": "index",
                      "nodeType": "VariableDeclaration",
                      "scope": 11890,
                      "src": "10623:22:29",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                        "typeString": "uint256[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 11844,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10623:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 11845,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "10623:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11852,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 11850,
                        "name": "counter",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11816,
                        "src": "10662:7:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 11849,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "10648:13:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_$",
                        "typeString": "function (uint256) pure returns (uint256[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 11847,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10652:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 11848,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "10652:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                          "typeString": "uint256[]"
                        }
                      }
                    },
                    "id": 11851,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10648:22:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10623:47:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 11853,
                      "name": "counter",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11816,
                      "src": "10679:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 11854,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10689:1:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "10679:11:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 11856,
                  "nodeType": "ExpressionStatement",
                  "src": "10679:11:29"
                },
                {
                  "body": {
                    "id": 11885,
                    "nodeType": "Block",
                    "src": "10745:145:29",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 11873,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 11868,
                                "name": "dividends",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11157,
                                "src": "10762:9:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                                  "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                                }
                              },
                              "id": 11870,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 11869,
                                "name": "j",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 11858,
                                "src": "10772:1:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "10762:12:29",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Dividend_$11154_storage",
                                "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref"
                              }
                            },
                            "id": 11871,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "checkpointId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 11133,
                            "src": "10762:25:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "id": 11872,
                            "name": "_checkpointId",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 11809,
                            "src": "10791:13:29",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10762:42:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 11884,
                        "nodeType": "IfStatement",
                        "src": "10758:123:29",
                        "trueBody": {
                          "id": 11883,
                          "nodeType": "Block",
                          "src": "10806:75:29",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 11878,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "baseExpression": {
                                    "argumentTypes": null,
                                    "id": 11874,
                                    "name": "index",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11846,
                                    "src": "10823:5:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                                      "typeString": "uint256[] memory"
                                    }
                                  },
                                  "id": 11876,
                                  "indexExpression": {
                                    "argumentTypes": null,
                                    "id": 11875,
                                    "name": "counter",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 11816,
                                    "src": "10829:7:29",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "nodeType": "IndexAccess",
                                  "src": "10823:14:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 11877,
                                  "name": "j",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11858,
                                  "src": "10840:1:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "10823:18:29",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 11879,
                              "nodeType": "ExpressionStatement",
                              "src": "10823:18:29"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 11881,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "++",
                                "prefix": false,
                                "src": "10858:9:29",
                                "subExpression": {
                                  "argumentTypes": null,
                                  "id": 11880,
                                  "name": "counter",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 11816,
                                  "src": "10858:7:29",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 11882,
                              "nodeType": "ExpressionStatement",
                              "src": "10858:9:29"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 11864,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 11861,
                      "name": "j",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11858,
                      "src": "10718:1:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 11862,
                        "name": "dividends",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11157,
                        "src": "10722:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_Dividend_$11154_storage_$dyn_storage",
                          "typeString": "struct ERC20DividendCheckpoint.Dividend storage ref[] storage ref"
                        }
                      },
                      "id": 11863,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "10722:16:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10718:20:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 11886,
                  "initializationExpression": {
                    "assignments": [
                      11858
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 11858,
                        "name": "j",
                        "nodeType": "VariableDeclaration",
                        "scope": 11890,
                        "src": "10703:9:29",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 11857,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "10703:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 11860,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 11859,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10715:1:29",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "10703:13:29"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 11866,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "10740:3:29",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 11865,
                        "name": "j",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11858,
                        "src": "10740:1:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 11867,
                    "nodeType": "ExpressionStatement",
                    "src": "10740:3:29"
                  },
                  "nodeType": "ForStatement",
                  "src": "10699:191:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11887,
                    "name": "index",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11846,
                    "src": "10905:5:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                      "typeString": "uint256[] memory"
                    }
                  },
                  "functionReturnParameters": 11814,
                  "id": 11888,
                  "nodeType": "Return",
                  "src": "10898:12:29"
                }
              ]
            },
            "documentation": "@notice Get the index according to the checkpoint id\n@param _checkpointId Checkpoint id to query\n@return uint256",
            "id": 11890,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getDividendIndex",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11810,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11809,
                  "name": "_checkpointId",
                  "nodeType": "VariableDeclaration",
                  "scope": 11890,
                  "src": "10361:21:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 11808,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10361:7:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10360:23:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11814,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11813,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11890,
                  "src": "10404:9:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 11811,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "10404:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 11812,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "10404:9:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "10403:11:29"
            },
            "scope": 11916,
            "src": "10335:582:29",
            "stateMutability": "view",
            "superFunction": null,
            "visibility": "public"
          },
          {
            "body": {
              "id": 11914,
              "nodeType": "Block",
              "src": "11097:138:29",
              "statements": [
                {
                  "assignments": [
                    11899
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 11899,
                      "name": "allPermissions",
                      "nodeType": "VariableDeclaration",
                      "scope": 11915,
                      "src": "11107:31:29",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 11897,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "11107:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 11898,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "11107:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 11905,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "31",
                        "id": 11903,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11155:1:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        }
                      ],
                      "id": 11902,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "11141:13:29",
                      "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": 11900,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "11145:7:29",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 11901,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "11145:9:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 11904,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11141:16:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "11107:50:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11910,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 11906,
                        "name": "allPermissions",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 11899,
                        "src": "11167:14:29",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 11908,
                      "indexExpression": {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 11907,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "11182:1:29",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "11167:17:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 11909,
                      "name": "DISTRIBUTE",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11131,
                      "src": "11187:10:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "11167:30:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 11911,
                  "nodeType": "ExpressionStatement",
                  "src": "11167:30:29"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 11912,
                    "name": "allPermissions",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 11899,
                    "src": "11214:14:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 11895,
                  "id": 11913,
                  "nodeType": "Return",
                  "src": "11207:21:29"
                }
              ]
            },
            "documentation": "@notice Return the permissions flag that are associated with STO\n@return bytes32 array",
            "id": 11915,
            "implemented": true,
            "isConstructor": false,
            "isDeclaredConst": true,
            "modifiers": [],
            "name": "getPermissions",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 11891,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11063:2:29"
            },
            "payable": false,
            "returnParameters": {
              "id": 11895,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 11894,
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 11915,
                  "src": "11086:9:29",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 11892,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "11086:7:29",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 11893,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11086:9:29",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11085:11:29"
            },
            "scope": 11916,
            "src": "11040:195:29",
            "stateMutability": "view",
            "superFunction": 9687,
            "visibility": "public"
          }
        ],
        "scope": 11917,
        "src": "739:10499:29"
      }
    ],
    "src": "0:11239:29"
  },
  "compiler": {
    "name": "solc",
    "version": "0.4.24+commit.e67f0147.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "2.0.1",
  "updatedAt": "2018-08-21T09:48:12.432Z"
}