function contribute(Round storage _round, Party _side, address _contributor, uint _amount, uint _totalRequired) internal {
        
        uint contribution; 
        uint remainingETH; 
        (contribution, remainingETH) = calculateContribution(_amount, _totalRequired.subCap(_round.paidFees[uint(_side)]));
        _round.contributions[_contributor][uint(_side)] += contribution;
        _round.paidFees[uint(_side)] += contribution;
        _round.feeRewards += contribution;

        
        _contributor.send(remainingETH); 
    }