Decrementing a gauge by 0 that is not in the user gauge list will fail an assert.
`ERC20Gauges._decrementGaugeWeight` has an edge case scenario where a user can attempt to decrement a `gauge` that is not in the user `gauge` list by 0 `weight`, which would trigger a failure in an assert.\\n```\\nfunction \\_decrementGaugeWeight(\\n    address user,\\n    address gauge,\\n    uint112 weight,\\n    uint32 cycle\\n) internal {\\n    uint112 oldWeight = getUserGaugeWeight[user][gauge];\\n\\n    getUserGaugeWeight[user][gauge] = oldWeight - weight;\\n    if (oldWeight == weight) {\\n        // If removing all weight, remove gauge from user list.\\n        assert(\\_userGauges[user].remove(gauge));\\n    }\\n```\\n\\nAs `_decrementGaugeWeight`, `decrementGauge`, or `decrementGauges` don't explicitly check that a `gauge` belongs to the user, the contract logic continues with its operations in `_decrementGaugeWeight` for any gauges passed to it. In general this is fine because if a user tries to decrement non-zero `weight` from a `gauge` they have no allocation to, thus getting `getUserGaugeWeight[user][gauge]=0`, there would be a revert due to a negative value being passed to `getUserGaugeWeight[user][gauge]`\\n```\\nuint112 oldWeight = getUserGaugeWeight[user][gauge];\\n\\ngetUserGaugeWeight[user][gauge] = oldWeight - weight;\\n```\\n\\nHowever, passing a `weight=0` parameter with a `gauge` that doesn't belong to the user, would successfully process that line. This would then be followed by an evaluation `if (oldWeight == weight)`, which would also succeed since both are 0, to finally reach an assert that will verify a remove of that `gauge` from the user `gauge` list. However, it will fail since it was never there in the first place.\\n```\\nassert(\\_userGauges[user].remove(gauge));\\n```\\n\\nAlthough an edge case with no effect on contract state's health, it may happen with front end bugs or incorrect user transactions, and it is best not to have asserts fail.
Replace `assert()` with a `require()` or verify that the gauge belongs to the user prior to performing any operations.
```\\nfunction \\_decrementGaugeWeight(\\n    address user,\\n    address gauge,\\n    uint112 weight,\\n    uint32 cycle\\n) internal {\\n    uint112 oldWeight = getUserGaugeWeight[user][gauge];\\n\\n    getUserGaugeWeight[user][gauge] = oldWeight - weight;\\n    if (oldWeight == weight) {\\n        // If removing all weight, remove gauge from user list.\\n        assert(\\_userGauges[user].remove(gauge));\\n    }\\n```\\n