class TagRange extends Range {
    protected final String tag;

    public static TagRange of(CharSequence tag, int start, int end) {
        return new TagRange(tag, start, end);
    }

    public TagRange(CharSequence tag, Range range) {
        super(range);
        this.tag = String.valueOf(tag);
    }

    public TagRange(CharSequence tag, int start, int end) {
        super(start, end);
        this.tag = String.valueOf(tag);
    }

    public String getTag() {
        return tag;
    }

    public TagRange withTag(CharSequence tag) {
        return this.tag.equals(String.valueOf(tag)) ? this : new TagRange(tag, getStart(), getEnd());
    }

    @Override
    public TagRange withStart(int start) {<FILL_FUNCTION_BODY>}

    @Override
    public TagRange withEnd(int end) {
        return end == getEnd() ? this : new TagRange(getTag(), getStart(), end);
    }

    @Override
    public TagRange withRange(int start, int end) {
        return start == getStart() && end == getEnd() ? this : new TagRange(getTag(), start, end);
    }
}

        return start == getStart() ? this : new TagRange(getTag(), start, getEnd());
    
<methods>public @NotNull BasedSequence basedSafeSubSequence(@NotNull CharSequence) ,public @NotNull BasedSequence basedSubSequence(@NotNull CharSequence) ,public @NotNull CharSequence charSubSequence(@NotNull CharSequence) ,public int compare(@NotNull Range) ,public int component1() ,public int component2() ,public boolean contains(@NotNull Range) ,public boolean contains(int) ,public boolean contains(int, int) ,public boolean doesContain(@NotNull Range) ,public boolean doesContain(int) ,public boolean doesContain(int, int) ,public boolean doesNotOverlap(@NotNull Range) ,public boolean doesNotOverlapNorAdjacent(@NotNull Range) ,public boolean doesNotOverlapOrAdjacent(@NotNull Range) ,public boolean doesOverlap(@NotNull Range) ,public boolean doesOverlapOrAdjacent(@NotNull Range) ,public boolean doesProperlyContain(@NotNull Range) ,public static @NotNull Range emptyOf(int) ,public com.vladsch.flexmark.util.sequence.Range endMinus(int) ,public com.vladsch.flexmark.util.sequence.Range endPlus(int) ,public boolean equals(java.lang.Object) ,public @NotNull Range exclude(@NotNull Range) ,public @NotNull Range expandToInclude(@NotNull Range) ,public @NotNull Range expandToInclude(int, int) ,public int getEnd() ,public int getEndOffset() ,public int getSpan() ,public int getStart() ,public int getStartOffset() ,public int hashCode() ,public @NotNull Range include(@NotNull Range) ,public @NotNull Range include(int) ,public @NotNull Range include(int, int) ,public @NotNull Range intersect(@NotNull Range) ,public boolean isAdjacent(int) ,public boolean isAdjacent(@NotNull Range) ,public boolean isAdjacentAfter(int) ,public boolean isAdjacentAfter(@NotNull Range) ,public boolean isAdjacentBefore(int) ,public boolean isAdjacentBefore(@NotNull Range) ,public boolean isContainedBy(@NotNull Range) ,public boolean isContainedBy(int, int) ,public boolean isEmpty() ,public boolean isEnd(int) ,public boolean isEqual(@NotNull Range) ,public boolean isLast(int) ,public boolean isNotEmpty() ,public boolean isNotNull() ,public boolean isNull() ,public boolean isProperlyContainedBy(@NotNull Range) ,public boolean isProperlyContainedBy(int, int) ,public boolean isStart(int) ,public boolean isValidIndex(int) ,public boolean leadBy(int) ,public boolean leads(int) ,public static @NotNull Range of(int, int) ,public static @NotNull Range ofLength(int, int) ,public boolean overlaps(@NotNull Range) ,public boolean overlapsOrAdjacent(@NotNull Range) ,public boolean properlyContains(@NotNull Range) ,public @NotNull RichSequence richSafeSubSequence(@NotNull CharSequence) ,public @NotNull RichSequence richSubSequence(@NotNull CharSequence) ,public @NotNull CharSequence safeSubSequence(@NotNull CharSequence) ,public com.vladsch.flexmark.util.sequence.Range shiftLeft(int) ,public com.vladsch.flexmark.util.sequence.Range shiftRight(int) ,public com.vladsch.flexmark.util.sequence.Range startMinus(int) ,public com.vladsch.flexmark.util.sequence.Range startPlus(int) ,public @NotNull BasedSequence subSequence(@NotNull CharSequence) ,public java.lang.String toString() ,public boolean trailedBy(int) ,public boolean trails(int) ,public com.vladsch.flexmark.util.sequence.Range withEnd(int) ,public com.vladsch.flexmark.util.sequence.Range withRange(int, int) ,public com.vladsch.flexmark.util.sequence.Range withStart(int) <variables>public static final com.vladsch.flexmark.util.sequence.Range EMPTY,public static final com.vladsch.flexmark.util.sequence.Range NULL,private final non-sealed int end,private final non-sealed int start