contract BurnableTokenWithBounds is ModularBurnableToken {

    event SetBurnBounds(uint256 newMin, uint256 newMax);

    function _burnAllArgs(address _burner, uint256 _value) internal {
        require(_value >= burnMin, "below min burn bound");
        require(_value <= burnMax, "exceeds max burn bound");
        super._burnAllArgs(_burner, _value);
    }

    //Change the minimum and maximum amount that can be burned at once. Burning
    //may be disabled by setting both to 0 (this will not be done under normal
    //operation, but we can't add checks to disallow it without losing a lot of
    //flexibility since burning could also be as good as disabled
    //by setting the minimum extremely high, and we don't want to lock
    //in any particular cap for the minimum)
    function setBurnBounds(uint256 _min, uint256 _max) external onlyOwner {
        require(_min <= _max, "min > max");
        burnMin = _min;
        burnMax = _max;
        emit SetBurnBounds(_min, _max);
    }
}
/**
 * @title Burnable Token WithBounds
 * @dev Burning functions as redeeming money from the system. The platform will keep track of who burns coins,
 * and will send them back the equivalent amount of money (rounded down to the nearest cent).
 */
function setBurnBounds(uint256 _min, uint256 _max) external onlyOwner {
    require(_min <= _max, "min > max");
    burnMin = _min;
    burnMax = _max;
    emit SetBurnBounds(_min, _max);
}

//Change the minimum and maximum amount that can be burned at once. Burning
//may be disabled by setting both to 0 (this will not be done under normal
//operation, but we can't add checks to disallow it without losing a lot of
//flexibility since burning could also be as good as disabled
//by setting the minimum extremely high, and we don't want to lock
//in any particular cap for the minimum)