@SuppressWarnings("SpellCheckingInspection")
  @Override
  public long process(@NotNull SsiProcessingState ssiProcessingState, @NotNull String commandName, @NotNull List<String> paramNames, String @NotNull [] paramValues, @NotNull ByteBufUtf8Writer writer) {
    // Assume anything using conditionals was modified by it
    long lastModified = System.currentTimeMillis();
    // Retrieve the current state information
    SsiProcessingState.SsiConditionalState state = ssiProcessingState.conditionalState;
    if ("if".equalsIgnoreCase(commandName)) {
      // Do nothing if we are nested in a false branch
      // except count it
      if (state.processConditionalCommandsOnly) {
        state.nestingCount++;
        return lastModified;
      }
      state.nestingCount = 0;
      // Evaluate the expression
      if (evaluateArguments(paramNames, paramValues, ssiProcessingState)) {
        // No more branches can be taken for this if block
        state.branchTaken = true;
      }
      else {
        // Do not process this branch
        state.processConditionalCommandsOnly = true;
        state.branchTaken = false;
      }
    }
    else if ("elif".equalsIgnoreCase(commandName)) {
      // No need to even execute if we are nested in
      // a false branch
      if (state.nestingCount > 0) return lastModified;
      // If a branch was already taken in this if block
      // then disable output and return
      if (state.branchTaken) {
        state.processConditionalCommandsOnly = true;
        return lastModified;
      }
      // Evaluate the expression
      if (evaluateArguments(paramNames, paramValues, ssiProcessingState)) {
        // Turn back on output and mark the branch
        state.processConditionalCommandsOnly = false;
        state.branchTaken = true;
      }
      else {
        // Do not process this branch
        state.processConditionalCommandsOnly = true;
        state.branchTaken = false;
      }
    }
    else if ("else".equalsIgnoreCase(commandName)) {
      // No need to even execute if we are nested in
      // a false branch
      if (state.nestingCount > 0) return lastModified;
      // If we've already taken another branch then
      // disable output otherwise enable it.
      state.processConditionalCommandsOnly = state.branchTaken;
      // And in any case, it's safe to say a branch
      // has been taken.
      state.branchTaken = true;
    }
    else if ("endif".equalsIgnoreCase(commandName)) {
      // If we are nested inside a false branch then pop out
      // one level on the nesting count
      if (state.nestingCount > 0) {
        state.nestingCount--;
        return lastModified;
      }
      // Turn output back on
      state.processConditionalCommandsOnly = false;
      // Reset the branch status for any outer if blocks,
      // since clearly we took a branch to have gotten here
      // in the first place.
      state.branchTaken = true;
    }
    else {
      throw new SsiStopProcessingException();
    }
    return lastModified;
  }
@SuppressWarnings("SpellCheckingInspection")
  @Override
  public long process(@NotNull SsiProcessingState ssiProcessingState, @NotNull String commandName, @NotNull List<String> paramNames, String @NotNull [] paramValues, @NotNull ByteBufUtf8Writer writer)