import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class mem {

    private static final String TAB = "    ";
    private static int splCount = 0;
    private static int count = 8;

    private static final String[] SPL = {
        "███╗   ███╗███████╗███╗   ███╗\n",
        "████╗ ████║██╔════╝████╗ ████║\n",
        "██╔████╔██║█████╗  ██╔████╔██║\n",
        "██║╚██╔╝██║██╔══╝  ██║╚██╔╝██║\n",
        "██║ ╚═╝ ██║███████╗██║ ╚═╝ ██║\n",
        "╚═╝     ╚═╝╚══════╝╚═╝     ╚═╝\n"
    };

    public static void printMEMinfo() {
        try (BufferedReader meminfo = new BufferedReader(new FileReader("/proc/meminfo"))) {
            String line;
            while ((line = meminfo.readLine()) != null) {
                if (line.contains("MemTotal:") ||
                    line.contains("MemFree:") ||
                    line.contains("Buffers:") ||
                    line.contains("Cached:") ||
                    line.contains("Percpu:") ||
                    line.contains("HardwareCorrupted:") ||
                    line.contains("KernelStack:")) {
                    
                    System.out.println(line);
                    Thread.sleep(30); // 30,000 microseconds = 30 milliseconds
                }
            }
        } catch (IOException e) {
            System.err.println("Error could not open /proc/meminfo");
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }

    public static void clearScreen() {
        System.out.print("\033[H\033[2J\033[3J");
        System.out.flush();
    }

    public static void printTabs(int count) {
        for (int i = 0; i < count; ++i) {
            System.out.print(TAB);
        }
    }

    public static void splashAnimate() {
        try {
            while (count > 0) {
                clearScreen();
                while (splCount < 5) { // Retained your original limit of 5 lines during animation
                    printTabs(count);
                    System.out.print(SPL[splCount]);
                    splCount = splCount + 1;
                }
                splCount = 0;
                count = count - 1;
                Thread.sleep(15); // 15,000 microseconds = 15 milliseconds
            }
            clearScreen();
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }

    public static void splash() {
        clearScreen();
        for (String line : SPL) {
            System.out.print(line);
        }
    }

    public static void main(String[] args) {
        try {
            clearScreen();
            splashAnimate();
            splash();
            Thread.sleep(40); // 40,000 microseconds = 40 milliseconds
            printMEMinfo();
            System.out.println();
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}
