contract ICOContractX {
    // GENERAL ICO PARAMS ------------------------------------------------------

    string public name;

    address public operator; // the ICO operator
    address public projectWallet; // the wallet that receives ICO Funds
    Token public token; // ICO token
    address public juryOnlineWallet; // JuryOnline Wallet for commission
    address public arbitrationAddress; // Address of Arbitration Contract
    uint public currentCycle; // current cycle

    struct Cycle {
        bool exists;
        bool approved;
        address icoRoundAddress;
    }

    mapping(uint => Cycle) public cycles; // stores the approved Cycles

    // DEPLOYED BY JURY.ONLINE
    // PARAMS:
    // address _operator
    // address _projectWallet
    // address _tokenAddress
    // address _arbitrationAddress
    // address _juryOnlineWallet
    constructor(string _name, address _operator, address _projectWallet, address _tokenAddress, address _arbitrationAddress, address _juryOnlineWallet) public {
        name = _name;
        operator = _operator;
        projectWallet = _projectWallet;
        token = Token(_tokenAddress);
        arbitrationAddress = _arbitrationAddress;
        juryOnlineWallet = _juryOnlineWallet;
    }

    // CALLED BY CYCLE CONTRACT
    function addRound() public {
        cycles[currentCycle].exists = true;
        cycles[currentCycle].icoRoundAddress = msg.sender;
    }

    // CALLED BY ICO OPERATOR, approves CYCLE Contract and adds it to cycles
    function approveRound(address _icoRoundAddress) public {
        require(msg.sender == operator);
        require(cycles[currentCycle].icoRoundAddress == _icoRoundAddress);
        currentCycle +=1;
    }

}
// DEPLOYED BY JURY.ONLINE
function approveRound(address _icoRoundAddress) public {
    require(msg.sender == operator);
    require(cycles[currentCycle].icoRoundAddress == _icoRoundAddress);
    currentCycle +=1;
}

// CALLED BY ICO OPERATOR, approves CYCLE Contract and adds it to cycles