Program: 112727
Project: 112727
Buggy source:
protected HearthTreeNode notifyCardPlayResolve(HearthTreeNode boardState,Deck deckPlayer0,Deck deckPlayer1,boolean singleRealizationOnly) throws HSException {
  HearthTreeNode toRet=boardState;
  ArrayList<CardPlayAfterInterface> matches=new ArrayList<CardPlayAfterInterface>();
  for (  Card card : toRet.data_.getCurrentPlayerHand()) {
    if (card instanceof CardPlayAfterInterface) {
      matches.add((CardPlayAfterInterface)card);
    }
  }
  Card hero=toRet.data_.getCurrentPlayerHero();
  if (hero instanceof CardPlayAfterInterface) {
    matches.add((CardPlayAfterInterface)hero);
  }
  for (  Minion minion : PlayerSide.CURRENT_PLAYER.getPlayer(toRet).getMinions()) {
    if (!minion.isSilenced()) {
      if (minion instanceof CardPlayAfterInterface) {
        matches.add((CardPlayAfterInterface)minion);
      }
    }
  }
  for (  CardPlayAfterInterface match : matches) {
    toRet=match.onCardPlayResolve(PlayerSide.CURRENT_PLAYER,PlayerSide.CURRENT_PLAYER,this,toRet,deckPlayer0,deckPlayer1,singleRealizationOnly);
  }
  matches.clear();
  for (  Card card : toRet.data_.getWaitingPlayerHand()) {
    if (card instanceof CardPlayAfterInterface) {
      matches.add((CardPlayAfterInterface)card);
    }
  }
  hero=toRet.data_.getWaitingPlayerHero();
  if (hero instanceof CardPlayAfterInterface) {
    matches.add((CardPlayAfterInterface)hero);
  }
  for (  Minion minion : PlayerSide.WAITING_PLAYER.getPlayer(toRet).getMinions()) {
    if (!minion.isSilenced()) {
      if (minion instanceof CardPlayAfterInterface) {
        matches.add((CardPlayAfterInterface)minion);
      }
    }
  }
  for (  CardPlayAfterInterface match : matches) {
    toRet=match.onCardPlayResolve(PlayerSide.WAITING_PLAYER,PlayerSide.CURRENT_PLAYER,this,toRet,deckPlayer0,deckPlayer1,singleRealizationOnly);
  }
  toRet=BoardStateFactoryBase.handleDeadMinions(toRet,deckPlayer0,deckPlayer1);
  return toRet;
}

Fixed version (ground truth):
protected HearthTreeNode notifyCardPlayResolve(HearthTreeNode boardState,Deck deckPlayer0,Deck deckPlayer1,boolean singleRealizationOnly) throws HSException {
  HearthTreeNode toRet=boardState;
  ArrayList<CardPlayAfterInterface> matches=new ArrayList<CardPlayAfterInterface>();
  for (  Card card : toRet.data_.getCurrentPlayerHand()) {
    if (card instanceof CardPlayAfterInterface) {
      matches.add((CardPlayAfterInterface)card);
    }
  }
  Card hero=toRet.data_.getCurrentPlayerHero();
  if (hero instanceof CardPlayAfterInterface) {
    matches.add((CardPlayAfterInterface)hero);
  }
  for (  Minion minion : PlayerSide.CURRENT_PLAYER.getPlayer(toRet).getMinions()) {
    if (!minion.isSilenced() && minion instanceof CardPlayAfterInterface) {
      matches.add((CardPlayAfterInterface)minion);
    }
  }
  for (  CardPlayAfterInterface match : matches) {
    toRet=match.onCardPlayResolve(PlayerSide.CURRENT_PLAYER,PlayerSide.CURRENT_PLAYER,this,toRet,deckPlayer0,deckPlayer1,singleRealizationOnly);
  }
  matches.clear();
  for (  Card card : toRet.data_.getWaitingPlayerHand()) {
    if (card instanceof CardPlayAfterInterface) {
      matches.add((CardPlayAfterInterface)card);
    }
  }
  hero=toRet.data_.getWaitingPlayerHero();
  if (hero instanceof CardPlayAfterInterface) {
    matches.add((CardPlayAfterInterface)hero);
  }
  for (  Minion minion : PlayerSide.WAITING_PLAYER.getPlayer(toRet).getMinions()) {
    if (!minion.isSilenced() && minion instanceof CardPlayAfterInterface) {
      matches.add((CardPlayAfterInterface)minion);
    }
  }
  for (  CardPlayAfterInterface match : matches) {
    toRet=match.onCardPlayResolve(PlayerSide.WAITING_PLAYER,PlayerSide.CURRENT_PLAYER,this,toRet,deckPlayer0,deckPlayer1,singleRealizationOnly);
  }
  toRet=BoardStateFactoryBase.handleDeadMinions(toRet,deckPlayer0,deckPlayer1);
  return toRet;
}