public static List<Badge> filtered(boolean global) {

    HashSet<Badge> filtered = new HashSet<Badge>(global ? Badges.global : Badges.local);

    {
      Iterator<Badge> iterator = filtered.iterator();
      while (iterator.hasNext()) {
        Badge badge = iterator.next();
        if ((!global && badge.meta) || badge.image == -1) {
          iterator.remove();
        }
      }
    }

    leaveBest(
        filtered,
        Badge.MONSTERS_SLAIN_1,
        Badge.MONSTERS_SLAIN_2,
        Badge.MONSTERS_SLAIN_3,
        Badge.MONSTERS_SLAIN_4);
    leaveBest(
        filtered,
        Badge.GOLD_COLLECTED_1,
        Badge.GOLD_COLLECTED_2,
        Badge.GOLD_COLLECTED_3,
        Badge.GOLD_COLLECTED_4);
    leaveBest(
        filtered, Badge.BOSS_SLAIN_1, Badge.BOSS_SLAIN_2, Badge.BOSS_SLAIN_3, Badge.BOSS_SLAIN_4);
    leaveBest(
        filtered,
        Badge.LEVEL_REACHED_1,
        Badge.LEVEL_REACHED_2,
        Badge.LEVEL_REACHED_3,
        Badge.LEVEL_REACHED_4);
    leaveBest(
        filtered,
        Badge.STRENGTH_ATTAINED_1,
        Badge.STRENGTH_ATTAINED_2,
        Badge.STRENGTH_ATTAINED_3,
        Badge.STRENGTH_ATTAINED_4);
    leaveBest(
        filtered, Badge.FOOD_EATEN_1, Badge.FOOD_EATEN_2, Badge.FOOD_EATEN_3, Badge.FOOD_EATEN_4);
    leaveBest(
        filtered, Badge.ITEM_LEVEL_1, Badge.ITEM_LEVEL_2, Badge.ITEM_LEVEL_3, Badge.ITEM_LEVEL_4);
    leaveBest(
        filtered,
        Badge.POTIONS_COOKED_1,
        Badge.POTIONS_COOKED_2,
        Badge.POTIONS_COOKED_3,
        Badge.POTIONS_COOKED_4);
    leaveBest(filtered, Badge.BOSS_SLAIN_1_ALL_CLASSES, Badge.BOSS_SLAIN_3_ALL_SUBCLASSES);
    leaveBest(filtered, Badge.DEATH_FROM_FIRE, Badge.YASD);
    leaveBest(filtered, Badge.DEATH_FROM_GAS, Badge.YASD);
    leaveBest(filtered, Badge.DEATH_FROM_HUNGER, Badge.YASD);
    leaveBest(filtered, Badge.DEATH_FROM_POISON, Badge.YASD);
    leaveBest(filtered, Badge.ALL_POTIONS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED);
    leaveBest(filtered, Badge.ALL_SCROLLS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED);
    leaveBest(filtered, Badge.ALL_RINGS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED);
    leaveBest(filtered, Badge.ALL_WANDS_IDENTIFIED, Badge.ALL_ITEMS_IDENTIFIED);
    leaveBest(filtered, Badge.VICTORY, Badge.VICTORY_ALL_CLASSES);
    leaveBest(filtered, Badge.VICTORY, Badge.HAPPY_END);
    leaveBest(filtered, Badge.VICTORY, Badge.CHAMPION);
    leaveBest(
        filtered,
        Badge.GAMES_PLAYED_1,
        Badge.GAMES_PLAYED_2,
        Badge.GAMES_PLAYED_3,
        Badge.GAMES_PLAYED_4);

    ArrayList<Badge> list = new ArrayList<Badge>(filtered);
    Collections.sort(list);

    return list;
  }