<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def GetBalance(self, asset_id, watch_only=0):
 """ Get the balance of a specific token by its asset id. Args: asset_id (NEP5Token|TransactionOutput):
 an instance of type neo.Wallets.NEP5Token or neo.Core.TX.Transaction.TransactionOutput to get the balance from. watch_only (bool):
 True, to limit to watch only wallets. Returns: Fixed8: total balance. """

        total = Fixed8(0)

        if type(asset_id) is NEP5Token.NEP5Token:
            return self.GetTokenBalance(asset_id, watch_only)

        for coin in self.GetCoins():
            if coin.Output.AssetId == asset_id:
                if coin.State & CoinState.Confirmed > 0 and \
                        coin.State & CoinState.Spent == 0 and \
                        coin.State & CoinState.Locked == 0 and \
                        coin.State & CoinState.Frozen == 0 and \
                        coin.State & CoinState.WatchOnly == watch_only:
                    total = total + coin.Output.Value

        return total