public static Moves getRemainingExpansionMoves(BotState state) {
		Moves out = new Moves();
		List<Region> borderRegions = state.getVisibleMap().getBorderRegions(state);
		List<Region> valuableExpansionRegions = new ArrayList<>();
		for (Region borderRegion : borderRegions) {
			if (isExpandingValuable(state, borderRegion)) {
				valuableExpansionRegions.add(borderRegion);
			}
		}
		// Now that we found out which regions are good to make an expansion
		// move calculate the expansion moves.
		for (Region valuableExpansionRegion : valuableExpansionRegions) {
			List<Region> possibleToRegions = getNeighborsWithinMostDesirableSuperregion(valuableExpansionRegion, state);

			List<Region> orderedPossibleToRegions = RegionValueCalculator.sortRegionsByExpansionRegionValue(state,
					possibleToRegions);
			Region toRegion = orderedPossibleToRegions.get(0);
			if (valuableExpansionRegion.getIdleArmies() > 2
					|| (valuableExpansionRegion.getIdleArmies() == 2 && toRegion.getArmies() == 1)) {
				int valuableExpansionRegionIdleArmies = valuableExpansionRegion.getIdleArmies();
				AttackTransferMove move = new AttackTransferMove(state.getMyPlayerName(), valuableExpansionRegion,
						toRegion, valuableExpansionRegionIdleArmies);
				out.attackTransferMoves.add(move);
			}
		}
		MovesPerformer.performMoves(state, out);
		return out;
	}