PartyBFacetImpl.chargeFundingRate should check whether quoteIds is empty array to prevent partyANonces from being increased, causing some operations of partyA to fail
```\\nFile: symmio-core\\contracts\\facets\\PartyB\\PartyBFacetImpl.sol\\n    function chargeFundingRate(\\n        address partyA,\\n        uint256[] memory quoteIds,\\n        int256[] memory rates,\\n        PairUpnlSig memory upnlSig\\n    ) internal {\\n        LibMuon.verifyPairUpnl(upnlSig, msg.sender, partyA);\\n        require(quoteIds.length == rates.length, "PartyBFacet: Length not match");\\n        int256 partyBAvailableBalance = LibAccount.partyBAvailableBalanceForLiquidation(\\n            upnlSig.upnlPartyB,\\n            msg.sender,\\n            partyA\\n        );\\n        int256 partyAAvailableBalance = LibAccount.partyAAvailableBalanceForLiquidation(\\n            upnlSig.upnlPartyA,\\n            partyA\\n        );\\n        uint256 epochDuration;\\n        uint256 windowTime;\\n        for (uint256 i = 0; i < quoteIds.length; i++) {\\n// rest of code// rest of code//quoteIds is empty array, so code is never executed.\\n        }\\n        require(partyAAvailableBalance >= 0, "PartyBFacet: PartyA will be insolvent");\\n        require(partyBAvailableBalance >= 0, "PartyBFacet: PartyB will be insolvent");\\n        AccountStorage.layout().partyBNonces[msg.sender][partyA] += 1;\\n394:->       AccountStorage.layout().partyANonces[partyA] += 1;\\n    }\\n```\\n\\nAs long as partyBAvailableBalance(L318) and partyAAvailableBalance(L323) are greater than or equal to 0, that is to say, PartyA and PartyB are solvent. Then, partyB can add 1 to `partyANonces[partyA]` at little cost which is the gas of tx.\\n```\\nFile: symmio-core\\contracts\\facets\\PartyA\\PartyAFacetImpl.sol\\n    function forceClosePosition(uint256 quoteId, PairUpnlAndPriceSig memory upnlSig) internal {\\n        AccountStorage.Layout storage accountLayout = AccountStorage.layout();\\n        MAStorage.Layout storage maLayout = MAStorage.layout();\\n        Quote storage quote = QuoteStorage.layout().quotes[quoteId];\\n// rest of code// rest of code//assume codes here are executed\\n273:->       LibMuon.verifyPairUpnlAndPrice(upnlSig, quote.partyB, quote.partyA, quote.symbolId);\\n// rest of code// rest of code\\n    }\\n```\\n\\nIf the current price goes against partyB, then partyB can front-run `forceClosePosition` and call `chargeFundingRate` to increase the nonces of both parties by 1. In this way, partyA's `forceClosePosition` will inevitably revert because the nonces are incorrect.
```\\nFile: symmio-core\\contracts\\facets\\PartyB\\PartyBFacetImpl.sol\\n    function chargeFundingRate(\\n        address partyA,\\n        uint256[] memory quoteIds,\\n        int256[] memory rates,\\n        PairUpnlSig memory upnlSig\\n    ) internal {\\n        LibMuon.verifyPairUpnl(upnlSig, msg.sender, partyA);\\n317:-        require(quoteIds.length == rates.length, "PartyBFacet: Length not match");\\n317:+        require(quoteIds.length > 0 && quoteIds.length == rates.length, "PartyBFacet: Length is 0 or Length not match");\\n```\\n
Due to this issue, partyB can increase nonces of any partyA with little cost, causing some operations of partyA to fail (refer to the Vulnerability Detail section). This opens up the opportunity for partyB to turn the table.
```\\nFile: symmio-core\\contracts\\facets\\PartyB\\PartyBFacetImpl.sol\\n    function chargeFundingRate(\\n        address partyA,\\n        uint256[] memory quoteIds,\\n        int256[] memory rates,\\n        PairUpnlSig memory upnlSig\\n    ) internal {\\n        LibMuon.verifyPairUpnl(upnlSig, msg.sender, partyA);\\n        require(quoteIds.length == rates.length, "PartyBFacet: Length not match");\\n        int256 partyBAvailableBalance = LibAccount.partyBAvailableBalanceForLiquidation(\\n            upnlSig.upnlPartyB,\\n            msg.sender,\\n            partyA\\n        );\\n        int256 partyAAvailableBalance = LibAccount.partyAAvailableBalanceForLiquidation(\\n            upnlSig.upnlPartyA,\\n            partyA\\n        );\\n        uint256 epochDuration;\\n        uint256 windowTime;\\n        for (uint256 i = 0; i < quoteIds.length; i++) {\\n// rest of code// rest of code//quoteIds is empty array, so code is never executed.\\n        }\\n        require(partyAAvailableBalance >= 0, "PartyBFacet: PartyA will be insolvent");\\n        require(partyBAvailableBalance >= 0, "PartyBFacet: PartyB will be insolvent");\\n        AccountStorage.layout().partyBNonces[msg.sender][partyA] += 1;\\n394:->       AccountStorage.layout().partyANonces[partyA] += 1;\\n    }\\n```\\n