function distributeTokens(address _beneficiary, uint256 _tokens, uint64 _cliff, uint64 _vesting, bool _revokable, bool _burnsOnRevoke) public onlyOwner whenNotPaused {
      require(_beneficiary != address(0));
      require(_tokens > 0);
      require(_vesting >= _cliff);
      require(!isFinalized);
      require(hasEnded());

      
      uint256 totalDistributed = tokensDistributed.add(_tokens);
      assert(totalDistributed <= distributionCap);

      if (_cliff > 0 && _vesting > 0) {
        uint64 from = vestFromTime;
        uint64 cliff = from + _cliff;
        uint64 vesting = cliff + _vesting;
        assert(QiibeeTokenInterface(token).mintVestedTokens(_beneficiary, _tokens, from, cliff, vesting, _revokable, _burnsOnRevoke, wallet));
      } else {
        assert(QiibeeTokenInterface(token).mint(_beneficiary, _tokens));
      }

      
      tokensDistributed = tokensDistributed.add(_tokens);

      TokenDistributed(_beneficiary, _tokens);
    }