// Path: src/main/java/org/fusesource/jansi/AnsiColors.java
// public enum AnsiColors {
// 
//     Colors16("16 colors"),
//     Colors256("256 colors"),
//     TrueColor("24-bit colors");
// 
//     private final String description;
// 
//     AnsiColors(String description) {
//         this.description = description;
//     }
// 
//     String getDescription() {
//         return description;
//     }
// }
// 
// Path: src/main/java/org/fusesource/jansi/AnsiMode.java
// public enum AnsiMode {
// 
//     Strip("Strip all ansi sequences"),
//     Default("Print ansi sequences if the stream is a terminal"),
//     Force("Always print ansi sequences, even if the stream is redirected");
// 
//     private final String description;
// 
//     AnsiMode(String description) {
//         this.description = description;
//     }
// 
//     String getDescription() {
//         return description;
//     }
// }
// 
// Path: src/main/java/org/fusesource/jansi/AnsiType.java
// public enum AnsiType {
// 
//     Native("Supports ansi sequences natively"),
//     Unsupported("Ansi sequences are stripped out"),
//     VirtualTerminal("Supported through windows virtual terminal"),
//     Emulation("Emulated through using windows API console commands"),
//     Redirected("The stream is redirected to a file or a pipe");
// 
//     private final String description;
// 
//     AnsiType(String description) {
//         this.description = description;
//     }
// 
//     String getDescription() {
//         return description;
//     }
// }


import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import org.fusesource.jansi.AnsiColors;
import org.fusesource.jansi.AnsiMode;
import org.fusesource.jansi.AnsiType;
    private static final int LOOKING_FOR_SECOND_ESC_CHAR = 1;
    private static final int LOOKING_FOR_NEXT_ARG = 2;
    private static final int LOOKING_FOR_STR_ARG_END = 3;
    private static final int LOOKING_FOR_INT_ARG_END = 4;
    private static final int LOOKING_FOR_OSC_COMMAND = 5;
    private static final int LOOKING_FOR_OSC_COMMAND_END = 6;
    private static final int LOOKING_FOR_OSC_PARAM = 7;
    private static final int LOOKING_FOR_ST = 8;
    private static final int LOOKING_FOR_CHARSET = 9;

    private static final int FIRST_ESC_CHAR = 27;
    private static final int SECOND_ESC_CHAR = '[';
    private static final int SECOND_OSC_CHAR = ']';
    private static final int BEL = 7;
    private static final int SECOND_ST_CHAR = '\\';
    private static final int SECOND_CHARSET0_CHAR = '(';
    private static final int SECOND_CHARSET1_CHAR = ')';

    private AnsiProcessor ap;
    private final static int MAX_ESCAPE_SEQUENCE_LENGTH = 100;
    private final byte[] buffer = new byte[MAX_ESCAPE_SEQUENCE_LENGTH];
    private int pos = 0;
    private int startOfValue;
    private final ArrayList<Object> options = new ArrayList<Object>();
    private int state = LOOKING_FOR_FIRST_ESC_CHAR;
    private final Charset cs;

    private final WidthSupplier width;
    private final AnsiProcessor processor;
    private final AnsiType type;
// Path: src/main/java/org/fusesource/jansi/AnsiColors.java
// public enum AnsiColors {
// 
//     Colors16("16 colors"),
//     Colors256("256 colors"),
//     TrueColor("24-bit colors");
// 
//     private final String description;
// 
//     AnsiColors(String description) {
//         this.description = description;
//     }
// 
//     String getDescription() {
//         return description;
//     }
// }
// 
// Path: src/main/java/org/fusesource/jansi/AnsiMode.java
// public enum AnsiMode {
// 
//     Strip("Strip all ansi sequences"),
//     Default("Print ansi sequences if the stream is a terminal"),
//     Force("Always print ansi sequences, even if the stream is redirected");
// 
//     private final String description;
// 
//     AnsiMode(String description) {
//         this.description = description;
//     }
// 
//     String getDescription() {
//         return description;
//     }
// }
// 
// Path: src/main/java/org/fusesource/jansi/AnsiType.java
// public enum AnsiType {
// 
//     Native("Supports ansi sequences natively"),
//     Unsupported("Ansi sequences are stripped out"),
//     VirtualTerminal("Supported through windows virtual terminal"),
//     Emulation("Emulated through using windows API console commands"),
//     Redirected("The stream is redirected to a file or a pipe");
// 
//     private final String description;
// 
//     AnsiType(String description) {
//         this.description = description;
//     }
// 
//     String getDescription() {
//         return description;
//     }
// }


// Path: src/main/java/org/fusesource/jansi/io/AnsiOutputStream.java
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import org.fusesource.jansi.AnsiColors;
import org.fusesource.jansi.AnsiMode;
import org.fusesource.jansi.AnsiType;

    private static final int LOOKING_FOR_SECOND_ESC_CHAR = 1;
    private static final int LOOKING_FOR_NEXT_ARG = 2;
    private static final int LOOKING_FOR_STR_ARG_END = 3;
    private static final int LOOKING_FOR_INT_ARG_END = 4;
    private static final int LOOKING_FOR_OSC_COMMAND = 5;
    private static final int LOOKING_FOR_OSC_COMMAND_END = 6;
    private static final int LOOKING_FOR_OSC_PARAM = 7;
    private static final int LOOKING_FOR_ST = 8;
    private static final int LOOKING_FOR_CHARSET = 9;

    private static final int FIRST_ESC_CHAR = 27;
    private static final int SECOND_ESC_CHAR = '[';
    private static final int SECOND_OSC_CHAR = ']';
    private static final int BEL = 7;
    private static final int SECOND_ST_CHAR = '\\';
    private static final int SECOND_CHARSET0_CHAR = '(';
    private static final int SECOND_CHARSET1_CHAR = ')';

    private AnsiProcessor ap;
    private final static int MAX_ESCAPE_SEQUENCE_LENGTH = 100;
    private final byte[] buffer = new byte[MAX_ESCAPE_SEQUENCE_LENGTH];
    private int pos = 0;
    private int startOfValue;
    private final ArrayList<Object> options = new ArrayList<Object>();
    private int state = LOOKING_FOR_FIRST_ESC_CHAR;
    private final Charset cs;

    private final WidthSupplier width;
    private final AnsiProcessor processor;
    private final AnsiType type;
    private final AnsiColors colors;