Vulnerability: SingleSidedLiquidityVault.withdraw will decreases ohmMinted, which will make the calculation involving ohmMinted incorrect
Severity: medium

Description:
SingleSidedLiquidityVault.withdraw will decreases ohmMinted, which will make the calculation involving ohmMinted incorrect.\\nIn SingleSidedLiquidityVault, ohmMinted indicates the number of ohm minted in the contract, and ohmRemoved indicates the number of ohm burned in the contract. So the contract just needs to increase ohmMinted in deposit() and increase ohmRemoved in withdraw(). But withdraw() decreases ohmMinted, which makes the calculation involving ohmMinted incorrect.\\n```\\n        ohmMinted -= ohmReceived > ohmMinted ? ohmMinted : ohmReceived;\\n        ohmRemoved += ohmReceived > ohmMinted ? ohmReceived - ohmMinted : 0;\\n```\\n\\nConsider that a user minted 100 ohm in deposit() and immediately burned 100 ohm in withdraw().\\nIn _canDeposit, the amount_ is less than LIMIT + 1000 instead of LIMIT\\n```\\n    function _canDeposit(uint256 amount_) internal view virtual returns (bool) {\\n        if (amount_ + ohmMinted > LIMIT + ohmRemoved) revert LiquidityVault_LimitViolation();\\n        return true;\\n    }\\n```\\n\\ngetOhmEmissions() returns 1000 instead of 0\\n```\\n    function getOhmEmissions() external view returns (uint256 emitted, uint256 removed) {\\n        uint256 currentPoolOhmShare = _getPoolOhmShare();\\n\\n        if (ohmMinted > currentPoolOhmShare + ohmRemoved)\\n            emitted = ohmMinted - currentPoolOhmShare - ohmRemoved;\\n        else removed = currentPoolOhmShare + ohmRemoved - ohmMinted;\\n    }\\n```\\n

Impact:
It will make the calculation involving ohmMinted incorrect.

Recommended mitigation:
Issue SingleSidedLiquidityVault.withdraw will decreases ohmMinted, which will make the calculation involving ohmMinted incorrect\\n```\\n    function withdraw(\\n        uint256 lpAmount_,\\n        uint256[] calldata minTokenAmounts_,\\n        bool claim_\\n    ) external onlyWhileActive nonReentrant returns (uint256) {\\n        // Liquidity vaults should always be built around a two token pool so we can assume\\n        // the array will always have two elements\\n        if (lpAmount_ == 0 || minTokenAmounts_[0] == 0 || minTokenAmounts_[1] == 0)\\n            revert LiquidityVault_InvalidParams();\\n        if (!_isPoolSafe()) revert LiquidityVault_PoolImbalanced();\\n\\n        _withdrawUpdateRewardState(lpAmount_, claim_);\\n\\n        totalLP // Remove the line below\\n= lpAmount_;\\n        lpPositions[msg.sender] // Remove the line below\\n= lpAmount_;\\n\\n        // Withdraw OHM and pairToken from LP\\n        (uint256 ohmReceived, uint256 pairTokenReceived) = _withdraw(lpAmount_, minTokenAmounts_);\\n\\n        // Reduce deposit values\\n        uint256 userDeposit = pairTokenDeposits[msg.sender];\\n        pairTokenDeposits[msg.sender] // Remove the line below\\n= pairTokenReceived > userDeposit\\n            ? userDeposit\\n            : pairTokenReceived;\\n// Remove the line below\\n       ohmMinted // Remove the line below\\n= ohmReceived > ohmMinted ? ohmMinted : ohmReceived;\\n        ohmRemoved += ohmReceived > ohmMinted ? ohmReceived // Remove the line below\\n ohmMinted : 0;\\n```\\n