Vulnerability: Hedgers are not incentivized to respond to user's closing requests
Severity: medium

Description:
Hedgers could intentionally force the users to close the positions themselves via the `forceClosePosition` and charge a spread to earn more, which results in the users closing at a worse price, leading to a loss of profit for them.\\nHow `fillCloseRequest` function works?\\nFor a Long position, when PartyB (Hedger) calls the `fillCloseRequest` function to fill a close position under normal circumstances, the hedger cannot charge a spread because the hedger has to close at the user's requested close price (quote.requestedClosePrice),\\nIf the hedger decides to close at a higher price, it is permissible by the function, but the hedger will lose more, and the users will gain more because the users' profit is computed based on `long profit = closing price - opening price`.\\nUnder normal circumstances, most users will set the requested close price (quote.requestedClosePrice) close to the market price most of the time.\\nIn short, the `fillCloseRequest` function requires the hedger to match or exceed the user' requested price. The hedger cannot close at a price below the user's requested price in order to charge a spread.\\n```\\nfunction fillCloseRequest(\\n..SNIP..\\n    if (quote.positionType == PositionType.LONG) {\\n        require(\\n            closedPrice >= quote.requestedClosePrice,\\n            "PartyBFacet: Closed price isn't valid"\\n        )\\n```\\n\\nHow `forceClosePosition` function works?\\nFor a Long position, the `forceCloseGapRatio` will allow the hedger to charge a spread from the user's requested price (quote.requestedClosePrice) when the user (PartyA) attempts to force close the position.\\nThe `upnlSig.price` is the market price and `quote.requestedClosePrice` is the price users ask to close at. By having the `forceCloseGapRatio`, assuming that `forceCloseGapRatio` is 5%, this will create a spread between the two prices (upnlSig.price and quote.requestedClosePrice) that represent a cost that the users (PartyA) need to "pay" in order to force close a position.\\n```\\nfunction forceClosePosition(uint256 quoteId, PairUpnlAndPriceSig memory upnlSig) internal {\\n..SNIP..\\n    if (quote.positionType == PositionType.LONG) {\\n        require(\\n            upnlSig.price >=\\n                quote.requestedClosePrice +\\n                    (quote.requestedClosePrice * maLayout.forceCloseGapRatio) /\\n                    1e18,\\n            "PartyAFacet: Requested close price not reached"\\n        );\\n    ..SNIP..\\n    LibQuote.closeQuote(quote, filledAmount, quote.requestedClosePrice);\\n```\\n\\nIssue with current design\\nAssume a hedger ignores the user's close request. In this case, the users (PartyA) have to call the `forceClosePosition` function by themselves to close the position and pay a spread.\\nThe hedgers can abuse this mechanic to their benefit. Assuming the users (PartyA) ask to close a LONG position at a fair value, and the hedgers respond by calling the `fillCloseRequest` to close it. In this case, the hedgers won't be able to charge a spread because the hedgers are forced to close at a price equal to or higher than the user's asking closing price (quote.requestedClosePrice).\\nHowever, if the hedger chooses to ignore the user's close request, this will force the user to call the `forceClosePosition,` and the user will have to pay a spread to the hedgers due to the gap ratio. In this case, the hedgers will benefit more due to the spread.\\nIn the long run, the hedgers will be incentivized to ignore users' close requests.

Impact:
The hedgers will be incentivized to ignore users' close requests, resulting in the users having to wait for the cooldown before being able to force close a position themselves. The time spent waiting could potentially lead to a loss of opportunity cost for the users.\\nIn addition, hedgers could intentionally force the users to close the positions themselves via the `forceClosePosition` and charge a spread to earn more, which results in the users closing at a worse price, leading to a loss of profit for them.

Recommended mitigation:
Hedgers should not be entitled to charge a spread within the `forceClosePosition` function because some hedgers might intentionally choose not to respond to user requests in order to force the users to close the position themselves. In addition, hedgers are incentivized to force users to close the position themselves as the `forceClosePosition` function allows them the charge a spread.\\nWithin the `forceClosePosition` function, consider removing the gap ratio to remove the spread and fill the position at the market price (upnlSig.price).\\n```\\n    function forceClosePosition(uint256 quoteId, PairUpnlAndPriceSig memory upnlSig) internal {\\n..SNIP..\\n        if (quote.positionType == PositionType.LONG) {\\n            require(\\n                upnlSig.price >=\\n// Add the line below\\n     quote.requestedClosePrice,                \\n// Remove the line below\\n                   quote.requestedClosePrice // Add the line below\\n\\n// Remove the line below\\n                        (quote.requestedClosePrice * maLayout.forceCloseGapRatio) /\\n// Remove the line below\\n                        1e18,\\n                "PartyAFacet: Requested close price not reached"\\n            );\\n        } else {\\n            require(\\n                upnlSig.price <=\\n// Add the line below\\n                quote.requestedClosePrice,\\n// Remove the line below\\n                   quote.requestedClosePrice // Remove the line below\\n\\n// Remove the line below\\n                        (quote.requestedClosePrice * maLayout.forceCloseGapRatio) /\\n// Remove the line below\\n                        1e18,\\n                "PartyAFacet: Requested close price not reached"\\n            );\\n        }\\n..SNIP..\\n// Remove the line below\\n       LibQuote.closeQuote(quote, filledAmount, quote.requestedClosePrice);\\n// Add the line below\\n  LibQuote.closeQuote(quote, filledAmount, upnlSig.price);\\n    }\\n```\\n\\nFor long-term improvement to the protocol, assuming that the user's requested price is of fair value:\\nHedger should be penalized for not responding to the user's closing request in a timely manner; OR\\nHegder should be incentivized to respond to the user's closing request. For instance, they are entitled to charge a spread if they respond to user closing requests.