@@ -0,0 +1,1146 @@
+package com.github.kmizu.jcombinator;%0A%0Apublic class ParserInput %7B%0A    private final String input;%0A    private final int cursor;%0A%0A    public ParserInput(String input, int cursor) %7B%0A        this.input = input;%0A        this.cursor = cursor;%0A    %7D%0A    public ParserInput(String input) %7B%0A        this(input, 0);%0A    %7D%0A    public String input() %7B%0A        return input;%0A    %7D%0A    public int cursor() %7B%0A        return cursor;%0A    %7D%0A    public ParserInput withCursor(int newCursor) %7B%0A        return new ParserInput(input, newCursor);%0A    %7D%0A    public ParserInput withInput(String newInput) %7B%0A        return new ParserInput(newInput, cursor);%0A    %7D%0A%0A    @Override%0A    public boolean equals(Object o) %7B%0A        if (this == o) return true;%0A        if (o == null %7C%7C getClass() != o.getClass()) return false;%0A%0A        ParserInput that = (ParserInput) o;%0A%0A        if (cursor != that.cursor) return false;%0A        return input != null ? input.equals(that.input) : that.input == null;%0A    %7D%0A%0A    @Override%0A    public int hashCode() %7B%0A        int result = input != null ? input.hashCode() : 0;%0A        result = 31 * result + cursor;%0A        return result;%0A    %7D%0A%7D%0A

Define ParserInput class