function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1);
function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) internal pure returns (uint256 amountB);
function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut)
internal
pure
returns (uint256 amountOut);
function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut)
internal
pure
returns (uint256 amountIn);
error JoeLibrary__AddressZero();
error JoeLibrary__IdenticalAddresses();
error JoeLibrary__InsufficientAmount();
error JoeLibrary__InsufficientLiquidity();