library DecimalMath {

    using SafeMath for uint256;

     /**
     * @notice This function multiplies two decimals represented as (decimal * 10**DECIMALS)
     * @return uint256 Result of multiplication represented as (decimal * 10**DECIMALS)
     */
    function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = SafeMath.add(SafeMath.mul(x, y), (10 ** 18) / 2) / (10 ** 18);
    }

    /**
     * @notice This function divides two decimals represented as (decimal * 10**DECIMALS)
     * @return uint256 Result of division represented as (decimal * 10**DECIMALS)
     */
    function div(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = SafeMath.add(SafeMath.mul(x, (10 ** 18)), y / 2) / y;
    }

}
function mul(uint256 x, uint256 y) internal pure returns (uint256 z) {
    z = SafeMath.add(SafeMath.mul(x, y), (10 ** 18) / 2) / (10 ** 18);
}

/**
 * @notice This function multiplies two decimals represented as (decimal * 10**DECIMALS)
 * @return uint256 Result of multiplication represented as (decimal * 10**DECIMALS)
 */