this is my current code for an ide program: "import java.security.MessageDigest;

public class Utility {
    
    public static String getHash(String base)
    {
        String message=""; 
         
        try{
        MessageDigest digest = MessageDigest.getInstance("SHA-256");
        byte[] hash = digest.digest(base.getBytes("UTF-8"));
        StringBuffer hexString = new StringBuffer();

        for (int i = 0; i < hash.length; i++) {
            String hex = Integer.toHexString(0xff & hash[i]);
            if(hex.length() == 1) hexString.append('0');
            hexString.append(hex);
        }

        message = hexString.toString();
    
        } catch(Exception ex){
             throw new RuntimeException(ex);
        }
        
        return message;
    }
     
    public static void printLine(int num)
    {
      printLine(num,'-');
    }
     
    public static void printDoubleLine(int num)
    {
        printLine(num,'=');
    }
    
    
    public static void printLine(int num,char pattern)
    {
      for(int i =0;i<num;i++)
      {
          System.out.print(pattern);
      }
      System.out.println("");
        
    }
    
}

import java.util.*;
import java.io.*;

public class Admin {

	private ArrayList<Player> players;
	
	public Admin() {
		players = new ArrayList<Player>();
		loadPlayers();
	}

	private void loadPlayers() {
		try {
			FileInputStream file = new FileInputStream(PLAYERS_FILENAME);
			ObjectInputStream output = new ObjectInputStream(file);
			
			boolean endOfFile = false;
			while(endOfFile) {
				try {
					Player player = (Player)output.readObject();
					players.add(player);
				}catch(EOException ex) {
					endOfFile = true;
				}
			}
		}catch(ClassNotFoundException ex) {
			System.out.println("ClassNotFoundException");
		}catch(FileNotFoundException ex) {
			System.out.println("FileNotFoundException");
		}catch(IOException ex) {
			System.out.println("IOException");
		}
		System.out.println("Players information loaded");
	}
	
	private void displayPlayers() {
		for(Player player: players) {
			player.display();
		}
	}
	
	private void updatePlayersChip() {
		for(Player player: players) {
			player.addChips(100);
		}
	}
	
	private void createNewPlayer() {
		int playerNum = players.size()+1;
		Player player = new Player("Player"+playerNum,"Password"+playerNum,100);
		players.add(player);
	}
	
	private void savePlayersToBin() {
		try {
			FileOutputStream file = new FileOutputStream(PLAYERS_FILENAME);
			ObjectOutputStream opStream = new ObjectOutputStream(file);
			
			for(Player player: players) {
				opStream.writeObject(player);
			}
			opStream.close();
		}catch(IOException ex) {
			
		}
	}

	public void run() {
		displayPlayers();
		updatePlayersChip();
		displayPlayers();
		createNewPlayer();
		displayPlayers();
		savePlayersToBin();
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}
}

public class Card {
    private String suit;
    private String name;
    private int value;
    private boolean hidden;

    public Card(String suit, String name, int value) {
        this.suit = suit;
        this.name = name;
        this.value = value;
        this.hidden = false; // Change this line to make cards revealed by default
    }

    public int getValue() {
        return value;
    }

    public void reveal() {
        this.hidden = false;
    }

    public boolean isHidden() {
        return hidden;
    }

    @Override
    public String toString() {
        return this.hidden ? "<HIDDEN CARD>" : "<" + this.suit + " " + this.name + ">";
    }

    public static void main(String[] args) {
        Card card = new Card("Heart", "Ace", 1);
        System.out.println(card);
    }
    
    public void hide() {
        this.hidden = true;
    }
}

import java.io.*;

public class CreatePlayersBin {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		Player player1 = new Player("Player1", "Password1", 100);
		Player player2 = new Player("Player2", "Password2", 200);
		Player player3 = new Player("Player3", "Password3", 300);
		
		try {
			FileOutputStream file = new FileOutputStream("players.bin");
			ObjectOutputStream opStream = new ObjectOutputStream(file);
			
			opStream.writeObject(player1);
			opStream.writeObject(player2);
			opStream.writeObject(player3);
			opStream.close();
		}catch(IOException ex) {
			
		}
	}
}

public class Dealer extends Player {
    public Dealer() {
        super("Dealer", "", 0);
    }

    @Override
    public void addCard(Card card) {
        super.addCard(card);
        
        // Hide only the first card for the dealer
        if (cardsOnHand.size() == 1) {
            cardsOnHand.get(0).hide();
        }
    }

    @Override
    public void showCardsOnHand() {
        System.out.println(getLoginName());
        int numCards = cardsOnHand.size();
        for (int i = 0; i < numCards; i++) {
            System.out.print(cardsOnHand.get(i));
            if (i < numCards - 1) {
                System.out.print(", ");
            }
        }
        System.out.println("\n");
    }
    
    public void revealHiddenCard() {
        if (!cardsOnHand.isEmpty()) {
            cardsOnHand.get(0).reveal();
        }
    }
}

import java.util.ArrayList;
import java.util.Random;

public class Deck {
    private ArrayList<Card> cards;

    public Deck() {
        cards = new ArrayList<Card>();
        String[] suits = {"Heart", "Diamond", "Spade", "Club"};
        for (int i = 0; i < suits.length; i++) {
            String suit = suits[i];
            Card card = new Card(suit, "Ace", 1);
            cards.add(card);
            for (int n = 2; n <= 10; n++) {
                Card aCard = new Card(suit, n + "", n);
                cards.add(aCard);
            }
            Card jackCard = new Card(suit, "Jack", 10);
            cards.add(jackCard);
            Card queenCard = new Card(suit, "Queen", 10);
            cards.add(queenCard);
            Card kingCard = new Card(suit, "King", 10);
            cards.add(kingCard);
        }
    }

    public void shuffle() {
        Random random = new Random();
        for (int i = 0; i < 1000; i++) {
            int indexA = random.nextInt(cards.size());
            int indexB = random.nextInt(cards.size());
            Card cardA = cards.get(indexA);
            Card cardB = cards.get(indexB);
            cards.set(indexA, cardB);
            cards.set(indexB, cardA);
        }
    }

    public Card dealCard() {
        return cards.remove(0);
    }
}

import java.util.Scanner;
import java.util.Random;

public class GameModule {
    private static final int NUM_ROUNDS = 4;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("HighSum GAME");
        System.out.println("================================================================================");

        String playerName = "";
        String playerPassword = "";
        boolean loggedIn = false;

        // Add user authentication
        while (!loggedIn) {
            playerName = Keyboard.readString("Enter Login name > ");
            playerPassword = Keyboard.readString("Enter Password > ");
            if (playerName.equals("IcePeak") && playerPassword.equals("password")) {
                loggedIn = true;
            } else {
                System.out.println("Username or Password is incorrect. Please try again.");
            }
        }

        Player player = new Player(playerName, playerPassword, 100);
        Dealer dealer = new Dealer();
        Deck deck = new Deck();

        boolean nextGame = true;
        int betOnTable;
        boolean playerQuit = false; // Add this line

        // Add "HighSum GAME" text after logging in
        System.out.println("================================================================================");
        System.out.println("HighSum GAME");

        while (nextGame) {

            System.out.println("================================================================================");
            System.out.println(playerName + ", You have " + player.getChips() + " chips");
            System.out.println("--------------------------------------------------------------------------------");
            System.out.println("Game starts - Dealer shuffles deck.");

            deck.shuffle();
            dealer.clearCardsOnHand();
            player.clearCardsOnHand();

            // Switch the order of dealer and player to deal cards to the dealer first
            for (int i = 0; i < 2; i++) {
                dealer.addCard(deck.dealCard());
                player.addCard(deck.dealCard());
            }

            betOnTable = 0;

            int round = 1;
            int dealerBet;
            while (round <= NUM_ROUNDS) {
                System.out.println("--------------------------------------------------------------------------------");
                System.out.println("Dealer dealing cards - ROUND " + round);
                System.out.println("--------------------------------------------------------------------------------");

                // Show dealer’s cards first, then player’s cards
                if (round == 2) {
                    dealer.addCard(deck.dealCard());
                    player.addCard(deck.dealCard());
                }

                dealer.showCardsOnHand();
                player.showCardsOnHand();
                System.out.println("Value: " + player.getTotalCardsValue());

                if (round > 1) {
                    dealer.addCard(deck.dealCard());
                    player.addCard(deck.dealCard());
                }

                if (round == 4) {
                    dealer.revealHiddenCard();
                }

                if (round >= 2) {
                    if (player.getTotalCardsValue() > dealer.getTotalCardsValue()) {
                        boolean validChoice = false;
                        while (!validChoice) {
                            String prompt = (round == 2) ? "Do you want to follow? [Y/N]: " : "Player call, do you want to [C]all or [Q]uit?: ";
                            String choice = Keyboard.readString(prompt).toLowerCase();
                            if (choice.equals("c") || choice.equals("y")) {
                                validChoice = true;
                                int playerBet = Keyboard.readInt("Player, state your bet > ");

                                // Check for invalid bet conditions
                                if (playerBet > 100) {
                                    System.out.println("Insufficient chips");
                                    validChoice = false;
                                } else if (playerBet <= 0) {
                                    System.out.println("Invalid bet");
                                    validChoice = false;
                                } else {
                                    betOnTable += playerBet;
                                    player.deductChips(playerBet);
                                    System.out.println("Player call, state bet: " + playerBet);
                                    System.out.println(playerName + ", You are left with " + player.getChips() + " chips");
                                    System.out.println("Bet on table: " + betOnTable);
                                    round++;
                                }
                            } else if (choice.equals("q") || choice.equals("n")) {
                                validChoice = true;
                                nextGame = false;
                                round = NUM_ROUNDS + 1;
                                playerQuit = true; // Add this line

                                // Give all the current chips bet to the dealer and the dealer wins
                                System.out.println("Since the player has quit, all the current chips bet goes to the dealer.");
                                System.out.println("Dealer Wins");
                                break;
                            }
                        }
                    } else {
                        dealerBet = Math.min(new Random().nextInt(11), 10);
                        betOnTable += dealerBet;
                        System.out.println("Dealer call, state bet: " + dealerBet);
                        System.out.println(playerName + ", You are left with " + player.getChips() + " chips");
                        System.out.println("Bet on table: " + betOnTable);
                        round++;
                    }
                } else {
                    dealerBet = 10;
                    betOnTable += dealerBet;
                    player.deductChips(dealerBet);
                    System.out.println("Dealer call, state bet: " + dealerBet);
                    System.out.println(playerName + ", You are left with " + player.getChips() + " chips");
                    System.out.println("Bet on table: " + betOnTable);
                    round++;
                }
            }

            // Determine the winner after the game ends
            if (!playerQuit) { // Add this line
                System.out.println("--------------------------------------------------------------------------------");
                System.out.println("Game End - Dealer reveal hidden cards");
                System.out.println("--------------------------------------------------------------------------------");
                dealer.showCardsOnHand();
                System.out.println("Value: " + dealer.getTotalCardsValue());
                player.showCardsOnHand();
                System.out.println("Value: " + player.getTotalCardsValue());
                if (player.getTotalCardsValue() > dealer.getTotalCardsValue()) {
                    System.out.println(playerName + " Wins");
                    player.addChips(betOnTable);
                } else {
                    System.out.println("Dealer Wins");
                }
                System.out.println(playerName + ", You have " + player.getChips() + " chips");
                System.out.println("Dealer shuffles used cards and place behind the deck.");
                System.out.println("--------------------------------------------------------------------------------");
            } // Add this line

            boolean valid = false;
            while (!valid) {
                String input = Keyboard.readString("Next Game? (Y/N) > ").toLowerCase();
                if (input.equals("y")) {
                    playerQuit = false; // Add this line
                    nextGame = true;
                    valid = true;
                } else if (input.equals("n")) {
                    nextGame = false;
                    valid = true;
                } else {
                    System.out.println("*** Please enter Y or N ");
                }
            }
        }
    }
}

public class Keyboard {

	public static String readString(String prompt) {
		System.out.print(prompt);
		return new java.util.Scanner(System.in).nextLine();
	}

	public static int readInt(String prompt) {
		int input = 0;
		boolean valid = false;
		while (!valid) {
			try {
				input = Integer.parseInt(readString(prompt));
				valid = true;
			} catch (NumberFormatException e) {
				System.out.println("*** Please enter an integer ***");
			}
		}
		return input;
	}

	public static double readDouble(String prompt) {
		double input = 0;
		boolean valid = false;
		while (!valid) {
			try {
				input = Double.parseDouble(readString(prompt));
				valid = true;
			} catch (NumberFormatException e) {
				System.out.println("*** Please enter a double ***");
			}
		}
		return input;
	}

	public static float readFloat(String prompt) {
		float input = 0;
		boolean valid = false;
		while (!valid) {
			try {
				input = Float.parseFloat(readString(prompt));
				valid = true;
			} catch (NumberFormatException e) {
				System.out.println("*** Please enter a float ***");
			}
		}
		return input;
	}

	public static long readLong(String prompt) {
		long input = 0;
		boolean valid = false;
		while (!valid) {
			try {
				input = Long.parseLong(readString(prompt));
				valid = true;
			} catch (NumberFormatException e) {
				e.printStackTrace();
				System.out.println("*** Please enter a long ***");
			}
		}
		return input;
	}

	public static char readChar(String prompt) {
		char input = 0;
		boolean valid = false;
		while (!valid) {
			String temp = readString(prompt);
			if (temp.length() != 1) {
				System.out.println("*** Please enter a character ***");
			} else {
				input = temp.charAt(0);
				valid = true;
			}
		}
		return input;
	}

	public static boolean readBoolean(String prompt) {
		boolean valid = false;
		while (!valid) {
			String input = readString(prompt);
			if (input.equalsIgnoreCase("yes") || input.equalsIgnoreCase("y") || input.equalsIgnoreCase("true")
					|| input.equalsIgnoreCase("t")) {
				return true;
			} else if (input.equalsIgnoreCase("no") || input.equalsIgnoreCase("n") || input.equalsIgnoreCase("false")
					|| input.equalsIgnoreCase("f")) {
				return false;
			} else {
				System.out.println("*** Please enter Yes/No or True/False ***");
			}
		}
		return false;
	}

	public static java.util.Date readDate(String prompt) {
		java.util.Date date = null;
		boolean valid = false;
		while (!valid) {
			try {
				String input = readString(prompt).trim();
				if (input.matches("\\d\\d/\\d\\d/\\d\\d\\d\\d")) {
					int day = Integer.parseInt(input.substring(0, 2));
					int month = Integer.parseInt(input.substring(3, 5));
					int year = Integer.parseInt(input.substring(6, 10));
					java.util.Calendar cal = java.util.Calendar.getInstance();
					cal.setLenient(false);
					cal.set(year, month - 1, day, 0, 0, 0);
					date = cal.getTime();
					valid = true;
				} else {
					System.out.println("*** Please enter a date (DD/MM/YYYY) ***");
				}
			} catch (IllegalArgumentException e) {
				System.out.println("*** Please enter a date (DD/MM/YYYY) ***");
			}
		}
		return date;
	}

	private static String quit = "0";

	public static int getUserOption(String title, String[] menu) {
		displayMenu(title, menu);
		int choice = Keyboard.readInt("Enter Choice --> ");
		while (choice > menu.length || choice < 0) {
			choice = Keyboard.readInt("Invalid Choice, Re-enter --> ");
		}
		return choice;
	}

	private static void displayMenu(String title, String[] menu) {
		line(80, "=");
		System.out.println(title.toUpperCase());
		line(80, "-");
		for (int i = 0; i < menu.length; i++) {
			System.out.println("[" + (i + 1) + "] " + menu[i]);
		}
		System.out.println("[" + quit + "] Quit");
		line(80, "-");
	}

	public static void line(int len, String c) {
		System.out.println(String.format("%" + len + "s", " ").replaceAll(" ", c));
	}
}

import java.util.ArrayList;

public class Player extends User {
    private int chips;
    protected ArrayList<Card> cardsOnHand;

    public Player(String loginName, String password, int chips) {
        super(loginName, password);
        this.chips = chips;
        this.cardsOnHand = new ArrayList<Card>();
    }

    public void addCard(Card card) {
        this.cardsOnHand.add(card);
    }
    
    public void display() {
        super.display();
        System.out.println(this.chips);
      }

    public void showCardsOnHand() {
        System.out.println(getLoginName());
        int numCards = cardsOnHand.size();
        for (int i = 0; i < numCards; i++) {
            if (i < numCards - 1) {
                System.out.print(cardsOnHand.get(i) + ", ");
            } else {
                System.out.print(cardsOnHand.get(i));
            }
        }
        System.out.println("\n");
    }

    public int getChips() {
        return this.chips;
    }

    public void addChips(int amount) {
        this.chips += amount;
    }

    public void deductChips(int amount) {
        if (amount < chips)
            this.chips -= amount;
    }

    public int getTotalCardsValue() {
        int totalValue = 0;
        for (Card card : cardsOnHand) {
            totalValue += card.getValue();
        }
        return totalValue;
    }

    public int getNumberOfCards() {
        return cardsOnHand.size();
    }

    public void clearCardsOnHand() {
        cardsOnHand.clear();
    }
}

import java.io.Serializable;

abstract public class User implements Serializable {

	private static final long serialVersionUID = 1L;
	private String loginName;
	private String hashPassword; //plain password
	
	public User(String loginName, String password) {
		this.loginName = loginName;
		this.hashPassword = Utility.getHash(password);
	}

	public String getLoginName() {
		return loginName;
	}

	public boolean checkPassword(String password) {
		return this.hashPassword.equals(Utility.getHash(password));
	}
	
	public void display() {
		System.out.println(this.loginName+","+this.hashPassword);
	}
}

import java.io.*;

public class AdminFile {

    public static void main(String[] args) {
        try {
            File file = new File("admin.txt");
            if (!file.exists()) {
                FileWriter writer = new FileWriter("admin.txt");
                BufferedWriter bufferedWriter = new BufferedWriter(writer);

                bufferedWriter.write("Username: admin");
                bufferedWriter.newLine();
                bufferedWriter.write("Password: admin");
                bufferedWriter.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}"

these are the requirements: "You have to provide screen outputs to show the correct execution of your program according
to the requirements stated.
The required test runs are:
• Admin login
• Create a player
• Delete a player
• View all players
• Issue more chips to a player
• Reset player’s password
• Change administrator’s password
• Administrator login and logout to admin module using updated password.
• Player login and logout to game module using updated password."

add the approriate code so that adminfile can generate admin.txt file.
print out the full gamemodule and admin code after adding the necessary.
check the for errors and make sure it works in the ide.