Program: 157648
Project: 157648
Buggy source:
/** 
 * Use the previous addBlockingGroup instead (solveBanding should always be true  outside this method)
 * @param blockerId
 * @param attackerId
 * @param playerId
 * @param game
 * @param solveBanding check whether also add creatures banded with attackerId
 */
public void addBlockingGroup(UUID blockerId,UUID attackerId,UUID playerId,Game game,boolean solveBanding){
  Permanent blocker=game.getPermanent(blockerId);
  if (blockerId != null && blocker != null && blocker.getBlocking() > 1) {
    if (!blockingGroupsContains(blockerId)) {
      CombatGroup newGroup=new CombatGroup(playerId,false,playerId);
      newGroup.blockers.add(blockerId);
      for (      CombatGroup group : groups) {
        if (group.getBlockers().contains(blockerId)) {
          for (          UUID attacker : group.attackers) {
            newGroup.attackers.add(attacker);
          }
        }
      }
      blockingGroups.put(blockerId,newGroup);
    }
 else {
      blockingGroups.get(blockerId).attackers.add(attackerId);
    }
  }
  if (solveBanding) {
    Permanent attacker=game.getPermanent(attackerId);
    if (attacker != null) {
      for (      UUID bandedId : attacker.getBandedCards()) {
        if (!bandedId.equals(attackerId)) {
          if (blockingGroups.get(blockerId) == null || !blockingGroups.get(blockerId).attackers.contains(bandedId)) {
            Permanent banded=game.getPermanent(bandedId);
            CombatGroup bandedGroup=findGroup(bandedId);
            if (banded != null && bandedGroup != null) {
              bandedGroup.addBlockerToGroup(blockerId,playerId,game);
              addBlockingGroup(blockerId,bandedId,playerId,game,false);
              blocker.setBlocking(blocker.getBlocking() - 1);
            }
          }
        }
      }
    }
  }
}

Fixed version (ground truth):
/** 
 * Use the previous addBlockingGroup instead (solveBanding should always be true outside this method)
 * @param blockerId
 * @param attackerId
 * @param playerId
 * @param game
 * @param solveBanding check whether also add creatures banded withattackerId
 */
public void addBlockingGroup(UUID blockerId,UUID attackerId,UUID playerId,Game game,boolean solveBanding){
  Permanent blocker=game.getPermanent(blockerId);
  if (blockerId != null && blocker != null && blocker.getBlocking() > 1) {
    if (!blockingGroupsContains(blockerId)) {
      CombatGroup newGroup=new CombatGroup(playerId,false,playerId);
      newGroup.blockers.add(blockerId);
      for (      CombatGroup group : groups) {
        if (group.getBlockers().contains(blockerId)) {
          for (          UUID attacker : group.attackers) {
            newGroup.attackers.add(attacker);
          }
        }
      }
      blockingGroups.put(blockerId,newGroup);
    }
 else {
      blockingGroups.get(blockerId).attackers.add(attackerId);
    }
  }
  if (solveBanding) {
    Permanent attacker=game.getPermanent(attackerId);
    if (attacker != null) {
      for (      UUID bandedId : attacker.getBandedCards()) {
        if (!bandedId.equals(attackerId)) {
          if (blockingGroups.get(blockerId) == null || !blockingGroups.get(blockerId).attackers.contains(bandedId)) {
            Permanent banded=game.getPermanent(bandedId);
            CombatGroup bandedGroup=findGroup(bandedId);
            if (banded != null && bandedGroup != null) {
              bandedGroup.addBlockerToGroup(blockerId,playerId,game);
              addBlockingGroup(blockerId,bandedId,playerId,game,false);
              blocker.setBlocking(blocker.getBlocking() - 1);
            }
          }
        }
      }
    }
  }
}