// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; library SignedMath { function abs(int256 x) internal pure returns (uint256) { if (x < 0) { return uint256(0 - x); } return uint256(x); } function addU(int256 x, uint256 y) internal pure returns (int256) { require(y <= uint256(type(int256).max), "overflow"); return x + int256(y); } function subU(int256 x, uint256 y) internal pure returns (int256) { require(y <= uint256(type(int256).max), "overflow"); return x - int256(y); } function mulU(int256 x, uint256 y) internal pure returns (int256) { require(y <= uint256(type(int256).max), "overflow"); return x * int256(y); } function divU(int256 x, uint256 y) internal pure returns (int256) { require(y <= uint256(type(int256).max), "overflow"); return x / int256(y); } }