diff --git a/ast/src/from_node.c b/ast/src/from_node.c index 5a3f7f92..e2c37b31 100644 --- a/ast/src/from_node.c +++ b/ast/src/from_node.c @@ -6,7 +6,7 @@ /* By: maiboyer +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/06/17 12:41:56 by maiboyer #+# #+# */ -/* Updated: 2024/06/30 00:52:11 by maiboyer ### ########.fr */ +/* Updated: 2024/06/30 16:50:25 by maiboyer ### ########.fr */ /* */ /* ************************************************************************** */ @@ -467,6 +467,9 @@ t_error ast_from_node(t_parse_node node, t_const_str input, t_ast_node *out); /* FUNCTION THAT ARE DONE */ t_error build_sym__bare_dollar(t_parse_node self, t_const_str input, t_ast_node *out); +t_error build_sym_case_item(t_parse_node self, t_const_str input, t_ast_node *out); +t_error build_sym__case_item_last(t_parse_node self, t_const_str input, t_ast_node *out); +t_error build_sym_case_statement(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_command(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_command_name(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_comment(t_parse_node self, t_const_str input, t_ast_node *out); @@ -474,6 +477,7 @@ t_error build_sym_compound_statement(t_parse_node self, t_const_str input, t_ast t_error build_sym_elif_clause(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_else_clause(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_for_statement(t_parse_node self, t_const_str input, t_ast_node *out); +t_error build_sym_function_definition(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_if_statement(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_list(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_negated_command(t_parse_node self, t_const_str input, t_ast_node *out); @@ -496,11 +500,6 @@ t_error build_sym_arithmetic_postfix_expression(t_parse_node self, t_const_str i t_error build_sym_arithmetic_ternary_expression(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_arithmetic_unary_expression(t_parse_node self, t_const_str input, t_ast_node *out); -t_error build_sym_case_statement(t_parse_node self, t_const_str input, t_ast_node *out); -t_error build_sym_case_item(t_parse_node self, t_const_str input, t_ast_node *out); - -t_error build_sym_function_definition(t_parse_node self, t_const_str input, t_ast_node *out); - t_error build_sym_arithmetic_expansion(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_command_substitution(t_parse_node self, t_const_str input, t_ast_node *out); t_error build_sym_expansion(t_parse_node self, t_const_str input, t_ast_node *out); @@ -524,6 +523,151 @@ t_error build_sym_heredoc_start(t_parse_node self, t_const_str input, t_ast_node #include +t_error build_sym_function_definition(t_parse_node self, t_const_str input, t_ast_node *out) +{ + t_ast_node ret; + t_ast_node tmp; + t_usize i; + + (void)(out); + (void)(input); + (void)(self); + if (out == NULL) + return (ERROR); + if (ts_node_grammar_symbol(self) != sym_function_definition) + return (ERROR); + ret = ast_alloc(AST_FUNCTION_DEFINITION); + i = 0; + while (i < ts_node_child_count(self)) + { + if (!ts_node_is_named(ts_node_child(self, i)) && (i++, true)) + continue; + if (ts_node_field_id_for_child(self, i) == field_name) + { + ret->data.function_definition.name = + str_substring(input, ts_node_start_byte(ts_node_child(self, i)), + ts_node_end_byte(ts_node_child(self, i)) - ts_node_start_byte(ts_node_child(self, i))); + } + if (ts_node_field_id_for_child(self, i) == field_body) + { + if (ast_from_node(ts_node_child(self, i), input, &tmp)) + return (ast_free(ret), ERROR); + vec_ast_push(&ret->data.function_definition.body, tmp); + } + i++; + } + + return (*out = ret, NO_ERROR); +} + +t_error build_sym_case_statement(t_parse_node self, t_const_str input, t_ast_node *out) +{ + t_ast_node ret; + t_ast_node tmp; + t_usize i; + + (void)(out); + (void)(input); + (void)(self); + if (out == NULL) + return (ERROR); + if (ts_node_grammar_symbol(self) != sym_case_statement) + return (ERROR); + ret = ast_alloc(AST_CASE); + i = 0; + while (i < ts_node_child_count(self)) + { + if (!ts_node_is_named(ts_node_child(self, i)) && (i++, true)) + continue; + if (ts_node_field_id_for_child(self, i) == field_value) + { + if (ast_from_node(ts_node_child(self, i), input, &ret->data.case_.word)) + return (ast_free(ret), ERROR); + } + if (ts_node_field_id_for_child(self, i) == field_cases) + { + if (ast_from_node(ts_node_child(self, i), input, &tmp)) + return (ast_free(ret), ERROR); + vec_ast_push(&ret->data.case_.cases, tmp); + } + i++; + } + + return (*out = ret, NO_ERROR); +} + +t_error build_sym__case_item_last(t_parse_node self, t_const_str input, t_ast_node *out) +{ + t_ast_node ret; + t_ast_node tmp; + t_usize i; + + (void)(out); + (void)(input); + (void)(self); + if (out == NULL) + return (ERROR); + if (ts_node_grammar_symbol(self) != sym__case_item_last) + return (ERROR); + ret = ast_alloc(AST_CASE_ITEM); + i = 0; + while (i < ts_node_child_count(self)) + { + if (!ts_node_is_named(ts_node_child(self, i)) && (i++, true)) + continue; + if (ts_node_field_id_for_child(self, i) == field_value) + { + if (ast_from_node(ts_node_child(self, i), input, &tmp)) + return (ast_free(ret), ERROR); + vec_ast_push(&ret->data.case_item.pattern, tmp); + } + if (ts_node_field_id_for_child(self, i) == field_body) + { + if (ast_from_node(ts_node_child(self, i), input, &tmp)) + return (ast_free(ret), ERROR); + vec_ast_push(&ret->data.case_item.body, tmp); + } + i++; + } + return (*out = ret, NO_ERROR); +} + +t_error build_sym_case_item(t_parse_node self, t_const_str input, t_ast_node *out) +{ + t_ast_node ret; + t_ast_node tmp; + t_usize i; + + (void)(out); + (void)(input); + (void)(self); + if (out == NULL) + return (ERROR); + if (ts_node_grammar_symbol(self) != sym_case_item) + return (ERROR); + ret = ast_alloc(AST_CASE_ITEM); + i = 0; + while (i < ts_node_child_count(self)) + { + if (!ts_node_is_named(ts_node_child(self, i)) && (i++, true)) + continue; + if (ts_node_field_id_for_child(self, i) == field_value) + { + if (ast_from_node(ts_node_child(self, i), input, &tmp)) + return (ast_free(ret), ERROR); + vec_ast_push(&ret->data.case_item.pattern, tmp); + } + if (ts_node_field_id_for_child(self, i) == field_body) + { + if (ast_from_node(ts_node_child(self, i), input, &tmp)) + return (ast_free(ret), ERROR); + vec_ast_push(&ret->data.case_item.body, tmp); + } + i++; + } + return (*out = ret, NO_ERROR); +} + t_error build_sym_if_statement(t_parse_node self, t_const_str input, t_ast_node *out) { t_ast_node ret; @@ -645,7 +789,6 @@ t_error build_sym_for_statement(t_parse_node self, t_const_str input, t_ast_node { t_ast_node ret; t_ast_node tmp; - t_const_str tmp_str; t_parse_node temp_ast; t_usize i; @@ -1317,6 +1460,8 @@ t_error ast_from_node(t_parse_node node, t_const_str input, t_ast_node *out) return (build_sym_arithmetic_unary_expression(node, input, out)); if (ts_node_grammar_symbol(node) == sym_case_item) return (build_sym_case_item(node, input, out)); + if (ts_node_grammar_symbol(node) == sym__case_item_last) + return (build_sym__case_item_last(node, input, out)); if (ts_node_grammar_symbol(node) == sym_case_statement) return (build_sym_case_statement(node, input, out)); if (ts_node_grammar_symbol(node) == sym_command) diff --git a/dumper.c b/dumper.c new file mode 100644 index 00000000..db92997f --- /dev/null +++ b/dumper.c @@ -0,0 +1,105 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* dumper.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: maiboyer +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/04/25 22:19:52 by maiboyer #+# #+# */ +/* Updated: 2024/06/30 17:09:31 by maiboyer ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "gmr/constants.h" + +#include +#include +#include +#include + +#include "types/type_alias_sequences.h" +#include "types/type_external_scanner_states.h" +#include "types/type_external_scanner_symbol_map.h" +#include "types/type_field_map_entries.h" +#include "types/type_field_map_slices.h" +#include "types/type_field_names.h" +#include "types/type_lex_modes.h" +#include "types/type_lex_normal.h" +#include "types/type_non_terminal_alias_map.h" +#include "types/type_parse_actions_entries.h" +#include "types/type_parse_table.h" +#include "types/type_primary_state_ids.h" +#include "types/type_small_parse_table.h" +#include "types/type_small_parse_table_map.h" +#include "types/type_symbols_metadata.h" +#include "types/type_symbols_names.h" +#include "types/type_unique_symbols_map.h" + +t_parse_table_array *create_parse_table(void); +t_small_parse_table_array *create_small_parse_table(void); +t_small_parse_table_map_array *create_small_parse_table_map(void); +t_parse_actions_entries_array *create_parse_actions_entries(void); +t_symbols_names_array *create_symbols_names(void); +t_field_names_array *create_field_names(void); +t_field_map_slices_array *create_field_map_slices(void); +t_field_map_entries_array *create_field_map_entries(void); +t_symbols_metadata_array *create_symbols_metadata(void); +t_unique_symbols_map_array *create_unique_symbols_map(void); +t_non_terminal_alias_map_array *create_non_terminal_alias_map(void); +t_alias_sequences_array *create_alias_sequences(void); +t_lex_modes_array *create_lex_modes(void); +t_primary_state_ids_array *create_primary_state_ids(void); +t_external_scanner_states_array *create_external_scanner_states(void); +t_external_scanner_symbol_map_array *create_external_scanner_symbol_map(void); + +void dump_to_file(const char *filename, void *data, size_t size) +{ + int file = open(filename, O_CREAT | O_RDWR | O_TRUNC, 0666); + + if (file < 0) + return ((void)printf("[error] opening %s failed \n", filename)); + if (write(file, data, size) < size) + printf("[error] writing to %s failed \n", filename); + else + printf("wrote %zu to %s!\n", size, filename); + close(file); +} + +int main(void) +{ + dump_to_file("./parse_table", (void *)create_parse_table(), + sizeof(*create_parse_table())); + dump_to_file("./small_parse_table", (void *)create_small_parse_table(), + sizeof(*create_small_parse_table())); + dump_to_file("./small_parse_table_map", + (void *)create_small_parse_table_map(), + sizeof(*create_small_parse_table_map())); + dump_to_file("./parse_actions_entries", + (void *)create_parse_actions_entries(), + sizeof(*create_parse_actions_entries())); + // dump_to_file("./symbols_names", (void *)create_symbols_names(), 0); + // dump_to_file("./field_names", (void *)create_field_names(), 0); + dump_to_file("./field_map_slices", (void *)create_field_map_slices(), + sizeof(*create_field_map_slices())); + dump_to_file("./field_map_entries", (void *)create_field_map_entries(), + sizeof(*create_field_map_entries())); + dump_to_file("./symbols_metadata", (void *)create_symbols_metadata(), + sizeof(*create_symbols_metadata())); + dump_to_file("./unique_symbols_map", (void *)create_unique_symbols_map(), + sizeof(*create_unique_symbols_map())); + dump_to_file("./non_terminal_alias_map", + (void *)create_non_terminal_alias_map(), + sizeof(*create_non_terminal_alias_map())); + dump_to_file("./alias_sequences", (void *)create_alias_sequences(), + sizeof(*create_alias_sequences())); + dump_to_file("./lex_modes", (void *)create_lex_modes(), + sizeof(*create_lex_modes())); + dump_to_file("./primary_state_ids", (void *)create_primary_state_ids(), + sizeof(*create_primary_state_ids())); + dump_to_file("./external_scanner_states", + (void *)create_external_scanner_states(), + sizeof(*create_external_scanner_states())); + dump_to_file("./external_scanner_symbol_map", + (void *)create_external_scanner_symbol_map(), + sizeof(*create_external_scanner_symbol_map())); +} diff --git a/my_dumper b/my_dumper new file mode 100755 index 00000000..3cc74428 Binary files /dev/null and b/my_dumper differ diff --git a/parser.c b/parser.c new file mode 100644 index 00000000..331d5a58 --- /dev/null +++ b/parser.c @@ -0,0 +1,94726 @@ +#include "tree_sitter/parser.h" + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic ignored "-Wmissing-field-initializers" +#endif + +#ifdef _MSC_VER +#pragma optimize("", off) +#elif defined(__clang__) +#pragma clang optimize off +#elif defined(__GNUC__) +#pragma GCC optimize ("O0") +#endif + +#define LANGUAGE_VERSION 14 +#define STATE_COUNT 2340 +#define LARGE_STATE_COUNT 2 +#define SYMBOL_COUNT 183 +#define ALIAS_COUNT 1 +#define TOKEN_COUNT 115 +#define EXTERNAL_TOKEN_COUNT 20 +#define FIELD_COUNT 20 +#define MAX_ALIAS_SEQUENCE_LENGTH 8 +#define PRODUCTION_ID_COUNT 78 + +enum ts_symbol_identifiers { + sym_word = 1, + anon_sym_for = 2, + anon_sym_in = 3, + anon_sym_while = 4, + anon_sym_until = 5, + anon_sym_do = 6, + anon_sym_done = 7, + anon_sym_if = 8, + anon_sym_then = 9, + anon_sym_fi = 10, + anon_sym_elif = 11, + anon_sym_else = 12, + anon_sym_case = 13, + anon_sym_esac = 14, + anon_sym_LPAREN = 15, + anon_sym_PIPE = 16, + anon_sym_RPAREN = 17, + anon_sym_LF = 18, + anon_sym_SEMI_SEMI = 19, + anon_sym_LBRACE = 20, + anon_sym_RBRACE = 21, + anon_sym_AMP_AMP = 22, + anon_sym_PIPE_PIPE = 23, + anon_sym_BANG = 24, + anon_sym_EQ = 25, + anon_sym_LT = 26, + anon_sym_GT = 27, + anon_sym_GT_GT = 28, + anon_sym_AMP_GT = 29, + anon_sym_AMP_GT_GT = 30, + anon_sym_LT_AMP = 31, + anon_sym_GT_AMP = 32, + anon_sym_GT_PIPE = 33, + anon_sym_LT_AMP_DASH = 34, + anon_sym_GT_AMP_DASH = 35, + anon_sym_LT_LT = 36, + anon_sym_LT_LT_DASH = 37, + aux_sym_heredoc_redirect_token1 = 38, + anon_sym_PIPE_AMP = 39, + anon_sym_DOLLAR_LPAREN_LPAREN = 40, + anon_sym_RPAREN_RPAREN = 41, + anon_sym_PLUS_EQ = 42, + anon_sym_DASH_EQ = 43, + anon_sym_STAR_EQ = 44, + anon_sym_SLASH_EQ = 45, + anon_sym_PERCENT_EQ = 46, + anon_sym_LT_LT_EQ = 47, + anon_sym_GT_GT_EQ = 48, + anon_sym_AMP_EQ = 49, + anon_sym_CARET_EQ = 50, + anon_sym_PIPE_EQ = 51, + anon_sym_CARET = 52, + anon_sym_AMP = 53, + anon_sym_EQ_EQ = 54, + anon_sym_BANG_EQ = 55, + anon_sym_LT_EQ = 56, + anon_sym_GT_EQ = 57, + anon_sym_PLUS = 58, + anon_sym_DASH = 59, + anon_sym_STAR = 60, + anon_sym_SLASH = 61, + anon_sym_PERCENT = 62, + anon_sym_QMARK = 63, + anon_sym_COLON = 64, + anon_sym_PLUS_PLUS = 65, + anon_sym_DASH_DASH = 66, + anon_sym_DASH2 = 67, + anon_sym_PLUS2 = 68, + anon_sym_TILDE = 69, + anon_sym_PLUS_PLUS2 = 70, + anon_sym_DASH_DASH2 = 71, + aux_sym_concatenation_token1 = 72, + anon_sym_DOLLAR = 73, + anon_sym_DQUOTE = 74, + sym_string_content = 75, + sym_raw_string = 76, + sym_number = 77, + anon_sym_POUND = 78, + anon_sym_DOLLAR_LBRACE = 79, + anon_sym_COLON_DASH = 80, + anon_sym_DASH3 = 81, + anon_sym_COLON_EQ = 82, + anon_sym_EQ2 = 83, + anon_sym_COLON_QMARK = 84, + anon_sym_QMARK2 = 85, + anon_sym_COLON_PLUS = 86, + anon_sym_PLUS3 = 87, + anon_sym_PERCENT_PERCENT = 88, + aux_sym_expansion_regex_token1 = 89, + anon_sym_DOLLAR_LPAREN = 90, + anon_sym_BQUOTE = 91, + sym_comment = 92, + sym__comment_word = 93, + aux_sym__simple_variable_name_token1 = 94, + aux_sym__multiline_variable_name_token1 = 95, + anon_sym_AT = 96, + anon_sym_0 = 97, + anon_sym__ = 98, + anon_sym_SEMI = 99, + sym_heredoc_start = 100, + sym_simple_heredoc_body = 101, + sym__heredoc_body_beginning = 102, + sym_heredoc_content = 103, + sym_heredoc_end = 104, + sym_file_descriptor = 105, + sym__empty_value = 106, + sym__concat = 107, + sym_variable_name = 108, + sym_regex = 109, + sym__expansion_word = 110, + sym_extglob_pattern = 111, + sym__bare_dollar = 112, + sym__immediate_double_hash = 113, + sym___error_recovery = 114, + sym_program = 115, + sym__statements = 116, + aux_sym__terminated_statement = 117, + sym__statement_not_pipeline = 118, + sym_redirected_statement = 119, + sym_for_statement = 120, + sym_while_statement = 121, + sym_do_group = 122, + sym_if_statement = 123, + sym_elif_clause = 124, + sym_else_clause = 125, + sym_case_statement = 126, + sym__case_item_last = 127, + sym_case_item = 128, + sym_function_definition = 129, + sym_compound_statement = 130, + sym_subshell = 131, + sym_pipeline = 132, + sym_list = 133, + sym_negated_command = 134, + sym_command = 135, + sym_command_name = 136, + sym_variable_assignment = 137, + sym__variable_assignments = 138, + sym_file_redirect = 139, + sym_heredoc_redirect = 140, + sym__heredoc_pipeline = 141, + sym__heredoc_expression = 142, + aux_sym__heredoc_command = 143, + sym__heredoc_body = 144, + sym_heredoc_body = 145, + sym__simple_heredoc_body = 146, + sym_arithmetic_expansion = 147, + sym__arithmetic_expression = 148, + sym_arithmetic_literal = 149, + sym_arithmetic_binary_expression = 150, + sym_arithmetic_ternary_expression = 151, + sym_arithmetic_unary_expression = 152, + sym_arithmetic_postfix_expression = 153, + sym_arithmetic_parenthesized_expression = 154, + sym_concatenation = 155, + sym_string = 156, + sym_simple_expansion = 157, + sym_expansion = 158, + sym__expansion_body = 159, + sym_expansion_expression = 160, + sym_expansion_regex = 161, + sym__concatenation_in_expansion = 162, + sym_command_substitution = 163, + sym__extglob_blob = 164, + sym_terminator = 165, + aux_sym__statements_repeat1 = 166, + aux_sym_redirected_statement_repeat1 = 167, + aux_sym_redirected_statement_repeat2 = 168, + aux_sym_for_statement_repeat1 = 169, + aux_sym_if_statement_repeat1 = 170, + aux_sym_case_statement_repeat1 = 171, + aux_sym__case_item_last_repeat1 = 172, + aux_sym__case_item_last_repeat2 = 173, + aux_sym_pipeline_repeat1 = 174, + aux_sym_command_repeat1 = 175, + aux_sym_command_repeat2 = 176, + aux_sym__variable_assignments_repeat1 = 177, + aux_sym_heredoc_body_repeat1 = 178, + aux_sym_concatenation_repeat1 = 179, + aux_sym_string_repeat1 = 180, + aux_sym_expansion_regex_repeat1 = 181, + aux_sym__concatenation_in_expansion_repeat1 = 182, + alias_sym_statements = 183, +}; + +static const char * const ts_symbol_names[] = { + [ts_builtin_sym_end] = "end", + [sym_word] = "word", + [anon_sym_for] = "for", + [anon_sym_in] = "in", + [anon_sym_while] = "while", + [anon_sym_until] = "until", + [anon_sym_do] = "do", + [anon_sym_done] = "done", + [anon_sym_if] = "if", + [anon_sym_then] = "then", + [anon_sym_fi] = "fi", + [anon_sym_elif] = "elif", + [anon_sym_else] = "else", + [anon_sym_case] = "case", + [anon_sym_esac] = "esac", + [anon_sym_LPAREN] = "(", + [anon_sym_PIPE] = "|", + [anon_sym_RPAREN] = ")", + [anon_sym_LF] = "\n", + [anon_sym_SEMI_SEMI] = ";;", + [anon_sym_LBRACE] = "{", + [anon_sym_RBRACE] = "}", + [anon_sym_AMP_AMP] = "operator", + [anon_sym_PIPE_PIPE] = "operator", + [anon_sym_BANG] = "!", + [anon_sym_EQ] = "=", + [anon_sym_LT] = "operator", + [anon_sym_GT] = "operator", + [anon_sym_GT_GT] = "operator", + [anon_sym_AMP_GT] = "operator", + [anon_sym_AMP_GT_GT] = "operator", + [anon_sym_LT_AMP] = "operator", + [anon_sym_GT_AMP] = "operator", + [anon_sym_GT_PIPE] = "operator", + [anon_sym_LT_AMP_DASH] = "operator", + [anon_sym_GT_AMP_DASH] = "operator", + [anon_sym_LT_LT] = "operator", + [anon_sym_LT_LT_DASH] = "operator", + [aux_sym_heredoc_redirect_token1] = "heredoc_redirect_token1", + [anon_sym_PIPE_AMP] = "|&", + [anon_sym_DOLLAR_LPAREN_LPAREN] = "$((", + [anon_sym_RPAREN_RPAREN] = "))", + [anon_sym_PLUS_EQ] = "operator", + [anon_sym_DASH_EQ] = "operator", + [anon_sym_STAR_EQ] = "operator", + [anon_sym_SLASH_EQ] = "operator", + [anon_sym_PERCENT_EQ] = "operator", + [anon_sym_LT_LT_EQ] = "operator", + [anon_sym_GT_GT_EQ] = "operator", + [anon_sym_AMP_EQ] = "operator", + [anon_sym_CARET_EQ] = "operator", + [anon_sym_PIPE_EQ] = "operator", + [anon_sym_CARET] = "operator", + [anon_sym_AMP] = "&", + [anon_sym_EQ_EQ] = "operator", + [anon_sym_BANG_EQ] = "operator", + [anon_sym_LT_EQ] = "operator", + [anon_sym_GT_EQ] = "operator", + [anon_sym_PLUS] = "operator", + [anon_sym_DASH] = "operator", + [anon_sym_STAR] = "operator", + [anon_sym_SLASH] = "operator", + [anon_sym_PERCENT] = "operator", + [anon_sym_QMARK] = "\?", + [anon_sym_COLON] = ":", + [anon_sym_PLUS_PLUS] = "operator", + [anon_sym_DASH_DASH] = "operator", + [anon_sym_DASH2] = "operator", + [anon_sym_PLUS2] = "operator", + [anon_sym_TILDE] = "operator", + [anon_sym_PLUS_PLUS2] = "operator", + [anon_sym_DASH_DASH2] = "operator", + [aux_sym_concatenation_token1] = "``", + [anon_sym_DOLLAR] = "$", + [anon_sym_DQUOTE] = "\"", + [sym_string_content] = "string_content", + [sym_raw_string] = "raw_string", + [sym_number] = "number", + [anon_sym_POUND] = "special_variable_name", + [anon_sym_DOLLAR_LBRACE] = "${", + [anon_sym_COLON_DASH] = "operator", + [anon_sym_DASH3] = "operator", + [anon_sym_COLON_EQ] = "operator", + [anon_sym_EQ2] = "operator", + [anon_sym_COLON_QMARK] = "operator", + [anon_sym_QMARK2] = "operator", + [anon_sym_COLON_PLUS] = "operator", + [anon_sym_PLUS3] = "operator", + [anon_sym_PERCENT_PERCENT] = "operator", + [aux_sym_expansion_regex_token1] = "regex", + [anon_sym_DOLLAR_LPAREN] = "$(", + [anon_sym_BQUOTE] = "`", + [sym_comment] = "comment", + [sym__comment_word] = "word", + [aux_sym__simple_variable_name_token1] = "variable_name", + [aux_sym__multiline_variable_name_token1] = "variable_name", + [anon_sym_AT] = "special_variable_name", + [anon_sym_0] = "special_variable_name", + [anon_sym__] = "special_variable_name", + [anon_sym_SEMI] = ";", + [sym_heredoc_start] = "heredoc_start", + [sym_simple_heredoc_body] = "heredoc_body", + [sym__heredoc_body_beginning] = "_heredoc_body_beginning", + [sym_heredoc_content] = "heredoc_content", + [sym_heredoc_end] = "heredoc_end", + [sym_file_descriptor] = "file_descriptor", + [sym__empty_value] = "_empty_value", + [sym__concat] = "_concat", + [sym_variable_name] = "variable_name", + [sym_regex] = "regex", + [sym__expansion_word] = "word", + [sym_extglob_pattern] = "extglob_pattern", + [sym__bare_dollar] = "word", + [sym__immediate_double_hash] = "operator", + [sym___error_recovery] = "__error_recovery", + [sym_program] = "program", + [sym__statements] = "_statements", + [aux_sym__terminated_statement] = "_terminated_statement", + [sym__statement_not_pipeline] = "_statement_not_pipeline", + [sym_redirected_statement] = "redirected_statement", + [sym_for_statement] = "for_statement", + [sym_while_statement] = "while_statement", + [sym_do_group] = "do_group", + [sym_if_statement] = "if_statement", + [sym_elif_clause] = "elif_clause", + [sym_else_clause] = "else_clause", + [sym_case_statement] = "case_statement", + [sym__case_item_last] = "case_item", + [sym_case_item] = "case_item", + [sym_function_definition] = "function_definition", + [sym_compound_statement] = "compound_statement", + [sym_subshell] = "subshell", + [sym_pipeline] = "pipeline", + [sym_list] = "list", + [sym_negated_command] = "negated_command", + [sym_command] = "command", + [sym_command_name] = "command_name", + [sym_variable_assignment] = "variable_assignment", + [sym__variable_assignments] = "_variable_assignments", + [sym_file_redirect] = "file_redirect", + [sym_heredoc_redirect] = "heredoc_redirect", + [sym__heredoc_pipeline] = "pipeline", + [sym__heredoc_expression] = "_heredoc_expression", + [aux_sym__heredoc_command] = "_heredoc_command", + [sym__heredoc_body] = "_heredoc_body", + [sym_heredoc_body] = "heredoc_body", + [sym__simple_heredoc_body] = "_simple_heredoc_body", + [sym_arithmetic_expansion] = "arithmetic_expansion", + [sym__arithmetic_expression] = "_arithmetic_expression", + [sym_arithmetic_literal] = "arithmetic_literal", + [sym_arithmetic_binary_expression] = "arithmetic_binary_expression", + [sym_arithmetic_ternary_expression] = "arithmetic_ternary_expression", + [sym_arithmetic_unary_expression] = "arithmetic_unary_expression", + [sym_arithmetic_postfix_expression] = "arithmetic_postfix_expression", + [sym_arithmetic_parenthesized_expression] = "arithmetic_parenthesized_expression", + [sym_concatenation] = "concatenation", + [sym_string] = "string", + [sym_simple_expansion] = "simple_expansion", + [sym_expansion] = "expansion", + [sym__expansion_body] = "_expansion_body", + [sym_expansion_expression] = "expansion_expression", + [sym_expansion_regex] = "expansion_regex", + [sym__concatenation_in_expansion] = "concatenation", + [sym_command_substitution] = "command_substitution", + [sym__extglob_blob] = "_extglob_blob", + [sym_terminator] = "terminator", + [aux_sym__statements_repeat1] = "_statements_repeat1", + [aux_sym_redirected_statement_repeat1] = "redirected_statement_repeat1", + [aux_sym_redirected_statement_repeat2] = "redirected_statement_repeat2", + [aux_sym_for_statement_repeat1] = "for_statement_repeat1", + [aux_sym_if_statement_repeat1] = "if_statement_repeat1", + [aux_sym_case_statement_repeat1] = "case_statement_repeat1", + [aux_sym__case_item_last_repeat1] = "_case_item_last_repeat1", + [aux_sym__case_item_last_repeat2] = "_case_item_last_repeat2", + [aux_sym_pipeline_repeat1] = "pipeline_repeat1", + [aux_sym_command_repeat1] = "command_repeat1", + [aux_sym_command_repeat2] = "command_repeat2", + [aux_sym__variable_assignments_repeat1] = "_variable_assignments_repeat1", + [aux_sym_heredoc_body_repeat1] = "heredoc_body_repeat1", + [aux_sym_concatenation_repeat1] = "concatenation_repeat1", + [aux_sym_string_repeat1] = "string_repeat1", + [aux_sym_expansion_regex_repeat1] = "expansion_regex_repeat1", + [aux_sym__concatenation_in_expansion_repeat1] = "_concatenation_in_expansion_repeat1", + [alias_sym_statements] = "statements", +}; + +static const TSSymbol ts_symbol_map[] = { + [ts_builtin_sym_end] = ts_builtin_sym_end, + [sym_word] = sym_word, + [anon_sym_for] = anon_sym_for, + [anon_sym_in] = anon_sym_in, + [anon_sym_while] = anon_sym_while, + [anon_sym_until] = anon_sym_until, + [anon_sym_do] = anon_sym_do, + [anon_sym_done] = anon_sym_done, + [anon_sym_if] = anon_sym_if, + [anon_sym_then] = anon_sym_then, + [anon_sym_fi] = anon_sym_fi, + [anon_sym_elif] = anon_sym_elif, + [anon_sym_else] = anon_sym_else, + [anon_sym_case] = anon_sym_case, + [anon_sym_esac] = anon_sym_esac, + [anon_sym_LPAREN] = anon_sym_LPAREN, + [anon_sym_PIPE] = anon_sym_PIPE, + [anon_sym_RPAREN] = anon_sym_RPAREN, + [anon_sym_LF] = anon_sym_LF, + [anon_sym_SEMI_SEMI] = anon_sym_SEMI_SEMI, + [anon_sym_LBRACE] = anon_sym_LBRACE, + [anon_sym_RBRACE] = anon_sym_RBRACE, + [anon_sym_AMP_AMP] = sym__immediate_double_hash, + [anon_sym_PIPE_PIPE] = sym__immediate_double_hash, + [anon_sym_BANG] = anon_sym_BANG, + [anon_sym_EQ] = anon_sym_EQ, + [anon_sym_LT] = sym__immediate_double_hash, + [anon_sym_GT] = sym__immediate_double_hash, + [anon_sym_GT_GT] = sym__immediate_double_hash, + [anon_sym_AMP_GT] = sym__immediate_double_hash, + [anon_sym_AMP_GT_GT] = sym__immediate_double_hash, + [anon_sym_LT_AMP] = sym__immediate_double_hash, + [anon_sym_GT_AMP] = sym__immediate_double_hash, + [anon_sym_GT_PIPE] = sym__immediate_double_hash, + [anon_sym_LT_AMP_DASH] = sym__immediate_double_hash, + [anon_sym_GT_AMP_DASH] = sym__immediate_double_hash, + [anon_sym_LT_LT] = sym__immediate_double_hash, + [anon_sym_LT_LT_DASH] = sym__immediate_double_hash, + [aux_sym_heredoc_redirect_token1] = aux_sym_heredoc_redirect_token1, + [anon_sym_PIPE_AMP] = anon_sym_PIPE_AMP, + [anon_sym_DOLLAR_LPAREN_LPAREN] = anon_sym_DOLLAR_LPAREN_LPAREN, + [anon_sym_RPAREN_RPAREN] = anon_sym_RPAREN_RPAREN, + [anon_sym_PLUS_EQ] = sym__immediate_double_hash, + [anon_sym_DASH_EQ] = sym__immediate_double_hash, + [anon_sym_STAR_EQ] = sym__immediate_double_hash, + [anon_sym_SLASH_EQ] = sym__immediate_double_hash, + [anon_sym_PERCENT_EQ] = sym__immediate_double_hash, + [anon_sym_LT_LT_EQ] = sym__immediate_double_hash, + [anon_sym_GT_GT_EQ] = sym__immediate_double_hash, + [anon_sym_AMP_EQ] = sym__immediate_double_hash, + [anon_sym_CARET_EQ] = sym__immediate_double_hash, + [anon_sym_PIPE_EQ] = sym__immediate_double_hash, + [anon_sym_CARET] = sym__immediate_double_hash, + [anon_sym_AMP] = anon_sym_AMP, + [anon_sym_EQ_EQ] = sym__immediate_double_hash, + [anon_sym_BANG_EQ] = sym__immediate_double_hash, + [anon_sym_LT_EQ] = sym__immediate_double_hash, + [anon_sym_GT_EQ] = sym__immediate_double_hash, + [anon_sym_PLUS] = sym__immediate_double_hash, + [anon_sym_DASH] = sym__immediate_double_hash, + [anon_sym_STAR] = sym__immediate_double_hash, + [anon_sym_SLASH] = sym__immediate_double_hash, + [anon_sym_PERCENT] = sym__immediate_double_hash, + [anon_sym_QMARK] = anon_sym_QMARK, + [anon_sym_COLON] = anon_sym_COLON, + [anon_sym_PLUS_PLUS] = sym__immediate_double_hash, + [anon_sym_DASH_DASH] = sym__immediate_double_hash, + [anon_sym_DASH2] = sym__immediate_double_hash, + [anon_sym_PLUS2] = sym__immediate_double_hash, + [anon_sym_TILDE] = sym__immediate_double_hash, + [anon_sym_PLUS_PLUS2] = sym__immediate_double_hash, + [anon_sym_DASH_DASH2] = sym__immediate_double_hash, + [aux_sym_concatenation_token1] = aux_sym_concatenation_token1, + [anon_sym_DOLLAR] = anon_sym_DOLLAR, + [anon_sym_DQUOTE] = anon_sym_DQUOTE, + [sym_string_content] = sym_string_content, + [sym_raw_string] = sym_raw_string, + [sym_number] = sym_number, + [anon_sym_POUND] = anon_sym_POUND, + [anon_sym_DOLLAR_LBRACE] = anon_sym_DOLLAR_LBRACE, + [anon_sym_COLON_DASH] = sym__immediate_double_hash, + [anon_sym_DASH3] = sym__immediate_double_hash, + [anon_sym_COLON_EQ] = sym__immediate_double_hash, + [anon_sym_EQ2] = sym__immediate_double_hash, + [anon_sym_COLON_QMARK] = sym__immediate_double_hash, + [anon_sym_QMARK2] = sym__immediate_double_hash, + [anon_sym_COLON_PLUS] = sym__immediate_double_hash, + [anon_sym_PLUS3] = sym__immediate_double_hash, + [anon_sym_PERCENT_PERCENT] = sym__immediate_double_hash, + [aux_sym_expansion_regex_token1] = sym_regex, + [anon_sym_DOLLAR_LPAREN] = anon_sym_DOLLAR_LPAREN, + [anon_sym_BQUOTE] = anon_sym_BQUOTE, + [sym_comment] = sym_comment, + [sym__comment_word] = sym_word, + [aux_sym__simple_variable_name_token1] = sym_variable_name, + [aux_sym__multiline_variable_name_token1] = sym_variable_name, + [anon_sym_AT] = anon_sym_POUND, + [anon_sym_0] = anon_sym_POUND, + [anon_sym__] = anon_sym_POUND, + [anon_sym_SEMI] = anon_sym_SEMI, + [sym_heredoc_start] = sym_heredoc_start, + [sym_simple_heredoc_body] = sym_heredoc_body, + [sym__heredoc_body_beginning] = sym__heredoc_body_beginning, + [sym_heredoc_content] = sym_heredoc_content, + [sym_heredoc_end] = sym_heredoc_end, + [sym_file_descriptor] = sym_file_descriptor, + [sym__empty_value] = sym__empty_value, + [sym__concat] = sym__concat, + [sym_variable_name] = sym_variable_name, + [sym_regex] = sym_regex, + [sym__expansion_word] = sym_word, + [sym_extglob_pattern] = sym_extglob_pattern, + [sym__bare_dollar] = sym_word, + [sym__immediate_double_hash] = sym__immediate_double_hash, + [sym___error_recovery] = sym___error_recovery, + [sym_program] = sym_program, + [sym__statements] = sym__statements, + [aux_sym__terminated_statement] = aux_sym__terminated_statement, + [sym__statement_not_pipeline] = sym__statement_not_pipeline, + [sym_redirected_statement] = sym_redirected_statement, + [sym_for_statement] = sym_for_statement, + [sym_while_statement] = sym_while_statement, + [sym_do_group] = sym_do_group, + [sym_if_statement] = sym_if_statement, + [sym_elif_clause] = sym_elif_clause, + [sym_else_clause] = sym_else_clause, + [sym_case_statement] = sym_case_statement, + [sym__case_item_last] = sym_case_item, + [sym_case_item] = sym_case_item, + [sym_function_definition] = sym_function_definition, + [sym_compound_statement] = sym_compound_statement, + [sym_subshell] = sym_subshell, + [sym_pipeline] = sym_pipeline, + [sym_list] = sym_list, + [sym_negated_command] = sym_negated_command, + [sym_command] = sym_command, + [sym_command_name] = sym_command_name, + [sym_variable_assignment] = sym_variable_assignment, + [sym__variable_assignments] = sym__variable_assignments, + [sym_file_redirect] = sym_file_redirect, + [sym_heredoc_redirect] = sym_heredoc_redirect, + [sym__heredoc_pipeline] = sym_pipeline, + [sym__heredoc_expression] = sym__heredoc_expression, + [aux_sym__heredoc_command] = aux_sym__heredoc_command, + [sym__heredoc_body] = sym__heredoc_body, + [sym_heredoc_body] = sym_heredoc_body, + [sym__simple_heredoc_body] = sym__simple_heredoc_body, + [sym_arithmetic_expansion] = sym_arithmetic_expansion, + [sym__arithmetic_expression] = sym__arithmetic_expression, + [sym_arithmetic_literal] = sym_arithmetic_literal, + [sym_arithmetic_binary_expression] = sym_arithmetic_binary_expression, + [sym_arithmetic_ternary_expression] = sym_arithmetic_ternary_expression, + [sym_arithmetic_unary_expression] = sym_arithmetic_unary_expression, + [sym_arithmetic_postfix_expression] = sym_arithmetic_postfix_expression, + [sym_arithmetic_parenthesized_expression] = sym_arithmetic_parenthesized_expression, + [sym_concatenation] = sym_concatenation, + [sym_string] = sym_string, + [sym_simple_expansion] = sym_simple_expansion, + [sym_expansion] = sym_expansion, + [sym__expansion_body] = sym__expansion_body, + [sym_expansion_expression] = sym_expansion_expression, + [sym_expansion_regex] = sym_expansion_regex, + [sym__concatenation_in_expansion] = sym_concatenation, + [sym_command_substitution] = sym_command_substitution, + [sym__extglob_blob] = sym__extglob_blob, + [sym_terminator] = sym_terminator, + [aux_sym__statements_repeat1] = aux_sym__statements_repeat1, + [aux_sym_redirected_statement_repeat1] = aux_sym_redirected_statement_repeat1, + [aux_sym_redirected_statement_repeat2] = aux_sym_redirected_statement_repeat2, + [aux_sym_for_statement_repeat1] = aux_sym_for_statement_repeat1, + [aux_sym_if_statement_repeat1] = aux_sym_if_statement_repeat1, + [aux_sym_case_statement_repeat1] = aux_sym_case_statement_repeat1, + [aux_sym__case_item_last_repeat1] = aux_sym__case_item_last_repeat1, + [aux_sym__case_item_last_repeat2] = aux_sym__case_item_last_repeat2, + [aux_sym_pipeline_repeat1] = aux_sym_pipeline_repeat1, + [aux_sym_command_repeat1] = aux_sym_command_repeat1, + [aux_sym_command_repeat2] = aux_sym_command_repeat2, + [aux_sym__variable_assignments_repeat1] = aux_sym__variable_assignments_repeat1, + [aux_sym_heredoc_body_repeat1] = aux_sym_heredoc_body_repeat1, + [aux_sym_concatenation_repeat1] = aux_sym_concatenation_repeat1, + [aux_sym_string_repeat1] = aux_sym_string_repeat1, + [aux_sym_expansion_regex_repeat1] = aux_sym_expansion_regex_repeat1, + [aux_sym__concatenation_in_expansion_repeat1] = aux_sym__concatenation_in_expansion_repeat1, + [alias_sym_statements] = alias_sym_statements, +}; + +static const TSSymbolMetadata ts_symbol_metadata[] = { + [ts_builtin_sym_end] = { + .visible = false, + .named = true, + }, + [sym_word] = { + .visible = true, + .named = true, + }, + [anon_sym_for] = { + .visible = true, + .named = false, + }, + [anon_sym_in] = { + .visible = true, + .named = false, + }, + [anon_sym_while] = { + .visible = true, + .named = false, + }, + [anon_sym_until] = { + .visible = true, + .named = false, + }, + [anon_sym_do] = { + .visible = true, + .named = false, + }, + [anon_sym_done] = { + .visible = true, + .named = false, + }, + [anon_sym_if] = { + .visible = true, + .named = false, + }, + [anon_sym_then] = { + .visible = true, + .named = false, + }, + [anon_sym_fi] = { + .visible = true, + .named = false, + }, + [anon_sym_elif] = { + .visible = true, + .named = false, + }, + [anon_sym_else] = { + .visible = true, + .named = false, + }, + [anon_sym_case] = { + .visible = true, + .named = false, + }, + [anon_sym_esac] = { + .visible = true, + .named = false, + }, + [anon_sym_LPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_PIPE] = { + .visible = true, + .named = false, + }, + [anon_sym_RPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_LF] = { + .visible = true, + .named = false, + }, + [anon_sym_SEMI_SEMI] = { + .visible = true, + .named = false, + }, + [anon_sym_LBRACE] = { + .visible = true, + .named = false, + }, + [anon_sym_RBRACE] = { + .visible = true, + .named = false, + }, + [anon_sym_AMP_AMP] = { + .visible = true, + .named = true, + }, + [anon_sym_PIPE_PIPE] = { + .visible = true, + .named = true, + }, + [anon_sym_BANG] = { + .visible = true, + .named = false, + }, + [anon_sym_EQ] = { + .visible = true, + .named = false, + }, + [anon_sym_LT] = { + .visible = true, + .named = true, + }, + [anon_sym_GT] = { + .visible = true, + .named = true, + }, + [anon_sym_GT_GT] = { + .visible = true, + .named = true, + }, + [anon_sym_AMP_GT] = { + .visible = true, + .named = true, + }, + [anon_sym_AMP_GT_GT] = { + .visible = true, + .named = true, + }, + [anon_sym_LT_AMP] = { + .visible = true, + .named = true, + }, + [anon_sym_GT_AMP] = { + .visible = true, + .named = true, + }, + [anon_sym_GT_PIPE] = { + .visible = true, + .named = true, + }, + [anon_sym_LT_AMP_DASH] = { + .visible = true, + .named = true, + }, + [anon_sym_GT_AMP_DASH] = { + .visible = true, + .named = true, + }, + [anon_sym_LT_LT] = { + .visible = true, + .named = true, + }, + [anon_sym_LT_LT_DASH] = { + .visible = true, + .named = true, + }, + [aux_sym_heredoc_redirect_token1] = { + .visible = false, + .named = false, + }, + [anon_sym_PIPE_AMP] = { + .visible = true, + .named = false, + }, + [anon_sym_DOLLAR_LPAREN_LPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_RPAREN_RPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_PLUS_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_DASH_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_STAR_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_SLASH_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_PERCENT_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_LT_LT_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_GT_GT_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_AMP_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_CARET_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_PIPE_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_CARET] = { + .visible = true, + .named = true, + }, + [anon_sym_AMP] = { + .visible = true, + .named = false, + }, + [anon_sym_EQ_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_BANG_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_LT_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_GT_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_PLUS] = { + .visible = true, + .named = true, + }, + [anon_sym_DASH] = { + .visible = true, + .named = true, + }, + [anon_sym_STAR] = { + .visible = true, + .named = true, + }, + [anon_sym_SLASH] = { + .visible = true, + .named = true, + }, + [anon_sym_PERCENT] = { + .visible = true, + .named = true, + }, + [anon_sym_QMARK] = { + .visible = true, + .named = false, + }, + [anon_sym_COLON] = { + .visible = true, + .named = false, + }, + [anon_sym_PLUS_PLUS] = { + .visible = true, + .named = true, + }, + [anon_sym_DASH_DASH] = { + .visible = true, + .named = true, + }, + [anon_sym_DASH2] = { + .visible = true, + .named = true, + }, + [anon_sym_PLUS2] = { + .visible = true, + .named = true, + }, + [anon_sym_TILDE] = { + .visible = true, + .named = true, + }, + [anon_sym_PLUS_PLUS2] = { + .visible = true, + .named = true, + }, + [anon_sym_DASH_DASH2] = { + .visible = true, + .named = true, + }, + [aux_sym_concatenation_token1] = { + .visible = true, + .named = false, + }, + [anon_sym_DOLLAR] = { + .visible = true, + .named = false, + }, + [anon_sym_DQUOTE] = { + .visible = true, + .named = false, + }, + [sym_string_content] = { + .visible = true, + .named = true, + }, + [sym_raw_string] = { + .visible = true, + .named = true, + }, + [sym_number] = { + .visible = true, + .named = true, + }, + [anon_sym_POUND] = { + .visible = true, + .named = true, + }, + [anon_sym_DOLLAR_LBRACE] = { + .visible = true, + .named = false, + }, + [anon_sym_COLON_DASH] = { + .visible = true, + .named = true, + }, + [anon_sym_DASH3] = { + .visible = true, + .named = true, + }, + [anon_sym_COLON_EQ] = { + .visible = true, + .named = true, + }, + [anon_sym_EQ2] = { + .visible = true, + .named = true, + }, + [anon_sym_COLON_QMARK] = { + .visible = true, + .named = true, + }, + [anon_sym_QMARK2] = { + .visible = true, + .named = true, + }, + [anon_sym_COLON_PLUS] = { + .visible = true, + .named = true, + }, + [anon_sym_PLUS3] = { + .visible = true, + .named = true, + }, + [anon_sym_PERCENT_PERCENT] = { + .visible = true, + .named = true, + }, + [aux_sym_expansion_regex_token1] = { + .visible = true, + .named = true, + }, + [anon_sym_DOLLAR_LPAREN] = { + .visible = true, + .named = false, + }, + [anon_sym_BQUOTE] = { + .visible = true, + .named = false, + }, + [sym_comment] = { + .visible = true, + .named = true, + }, + [sym__comment_word] = { + .visible = true, + .named = true, + }, + [aux_sym__simple_variable_name_token1] = { + .visible = true, + .named = true, + }, + [aux_sym__multiline_variable_name_token1] = { + .visible = true, + .named = true, + }, + [anon_sym_AT] = { + .visible = true, + .named = true, + }, + [anon_sym_0] = { + .visible = true, + .named = true, + }, + [anon_sym__] = { + .visible = true, + .named = true, + }, + [anon_sym_SEMI] = { + .visible = true, + .named = false, + }, + [sym_heredoc_start] = { + .visible = true, + .named = true, + }, + [sym_simple_heredoc_body] = { + .visible = true, + .named = true, + }, + [sym__heredoc_body_beginning] = { + .visible = false, + .named = true, + }, + [sym_heredoc_content] = { + .visible = true, + .named = true, + }, + [sym_heredoc_end] = { + .visible = true, + .named = true, + }, + [sym_file_descriptor] = { + .visible = true, + .named = true, + }, + [sym__empty_value] = { + .visible = false, + .named = true, + }, + [sym__concat] = { + .visible = false, + .named = true, + }, + [sym_variable_name] = { + .visible = true, + .named = true, + }, + [sym_regex] = { + .visible = true, + .named = true, + }, + [sym__expansion_word] = { + .visible = true, + .named = true, + }, + [sym_extglob_pattern] = { + .visible = true, + .named = true, + }, + [sym__bare_dollar] = { + .visible = true, + .named = true, + }, + [sym__immediate_double_hash] = { + .visible = true, + .named = true, + }, + [sym___error_recovery] = { + .visible = false, + .named = true, + }, + [sym_program] = { + .visible = true, + .named = true, + }, + [sym__statements] = { + .visible = false, + .named = true, + }, + [aux_sym__terminated_statement] = { + .visible = false, + .named = false, + }, + [sym__statement_not_pipeline] = { + .visible = false, + .named = true, + }, + [sym_redirected_statement] = { + .visible = true, + .named = true, + }, + [sym_for_statement] = { + .visible = true, + .named = true, + }, + [sym_while_statement] = { + .visible = true, + .named = true, + }, + [sym_do_group] = { + .visible = true, + .named = true, + }, + [sym_if_statement] = { + .visible = true, + .named = true, + }, + [sym_elif_clause] = { + .visible = true, + .named = true, + }, + [sym_else_clause] = { + .visible = true, + .named = true, + }, + [sym_case_statement] = { + .visible = true, + .named = true, + }, + [sym__case_item_last] = { + .visible = true, + .named = true, + }, + [sym_case_item] = { + .visible = true, + .named = true, + }, + [sym_function_definition] = { + .visible = true, + .named = true, + }, + [sym_compound_statement] = { + .visible = true, + .named = true, + }, + [sym_subshell] = { + .visible = true, + .named = true, + }, + [sym_pipeline] = { + .visible = true, + .named = true, + }, + [sym_list] = { + .visible = true, + .named = true, + }, + [sym_negated_command] = { + .visible = true, + .named = true, + }, + [sym_command] = { + .visible = true, + .named = true, + }, + [sym_command_name] = { + .visible = true, + .named = true, + }, + [sym_variable_assignment] = { + .visible = true, + .named = true, + }, + [sym__variable_assignments] = { + .visible = false, + .named = true, + }, + [sym_file_redirect] = { + .visible = true, + .named = true, + }, + [sym_heredoc_redirect] = { + .visible = true, + .named = true, + }, + [sym__heredoc_pipeline] = { + .visible = true, + .named = true, + }, + [sym__heredoc_expression] = { + .visible = false, + .named = true, + }, + [aux_sym__heredoc_command] = { + .visible = false, + .named = false, + }, + [sym__heredoc_body] = { + .visible = false, + .named = true, + }, + [sym_heredoc_body] = { + .visible = true, + .named = true, + }, + [sym__simple_heredoc_body] = { + .visible = false, + .named = true, + }, + [sym_arithmetic_expansion] = { + .visible = true, + .named = true, + }, + [sym__arithmetic_expression] = { + .visible = false, + .named = true, + }, + [sym_arithmetic_literal] = { + .visible = true, + .named = true, + }, + [sym_arithmetic_binary_expression] = { + .visible = true, + .named = true, + }, + [sym_arithmetic_ternary_expression] = { + .visible = true, + .named = true, + }, + [sym_arithmetic_unary_expression] = { + .visible = true, + .named = true, + }, + [sym_arithmetic_postfix_expression] = { + .visible = true, + .named = true, + }, + [sym_arithmetic_parenthesized_expression] = { + .visible = true, + .named = true, + }, + [sym_concatenation] = { + .visible = true, + .named = true, + }, + [sym_string] = { + .visible = true, + .named = true, + }, + [sym_simple_expansion] = { + .visible = true, + .named = true, + }, + [sym_expansion] = { + .visible = true, + .named = true, + }, + [sym__expansion_body] = { + .visible = false, + .named = true, + }, + [sym_expansion_expression] = { + .visible = true, + .named = true, + }, + [sym_expansion_regex] = { + .visible = true, + .named = true, + }, + [sym__concatenation_in_expansion] = { + .visible = true, + .named = true, + }, + [sym_command_substitution] = { + .visible = true, + .named = true, + }, + [sym__extglob_blob] = { + .visible = false, + .named = true, + }, + [sym_terminator] = { + .visible = true, + .named = true, + }, + [aux_sym__statements_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_redirected_statement_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_redirected_statement_repeat2] = { + .visible = false, + .named = false, + }, + [aux_sym_for_statement_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_if_statement_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_case_statement_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__case_item_last_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__case_item_last_repeat2] = { + .visible = false, + .named = false, + }, + [aux_sym_pipeline_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_command_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_command_repeat2] = { + .visible = false, + .named = false, + }, + [aux_sym__variable_assignments_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_heredoc_body_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_concatenation_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_string_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_expansion_regex_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym__concatenation_in_expansion_repeat1] = { + .visible = false, + .named = false, + }, + [alias_sym_statements] = { + .visible = true, + .named = true, + }, +}; + +enum ts_field_identifiers { + field_alternative = 1, + field_arg = 2, + field_body = 3, + field_cases = 4, + field_cmd = 5, + field_condition = 6, + field_consequence = 7, + field_dest = 8, + field_elif = 9, + field_else = 10, + field_fd = 11, + field_left = 12, + field_name = 13, + field_op = 14, + field_redirect = 15, + field_right = 16, + field_stmt = 17, + field_terminator = 18, + field_value = 19, + field_variable = 20, +}; + +static const char * const ts_field_names[] = { + [0] = NULL, + [field_alternative] = "alternative", + [field_arg] = "arg", + [field_body] = "body", + [field_cases] = "cases", + [field_cmd] = "cmd", + [field_condition] = "condition", + [field_consequence] = "consequence", + [field_dest] = "dest", + [field_elif] = "elif", + [field_else] = "else", + [field_fd] = "fd", + [field_left] = "left", + [field_name] = "name", + [field_op] = "op", + [field_redirect] = "redirect", + [field_right] = "right", + [field_stmt] = "stmt", + [field_terminator] = "terminator", + [field_value] = "value", + [field_variable] = "variable", +}; + +static const TSFieldMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { + [1] = {.index = 0, .length = 1}, + [2] = {.index = 1, .length = 2}, + [3] = {.index = 3, .length = 1}, + [4] = {.index = 4, .length = 1}, + [5] = {.index = 5, .length = 1}, + [6] = {.index = 6, .length = 2}, + [7] = {.index = 8, .length = 2}, + [9] = {.index = 4, .length = 1}, + [10] = {.index = 10, .length = 2}, + [11] = {.index = 12, .length = 2}, + [12] = {.index = 14, .length = 1}, + [13] = {.index = 14, .length = 1}, + [14] = {.index = 15, .length = 2}, + [15] = {.index = 17, .length = 3}, + [16] = {.index = 20, .length = 4}, + [17] = {.index = 24, .length = 2}, + [18] = {.index = 26, .length = 2}, + [19] = {.index = 28, .length = 3}, + [20] = {.index = 31, .length = 2}, + [21] = {.index = 33, .length = 4}, + [22] = {.index = 37, .length = 2}, + [23] = {.index = 0, .length = 1}, + [24] = {.index = 39, .length = 1}, + [26] = {.index = 40, .length = 2}, + [27] = {.index = 40, .length = 2}, + [28] = {.index = 42, .length = 2}, + [29] = {.index = 44, .length = 1}, + [30] = {.index = 45, .length = 3}, + [31] = {.index = 48, .length = 2}, + [32] = {.index = 50, .length = 4}, + [33] = {.index = 54, .length = 3}, + [34] = {.index = 57, .length = 2}, + [35] = {.index = 59, .length = 3}, + [36] = {.index = 62, .length = 1}, + [37] = {.index = 63, .length = 1}, + [38] = {.index = 64, .length = 3}, + [42] = {.index = 67, .length = 2}, + [43] = {.index = 69, .length = 3}, + [44] = {.index = 72, .length = 6}, + [45] = {.index = 78, .length = 4}, + [46] = {.index = 82, .length = 4}, + [47] = {.index = 86, .length = 4}, + [48] = {.index = 90, .length = 2}, + [49] = {.index = 92, .length = 2}, + [50] = {.index = 94, .length = 3}, + [51] = {.index = 97, .length = 7}, + [52] = {.index = 104, .length = 7}, + [53] = {.index = 111, .length = 5}, + [54] = {.index = 116, .length = 4}, + [55] = {.index = 120, .length = 2}, + [56] = {.index = 122, .length = 4}, + [57] = {.index = 126, .length = 5}, + [58] = {.index = 131, .length = 3}, + [59] = {.index = 134, .length = 3}, + [60] = {.index = 137, .length = 2}, + [61] = {.index = 139, .length = 2}, + [62] = {.index = 141, .length = 8}, + [63] = {.index = 149, .length = 4}, + [64] = {.index = 153, .length = 4}, + [65] = {.index = 157, .length = 5}, + [66] = {.index = 162, .length = 5}, + [67] = {.index = 167, .length = 4}, + [68] = {.index = 171, .length = 4}, + [69] = {.index = 175, .length = 3}, + [70] = {.index = 178, .length = 3}, + [71] = {.index = 181, .length = 4}, + [72] = {.index = 185, .length = 4}, + [73] = {.index = 189, .length = 5}, + [74] = {.index = 194, .length = 5}, + [75] = {.index = 199, .length = 5}, + [76] = {.index = 204, .length = 5}, + [77] = {.index = 209, .length = 5}, +}; + +static const TSFieldMapEntry ts_field_map_entries[] = { + [0] = + {field_op, 0}, + [1] = + {field_stmt, 0, .inherited = true}, + {field_terminator, 0, .inherited = true}, + [3] = + {field_stmt, 0}, + [4] = + {field_name, 0}, + [5] = + {field_redirect, 0}, + [6] = + {field_fd, 0}, + {field_op, 1}, + [8] = + {field_dest, 1}, + {field_op, 0}, + [10] = + {field_stmt, 0}, + {field_terminator, 1}, + [12] = + {field_body, 0}, + {field_redirect, 1}, + [14] = + {field_arg, 0}, + [15] = + {field_arg, 1, .inherited = true}, + {field_name, 0}, + [17] = + {field_stmt, 0, .inherited = true}, + {field_stmt, 1}, + {field_terminator, 0, .inherited = true}, + [20] = + {field_stmt, 0, .inherited = true}, + {field_stmt, 1, .inherited = true}, + {field_terminator, 0, .inherited = true}, + {field_terminator, 1, .inherited = true}, + [24] = + {field_name, 1}, + {field_redirect, 0, .inherited = true}, + [26] = + {field_redirect, 0, .inherited = true}, + {field_redirect, 1, .inherited = true}, + [28] = + {field_dest, 2}, + {field_fd, 0}, + {field_op, 1}, + [31] = + {field_name, 0}, + {field_value, 2}, + [33] = + {field_body, 2}, + {field_condition, 1}, + {field_stmt, 1, .inherited = true}, + {field_terminator, 1, .inherited = true}, + [37] = + {field_stmt, 1, .inherited = true}, + {field_terminator, 1, .inherited = true}, + [39] = + {field_op, 1}, + [40] = + {field_name, 0}, + {field_op, 1}, + [42] = + {field_name, 1, .inherited = true}, + {field_op, 1, .inherited = true}, + [44] = + {field_redirect, 1}, + [45] = + {field_cmd, 0}, + {field_cmd, 2}, + {field_op, 1}, + [48] = + {field_arg, 0, .inherited = true}, + {field_arg, 1, .inherited = true}, + [50] = + {field_stmt, 0, .inherited = true}, + {field_stmt, 1}, + {field_terminator, 0, .inherited = true}, + {field_terminator, 2}, + [54] = + {field_arg, 2, .inherited = true}, + {field_name, 1}, + {field_redirect, 0, .inherited = true}, + [57] = + {field_body, 3}, + {field_variable, 1}, + [59] = + {field_condition, 1}, + {field_stmt, 1, .inherited = true}, + {field_terminator, 1, .inherited = true}, + [62] = + {field_value, 1}, + [63] = + {field_cases, 0}, + [64] = + {field_left, 0}, + {field_op, 1}, + {field_right, 2}, + [67] = + {field_body, 3}, + {field_name, 0}, + [69] = + {field_body, 1}, + {field_stmt, 1, .inherited = true}, + {field_terminator, 1, .inherited = true}, + [72] = + {field_body, 3}, + {field_condition, 1}, + {field_stmt, 1, .inherited = true}, + {field_stmt, 3, .inherited = true}, + {field_terminator, 1, .inherited = true}, + {field_terminator, 3, .inherited = true}, + [78] = + {field_condition, 1}, + {field_else, 3}, + {field_stmt, 1, .inherited = true}, + {field_terminator, 1, .inherited = true}, + [82] = + {field_condition, 1}, + {field_elif, 3}, + {field_stmt, 1, .inherited = true}, + {field_terminator, 1, .inherited = true}, + [86] = + {field_body, 3, .inherited = true}, + {field_cases, 3}, + {field_value, 1}, + {field_value, 3, .inherited = true}, + [90] = + {field_cases, 0, .inherited = true}, + {field_cases, 1, .inherited = true}, + [92] = + {field_op, 0}, + {field_right, 1}, + [94] = + {field_body, 5}, + {field_value, 3}, + {field_variable, 1}, + [97] = + {field_body, 3}, + {field_condition, 1}, + {field_else, 4}, + {field_stmt, 1, .inherited = true}, + {field_stmt, 3, .inherited = true}, + {field_terminator, 1, .inherited = true}, + {field_terminator, 3, .inherited = true}, + [104] = + {field_body, 3}, + {field_condition, 1}, + {field_elif, 4}, + {field_stmt, 1, .inherited = true}, + {field_stmt, 3, .inherited = true}, + {field_terminator, 1, .inherited = true}, + {field_terminator, 3, .inherited = true}, + [111] = + {field_condition, 1}, + {field_elif, 3}, + {field_else, 4}, + {field_stmt, 1, .inherited = true}, + {field_terminator, 1, .inherited = true}, + [116] = + {field_body, 2}, + {field_stmt, 2, .inherited = true}, + {field_terminator, 2, .inherited = true}, + {field_value, 0}, + [120] = + {field_value, 0, .inherited = true}, + {field_value, 1, .inherited = true}, + [122] = + {field_body, 4, .inherited = true}, + {field_cases, 4}, + {field_value, 1}, + {field_value, 4, .inherited = true}, + [126] = + {field_body, 4, .inherited = true}, + {field_cases, 3, .inherited = true}, + {field_cases, 4}, + {field_value, 1}, + {field_value, 4, .inherited = true}, + [131] = + {field_alternative, 4}, + {field_condition, 0}, + {field_consequence, 2}, + [134] = + {field_op, 0}, + {field_op, 2, .inherited = true}, + {field_right, 2, .inherited = true}, + [137] = + {field_arg, 2, .inherited = true}, + {field_op, 0}, + [139] = + {field_op, 0}, + {field_redirect, 2}, + [141] = + {field_body, 3}, + {field_condition, 1}, + {field_elif, 4}, + {field_else, 5}, + {field_stmt, 1, .inherited = true}, + {field_stmt, 3, .inherited = true}, + {field_terminator, 1, .inherited = true}, + {field_terminator, 3, .inherited = true}, + [149] = + {field_body, 3}, + {field_stmt, 3, .inherited = true}, + {field_terminator, 3, .inherited = true}, + {field_value, 1}, + [153] = + {field_body, 3}, + {field_stmt, 3, .inherited = true}, + {field_terminator, 3, .inherited = true}, + {field_value, 0}, + [157] = + {field_body, 3}, + {field_stmt, 3, .inherited = true}, + {field_terminator, 3, .inherited = true}, + {field_value, 0}, + {field_value, 1, .inherited = true}, + [162] = + {field_body, 5, .inherited = true}, + {field_cases, 4, .inherited = true}, + {field_cases, 5}, + {field_value, 1}, + {field_value, 5, .inherited = true}, + [167] = + {field_body, 5, .inherited = true}, + {field_cases, 5}, + {field_value, 1}, + {field_value, 5, .inherited = true}, + [171] = + {field_fd, 0}, + {field_op, 1}, + {field_op, 3, .inherited = true}, + {field_right, 3, .inherited = true}, + [175] = + {field_arg, 3, .inherited = true}, + {field_fd, 0}, + {field_op, 1}, + [178] = + {field_fd, 0}, + {field_op, 1}, + {field_redirect, 3}, + [181] = + {field_op, 0}, + {field_op, 3, .inherited = true}, + {field_redirect, 2}, + {field_right, 3, .inherited = true}, + [185] = + {field_body, 4}, + {field_stmt, 4, .inherited = true}, + {field_terminator, 4, .inherited = true}, + {field_value, 1}, + [189] = + {field_body, 4}, + {field_stmt, 4, .inherited = true}, + {field_terminator, 4, .inherited = true}, + {field_value, 1}, + {field_value, 2, .inherited = true}, + [194] = + {field_body, 4}, + {field_stmt, 4, .inherited = true}, + {field_terminator, 4, .inherited = true}, + {field_value, 0}, + {field_value, 1, .inherited = true}, + [199] = + {field_body, 6, .inherited = true}, + {field_cases, 5, .inherited = true}, + {field_cases, 6}, + {field_value, 1}, + {field_value, 6, .inherited = true}, + [204] = + {field_fd, 0}, + {field_op, 1}, + {field_op, 4, .inherited = true}, + {field_redirect, 3}, + {field_right, 4, .inherited = true}, + [209] = + {field_body, 5}, + {field_stmt, 5, .inherited = true}, + {field_terminator, 5, .inherited = true}, + {field_value, 1}, + {field_value, 2, .inherited = true}, +}; + +static const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = { + [0] = {0}, + [8] = { + [1] = anon_sym_POUND, + }, + [9] = { + [0] = anon_sym_POUND, + }, + [12] = { + [0] = anon_sym_DOLLAR, + }, + [23] = { + [0] = sym__immediate_double_hash, + }, + [25] = { + [1] = sym_string_content, + }, + [27] = { + [0] = anon_sym_POUND, + }, + [35] = { + [1] = alias_sym_statements, + }, + [38] = { + [1] = sym__immediate_double_hash, + }, + [39] = { + [2] = sym_string_content, + }, + [40] = { + [3] = sym_word, + }, + [41] = { + [0] = sym_regex, + }, + [43] = { + [1] = alias_sym_statements, + }, + [44] = { + [1] = alias_sym_statements, + [3] = alias_sym_statements, + }, + [45] = { + [1] = alias_sym_statements, + }, + [46] = { + [1] = alias_sym_statements, + }, + [51] = { + [1] = alias_sym_statements, + [3] = alias_sym_statements, + }, + [52] = { + [1] = alias_sym_statements, + [3] = alias_sym_statements, + }, + [53] = { + [1] = alias_sym_statements, + }, + [54] = { + [2] = alias_sym_statements, + }, + [62] = { + [1] = alias_sym_statements, + [3] = alias_sym_statements, + }, + [63] = { + [3] = alias_sym_statements, + }, + [64] = { + [3] = alias_sym_statements, + }, + [65] = { + [3] = alias_sym_statements, + }, + [72] = { + [4] = alias_sym_statements, + }, + [73] = { + [4] = alias_sym_statements, + }, + [74] = { + [4] = alias_sym_statements, + }, + [77] = { + [5] = alias_sym_statements, + }, +}; + +static const uint16_t ts_non_terminal_alias_map[] = { + sym__statements, 2, + sym__statements, + alias_sym_statements, + aux_sym__terminated_statement, 2, + aux_sym__terminated_statement, + alias_sym_statements, + 0, +}; + +static const TSStateId ts_primary_state_ids[STATE_COUNT] = { + [0] = 0, + [1] = 1, + [2] = 2, + [3] = 2, + [4] = 4, + [5] = 4, + [6] = 4, + [7] = 2, + [8] = 8, + [9] = 9, + [10] = 10, + [11] = 11, + [12] = 12, + [13] = 13, + [14] = 14, + [15] = 15, + [16] = 16, + [17] = 17, + [18] = 18, + [19] = 19, + [20] = 20, + [21] = 21, + [22] = 22, + [23] = 23, + [24] = 24, + [25] = 25, + [26] = 26, + [27] = 27, + [28] = 28, + [29] = 29, + [30] = 30, + [31] = 31, + [32] = 32, + [33] = 33, + [34] = 34, + [35] = 35, + [36] = 24, + [37] = 35, + [38] = 35, + [39] = 39, + [40] = 40, + [41] = 41, + [42] = 40, + [43] = 39, + [44] = 40, + [45] = 45, + [46] = 46, + [47] = 39, + [48] = 48, + [49] = 49, + [50] = 40, + [51] = 40, + [52] = 39, + [53] = 53, + [54] = 40, + [55] = 39, + [56] = 40, + [57] = 39, + [58] = 40, + [59] = 39, + [60] = 40, + [61] = 39, + [62] = 40, + [63] = 39, + [64] = 40, + [65] = 40, + [66] = 39, + [67] = 40, + [68] = 39, + [69] = 40, + [70] = 39, + [71] = 40, + [72] = 72, + [73] = 73, + [74] = 39, + [75] = 39, + [76] = 40, + [77] = 40, + [78] = 39, + [79] = 24, + [80] = 39, + [81] = 48, + [82] = 40, + [83] = 39, + [84] = 40, + [85] = 40, + [86] = 41, + [87] = 39, + [88] = 39, + [89] = 40, + [90] = 39, + [91] = 39, + [92] = 53, + [93] = 48, + [94] = 40, + [95] = 39, + [96] = 49, + [97] = 40, + [98] = 24, + [99] = 39, + [100] = 40, + [101] = 39, + [102] = 39, + [103] = 40, + [104] = 40, + [105] = 45, + [106] = 40, + [107] = 40, + [108] = 39, + [109] = 39, + [110] = 40, + [111] = 53, + [112] = 39, + [113] = 49, + [114] = 45, + [115] = 40, + [116] = 39, + [117] = 41, + [118] = 24, + [119] = 39, + [120] = 40, + [121] = 40, + [122] = 39, + [123] = 39, + [124] = 39, + [125] = 40, + [126] = 126, + [127] = 127, + [128] = 128, + [129] = 129, + [130] = 129, + [131] = 127, + [132] = 132, + [133] = 129, + [134] = 129, + [135] = 126, + [136] = 127, + [137] = 137, + [138] = 129, + [139] = 132, + [140] = 126, + [141] = 132, + [142] = 142, + [143] = 143, + [144] = 142, + [145] = 145, + [146] = 146, + [147] = 143, + [148] = 142, + [149] = 143, + [150] = 143, + [151] = 143, + [152] = 142, + [153] = 142, + [154] = 143, + [155] = 142, + [156] = 143, + [157] = 142, + [158] = 158, + [159] = 158, + [160] = 158, + [161] = 158, + [162] = 158, + [163] = 158, + [164] = 158, + [165] = 165, + [166] = 165, + [167] = 165, + [168] = 165, + [169] = 165, + [170] = 165, + [171] = 165, + [172] = 165, + [173] = 165, + [174] = 165, + [175] = 165, + [176] = 165, + [177] = 165, + [178] = 165, + [179] = 179, + [180] = 179, + [181] = 165, + [182] = 165, + [183] = 183, + [184] = 183, + [185] = 183, + [186] = 179, + [187] = 179, + [188] = 165, + [189] = 183, + [190] = 179, + [191] = 183, + [192] = 192, + [193] = 193, + [194] = 194, + [195] = 195, + [196] = 196, + [197] = 193, + [198] = 198, + [199] = 194, + [200] = 196, + [201] = 194, + [202] = 196, + [203] = 195, + [204] = 165, + [205] = 195, + [206] = 198, + [207] = 193, + [208] = 192, + [209] = 165, + [210] = 198, + [211] = 192, + [212] = 192, + [213] = 192, + [214] = 195, + [215] = 195, + [216] = 195, + [217] = 193, + [218] = 198, + [219] = 194, + [220] = 192, + [221] = 221, + [222] = 222, + [223] = 221, + [224] = 193, + [225] = 193, + [226] = 226, + [227] = 192, + [228] = 226, + [229] = 229, + [230] = 195, + [231] = 165, + [232] = 165, + [233] = 222, + [234] = 193, + [235] = 229, + [236] = 229, + [237] = 165, + [238] = 226, + [239] = 196, + [240] = 222, + [241] = 221, + [242] = 194, + [243] = 196, + [244] = 229, + [245] = 245, + [246] = 195, + [247] = 193, + [248] = 248, + [249] = 222, + [250] = 195, + [251] = 179, + [252] = 252, + [253] = 226, + [254] = 248, + [255] = 226, + [256] = 252, + [257] = 257, + [258] = 221, + [259] = 183, + [260] = 222, + [261] = 193, + [262] = 229, + [263] = 192, + [264] = 221, + [265] = 165, + [266] = 257, + [267] = 257, + [268] = 221, + [269] = 269, + [270] = 165, + [271] = 222, + [272] = 222, + [273] = 269, + [274] = 245, + [275] = 269, + [276] = 248, + [277] = 277, + [278] = 245, + [279] = 252, + [280] = 252, + [281] = 252, + [282] = 221, + [283] = 283, + [284] = 222, + [285] = 179, + [286] = 286, + [287] = 183, + [288] = 288, + [289] = 289, + [290] = 221, + [291] = 289, + [292] = 288, + [293] = 286, + [294] = 286, + [295] = 248, + [296] = 257, + [297] = 283, + [298] = 257, + [299] = 289, + [300] = 283, + [301] = 248, + [302] = 288, + [303] = 222, + [304] = 221, + [305] = 283, + [306] = 196, + [307] = 307, + [308] = 308, + [309] = 286, + [310] = 310, + [311] = 283, + [312] = 312, + [313] = 307, + [314] = 308, + [315] = 315, + [316] = 307, + [317] = 308, + [318] = 315, + [319] = 286, + [320] = 283, + [321] = 321, + [322] = 322, + [323] = 321, + [324] = 324, + [325] = 325, + [326] = 326, + [327] = 286, + [328] = 328, + [329] = 329, + [330] = 330, + [331] = 331, + [332] = 332, + [333] = 333, + [334] = 333, + [335] = 335, + [336] = 322, + [337] = 337, + [338] = 286, + [339] = 339, + [340] = 337, + [341] = 325, + [342] = 325, + [343] = 322, + [344] = 286, + [345] = 345, + [346] = 346, + [347] = 347, + [348] = 288, + [349] = 349, + [350] = 312, + [351] = 283, + [352] = 352, + [353] = 193, + [354] = 349, + [355] = 312, + [356] = 315, + [357] = 283, + [358] = 165, + [359] = 321, + [360] = 360, + [361] = 339, + [362] = 324, + [363] = 332, + [364] = 312, + [365] = 326, + [366] = 312, + [367] = 324, + [368] = 326, + [369] = 352, + [370] = 370, + [371] = 337, + [372] = 283, + [373] = 331, + [374] = 330, + [375] = 329, + [376] = 328, + [377] = 339, + [378] = 195, + [379] = 286, + [380] = 352, + [381] = 326, + [382] = 324, + [383] = 192, + [384] = 328, + [385] = 333, + [386] = 329, + [387] = 330, + [388] = 331, + [389] = 332, + [390] = 198, + [391] = 194, + [392] = 349, + [393] = 328, + [394] = 332, + [395] = 329, + [396] = 330, + [397] = 331, + [398] = 310, + [399] = 321, + [400] = 283, + [401] = 315, + [402] = 308, + [403] = 403, + [404] = 404, + [405] = 405, + [406] = 406, + [407] = 407, + [408] = 408, + [409] = 409, + [410] = 410, + [411] = 411, + [412] = 412, + [413] = 413, + [414] = 414, + [415] = 415, + [416] = 307, + [417] = 312, + [418] = 310, + [419] = 288, + [420] = 289, + [421] = 312, + [422] = 328, + [423] = 423, + [424] = 315, + [425] = 307, + [426] = 308, + [427] = 315, + [428] = 283, + [429] = 324, + [430] = 326, + [431] = 165, + [432] = 286, + [433] = 423, + [434] = 196, + [435] = 332, + [436] = 423, + [437] = 437, + [438] = 321, + [439] = 315, + [440] = 308, + [441] = 307, + [442] = 310, + [443] = 195, + [444] = 193, + [445] = 349, + [446] = 286, + [447] = 339, + [448] = 324, + [449] = 423, + [450] = 326, + [451] = 423, + [452] = 423, + [453] = 423, + [454] = 352, + [455] = 328, + [456] = 329, + [457] = 330, + [458] = 339, + [459] = 331, + [460] = 337, + [461] = 423, + [462] = 370, + [463] = 463, + [464] = 165, + [465] = 194, + [466] = 332, + [467] = 423, + [468] = 423, + [469] = 352, + [470] = 423, + [471] = 423, + [472] = 423, + [473] = 423, + [474] = 283, + [475] = 423, + [476] = 476, + [477] = 352, + [478] = 423, + [479] = 333, + [480] = 307, + [481] = 165, + [482] = 308, + [483] = 331, + [484] = 330, + [485] = 329, + [486] = 328, + [487] = 198, + [488] = 310, + [489] = 423, + [490] = 321, + [491] = 321, + [492] = 321, + [493] = 165, + [494] = 308, + [495] = 307, + [496] = 315, + [497] = 324, + [498] = 326, + [499] = 328, + [500] = 283, + [501] = 325, + [502] = 423, + [503] = 423, + [504] = 322, + [505] = 423, + [506] = 339, + [507] = 423, + [508] = 463, + [509] = 349, + [510] = 329, + [511] = 345, + [512] = 346, + [513] = 347, + [514] = 330, + [515] = 331, + [516] = 332, + [517] = 326, + [518] = 324, + [519] = 349, + [520] = 310, + [521] = 324, + [522] = 326, + [523] = 315, + [524] = 352, + [525] = 165, + [526] = 221, + [527] = 360, + [528] = 423, + [529] = 423, + [530] = 332, + [531] = 165, + [532] = 310, + [533] = 307, + [534] = 308, + [535] = 423, + [536] = 315, + [537] = 332, + [538] = 423, + [539] = 331, + [540] = 165, + [541] = 330, + [542] = 329, + [543] = 283, + [544] = 321, + [545] = 286, + [546] = 352, + [547] = 165, + [548] = 349, + [549] = 324, + [550] = 326, + [551] = 352, + [552] = 328, + [553] = 329, + [554] = 330, + [555] = 331, + [556] = 332, + [557] = 476, + [558] = 193, + [559] = 423, + [560] = 310, + [561] = 307, + [562] = 308, + [563] = 315, + [564] = 328, + [565] = 329, + [566] = 321, + [567] = 192, + [568] = 415, + [569] = 414, + [570] = 413, + [571] = 412, + [572] = 411, + [573] = 410, + [574] = 409, + [575] = 408, + [576] = 407, + [577] = 406, + [578] = 405, + [579] = 404, + [580] = 403, + [581] = 349, + [582] = 330, + [583] = 195, + [584] = 423, + [585] = 423, + [586] = 321, + [587] = 192, + [588] = 283, + [589] = 308, + [590] = 307, + [591] = 423, + [592] = 349, + [593] = 324, + [594] = 331, + [595] = 222, + [596] = 326, + [597] = 332, + [598] = 331, + [599] = 328, + [600] = 339, + [601] = 335, + [602] = 310, + [603] = 329, + [604] = 330, + [605] = 310, + [606] = 321, + [607] = 352, + [608] = 326, + [609] = 310, + [610] = 328, + [611] = 324, + [612] = 315, + [613] = 324, + [614] = 329, + [615] = 615, + [616] = 308, + [617] = 307, + [618] = 618, + [619] = 248, + [620] = 620, + [621] = 328, + [622] = 622, + [623] = 330, + [624] = 622, + [625] = 352, + [626] = 257, + [627] = 321, + [628] = 283, + [629] = 308, + [630] = 307, + [631] = 326, + [632] = 315, + [633] = 329, + [634] = 330, + [635] = 331, + [636] = 622, + [637] = 165, + [638] = 222, + [639] = 221, + [640] = 331, + [641] = 330, + [642] = 332, + [643] = 329, + [644] = 328, + [645] = 321, + [646] = 331, + [647] = 339, + [648] = 332, + [649] = 349, + [650] = 307, + [651] = 195, + [652] = 310, + [653] = 192, + [654] = 349, + [655] = 308, + [656] = 332, + [657] = 326, + [658] = 222, + [659] = 349, + [660] = 315, + [661] = 324, + [662] = 352, + [663] = 165, + [664] = 437, + [665] = 221, + [666] = 193, + [667] = 667, + [668] = 668, + [669] = 669, + [670] = 670, + [671] = 671, + [672] = 672, + [673] = 673, + [674] = 674, + [675] = 668, + [676] = 670, + [677] = 668, + [678] = 668, + [679] = 668, + [680] = 668, + [681] = 668, + [682] = 668, + [683] = 683, + [684] = 684, + [685] = 685, + [686] = 221, + [687] = 687, + [688] = 688, + [689] = 668, + [690] = 222, + [691] = 668, + [692] = 615, + [693] = 693, + [694] = 283, + [695] = 669, + [696] = 668, + [697] = 669, + [698] = 668, + [699] = 668, + [700] = 668, + [701] = 668, + [702] = 668, + [703] = 668, + [704] = 668, + [705] = 670, + [706] = 684, + [707] = 668, + [708] = 257, + [709] = 709, + [710] = 668, + [711] = 711, + [712] = 684, + [713] = 672, + [714] = 668, + [715] = 687, + [716] = 437, + [717] = 687, + [718] = 718, + [719] = 719, + [720] = 288, + [721] = 668, + [722] = 722, + [723] = 723, + [724] = 683, + [725] = 668, + [726] = 685, + [727] = 672, + [728] = 688, + [729] = 668, + [730] = 668, + [731] = 731, + [732] = 672, + [733] = 672, + [734] = 289, + [735] = 165, + [736] = 668, + [737] = 668, + [738] = 738, + [739] = 739, + [740] = 740, + [741] = 668, + [742] = 693, + [743] = 672, + [744] = 685, + [745] = 668, + [746] = 668, + [747] = 693, + [748] = 668, + [749] = 668, + [750] = 750, + [751] = 750, + [752] = 740, + [753] = 739, + [754] = 738, + [755] = 731, + [756] = 723, + [757] = 722, + [758] = 719, + [759] = 718, + [760] = 711, + [761] = 671, + [762] = 667, + [763] = 673, + [764] = 674, + [765] = 672, + [766] = 668, + [767] = 248, + [768] = 683, + [769] = 283, + [770] = 688, + [771] = 288, + [772] = 671, + [773] = 615, + [774] = 711, + [775] = 673, + [776] = 437, + [777] = 289, + [778] = 723, + [779] = 718, + [780] = 283, + [781] = 437, + [782] = 437, + [783] = 615, + [784] = 719, + [785] = 722, + [786] = 693, + [787] = 685, + [788] = 667, + [789] = 674, + [790] = 731, + [791] = 738, + [792] = 739, + [793] = 286, + [794] = 740, + [795] = 339, + [796] = 333, + [797] = 750, + [798] = 615, + [799] = 322, + [800] = 325, + [801] = 193, + [802] = 283, + [803] = 195, + [804] = 192, + [805] = 437, + [806] = 337, + [807] = 308, + [808] = 731, + [809] = 315, + [810] = 283, + [811] = 321, + [812] = 324, + [813] = 326, + [814] = 349, + [815] = 286, + [816] = 328, + [817] = 329, + [818] = 310, + [819] = 330, + [820] = 331, + [821] = 332, + [822] = 283, + [823] = 352, + [824] = 286, + [825] = 825, + [826] = 307, + [827] = 339, + [828] = 339, + [829] = 688, + [830] = 333, + [831] = 723, + [832] = 722, + [833] = 719, + [834] = 718, + [835] = 283, + [836] = 711, + [837] = 671, + [838] = 667, + [839] = 673, + [840] = 674, + [841] = 165, + [842] = 322, + [843] = 165, + [844] = 337, + [845] = 325, + [846] = 221, + [847] = 750, + [848] = 740, + [849] = 739, + [850] = 222, + [851] = 738, + [852] = 324, + [853] = 165, + [854] = 332, + [855] = 330, + [856] = 339, + [857] = 329, + [858] = 328, + [859] = 193, + [860] = 326, + [861] = 324, + [862] = 321, + [863] = 315, + [864] = 332, + [865] = 331, + [866] = 330, + [867] = 195, + [868] = 329, + [869] = 352, + [870] = 308, + [871] = 331, + [872] = 352, + [873] = 307, + [874] = 310, + [875] = 286, + [876] = 165, + [877] = 310, + [878] = 328, + [879] = 308, + [880] = 349, + [881] = 349, + [882] = 315, + [883] = 192, + [884] = 283, + [885] = 321, + [886] = 307, + [887] = 326, + [888] = 888, + [889] = 888, + [890] = 888, + [891] = 888, + [892] = 888, + [893] = 286, + [894] = 888, + [895] = 888, + [896] = 896, + [897] = 888, + [898] = 307, + [899] = 308, + [900] = 315, + [901] = 324, + [902] = 888, + [903] = 326, + [904] = 896, + [905] = 905, + [906] = 332, + [907] = 888, + [908] = 321, + [909] = 888, + [910] = 888, + [911] = 888, + [912] = 328, + [913] = 888, + [914] = 888, + [915] = 888, + [916] = 888, + [917] = 329, + [918] = 888, + [919] = 888, + [920] = 888, + [921] = 330, + [922] = 888, + [923] = 352, + [924] = 331, + [925] = 905, + [926] = 888, + [927] = 221, + [928] = 622, + [929] = 222, + [930] = 888, + [931] = 888, + [932] = 888, + [933] = 888, + [934] = 905, + [935] = 888, + [936] = 349, + [937] = 896, + [938] = 310, + [939] = 888, + [940] = 888, + [941] = 324, + [942] = 942, + [943] = 943, + [944] = 944, + [945] = 945, + [946] = 326, + [947] = 286, + [948] = 286, + [949] = 684, + [950] = 339, + [951] = 951, + [952] = 952, + [953] = 315, + [954] = 687, + [955] = 955, + [956] = 693, + [957] = 957, + [958] = 958, + [959] = 959, + [960] = 960, + [961] = 685, + [962] = 962, + [963] = 308, + [964] = 964, + [965] = 328, + [966] = 329, + [967] = 967, + [968] = 307, + [969] = 943, + [970] = 944, + [971] = 945, + [972] = 321, + [973] = 951, + [974] = 974, + [975] = 330, + [976] = 976, + [977] = 952, + [978] = 955, + [979] = 957, + [980] = 958, + [981] = 331, + [982] = 962, + [983] = 967, + [984] = 974, + [985] = 165, + [986] = 986, + [987] = 670, + [988] = 683, + [989] = 669, + [990] = 990, + [991] = 960, + [992] = 352, + [993] = 990, + [994] = 310, + [995] = 349, + [996] = 942, + [997] = 976, + [998] = 986, + [999] = 959, + [1000] = 964, + [1001] = 283, + [1002] = 332, + [1003] = 1003, + [1004] = 308, + [1005] = 286, + [1006] = 1006, + [1007] = 322, + [1008] = 1008, + [1009] = 283, + [1010] = 1003, + [1011] = 307, + [1012] = 1012, + [1013] = 1008, + [1014] = 349, + [1015] = 1015, + [1016] = 308, + [1017] = 352, + [1018] = 1018, + [1019] = 1019, + [1020] = 310, + [1021] = 1021, + [1022] = 1022, + [1023] = 1023, + [1024] = 1024, + [1025] = 1025, + [1026] = 1019, + [1027] = 1027, + [1028] = 315, + [1029] = 321, + [1030] = 324, + [1031] = 1015, + [1032] = 326, + [1033] = 328, + [1034] = 329, + [1035] = 1027, + [1036] = 330, + [1037] = 1025, + [1038] = 331, + [1039] = 332, + [1040] = 352, + [1041] = 1024, + [1042] = 283, + [1043] = 1023, + [1044] = 1027, + [1045] = 1025, + [1046] = 1024, + [1047] = 1023, + [1048] = 1022, + [1049] = 1021, + [1050] = 1022, + [1051] = 1022, + [1052] = 283, + [1053] = 310, + [1054] = 1003, + [1055] = 1012, + [1056] = 1008, + [1057] = 1006, + [1058] = 1015, + [1059] = 1021, + [1060] = 1018, + [1061] = 349, + [1062] = 1019, + [1063] = 1021, + [1064] = 1018, + [1065] = 283, + [1066] = 1019, + [1067] = 1023, + [1068] = 1024, + [1069] = 1025, + [1070] = 1027, + [1071] = 1015, + [1072] = 1006, + [1073] = 1012, + [1074] = 1018, + [1075] = 331, + [1076] = 315, + [1077] = 330, + [1078] = 329, + [1079] = 328, + [1080] = 324, + [1081] = 326, + [1082] = 322, + [1083] = 322, + [1084] = 1008, + [1085] = 321, + [1086] = 1006, + [1087] = 1003, + [1088] = 1012, + [1089] = 332, + [1090] = 322, + [1091] = 307, + [1092] = 322, + [1093] = 1093, + [1094] = 1094, + [1095] = 1021, + [1096] = 1096, + [1097] = 1097, + [1098] = 1098, + [1099] = 1093, + [1100] = 1100, + [1101] = 669, + [1102] = 1027, + [1103] = 331, + [1104] = 330, + [1105] = 325, + [1106] = 329, + [1107] = 1107, + [1108] = 328, + [1109] = 339, + [1110] = 1096, + [1111] = 325, + [1112] = 1112, + [1113] = 1107, + [1114] = 1107, + [1115] = 283, + [1116] = 1098, + [1117] = 1097, + [1118] = 337, + [1119] = 1094, + [1120] = 321, + [1121] = 332, + [1122] = 326, + [1123] = 1123, + [1124] = 324, + [1125] = 315, + [1126] = 165, + [1127] = 308, + [1128] = 337, + [1129] = 283, + [1130] = 1025, + [1131] = 1131, + [1132] = 307, + [1133] = 1123, + [1134] = 337, + [1135] = 1112, + [1136] = 1131, + [1137] = 1123, + [1138] = 325, + [1139] = 283, + [1140] = 1112, + [1141] = 1112, + [1142] = 1131, + [1143] = 1131, + [1144] = 1024, + [1145] = 1023, + [1146] = 1006, + [1147] = 1003, + [1148] = 1093, + [1149] = 349, + [1150] = 283, + [1151] = 1012, + [1152] = 337, + [1153] = 1008, + [1154] = 1097, + [1155] = 1015, + [1156] = 325, + [1157] = 1123, + [1158] = 337, + [1159] = 322, + [1160] = 283, + [1161] = 1019, + [1162] = 1162, + [1163] = 1093, + [1164] = 1098, + [1165] = 1018, + [1166] = 1107, + [1167] = 286, + [1168] = 1094, + [1169] = 286, + [1170] = 1170, + [1171] = 283, + [1172] = 310, + [1173] = 325, + [1174] = 1112, + [1175] = 1096, + [1176] = 1096, + [1177] = 352, + [1178] = 1098, + [1179] = 1097, + [1180] = 1022, + [1181] = 1094, + [1182] = 1182, + [1183] = 352, + [1184] = 1184, + [1185] = 337, + [1186] = 325, + [1187] = 1187, + [1188] = 1188, + [1189] = 1184, + [1190] = 1190, + [1191] = 1191, + [1192] = 1192, + [1193] = 1192, + [1194] = 1107, + [1195] = 1184, + [1196] = 1196, + [1197] = 670, + [1198] = 331, + [1199] = 330, + [1200] = 1200, + [1201] = 1201, + [1202] = 329, + [1203] = 1203, + [1204] = 1204, + [1205] = 683, + [1206] = 1206, + [1207] = 1188, + [1208] = 328, + [1209] = 321, + [1210] = 1210, + [1211] = 1211, + [1212] = 332, + [1213] = 1213, + [1214] = 1214, + [1215] = 1188, + [1216] = 1096, + [1217] = 1217, + [1218] = 1184, + [1219] = 1188, + [1220] = 1220, + [1221] = 326, + [1222] = 1222, + [1223] = 1200, + [1224] = 1224, + [1225] = 1225, + [1226] = 1226, + [1227] = 352, + [1228] = 1228, + [1229] = 1229, + [1230] = 1230, + [1231] = 1231, + [1232] = 1232, + [1233] = 1233, + [1234] = 324, + [1235] = 1200, + [1236] = 1236, + [1237] = 315, + [1238] = 1238, + [1239] = 1239, + [1240] = 1240, + [1241] = 1241, + [1242] = 308, + [1243] = 307, + [1244] = 1244, + [1245] = 326, + [1246] = 1200, + [1247] = 1192, + [1248] = 324, + [1249] = 1239, + [1250] = 310, + [1251] = 283, + [1252] = 1252, + [1253] = 1253, + [1254] = 1254, + [1255] = 1255, + [1256] = 1123, + [1257] = 307, + [1258] = 1258, + [1259] = 1259, + [1260] = 1260, + [1261] = 1261, + [1262] = 1262, + [1263] = 1263, + [1264] = 1094, + [1265] = 1097, + [1266] = 1239, + [1267] = 1192, + [1268] = 1268, + [1269] = 1098, + [1270] = 1131, + [1271] = 1192, + [1272] = 308, + [1273] = 1273, + [1274] = 1274, + [1275] = 1275, + [1276] = 310, + [1277] = 1277, + [1278] = 1278, + [1279] = 1279, + [1280] = 1280, + [1281] = 321, + [1282] = 1282, + [1283] = 1283, + [1284] = 315, + [1285] = 1093, + [1286] = 1192, + [1287] = 349, + [1288] = 332, + [1289] = 1200, + [1290] = 1192, + [1291] = 1291, + [1292] = 331, + [1293] = 349, + [1294] = 330, + [1295] = 329, + [1296] = 328, + [1297] = 1239, + [1298] = 1298, + [1299] = 1299, + [1300] = 1300, + [1301] = 1301, + [1302] = 1301, + [1303] = 1184, + [1304] = 1304, + [1305] = 669, + [1306] = 1299, + [1307] = 1188, + [1308] = 1300, + [1309] = 1239, + [1310] = 1304, + [1311] = 1304, + [1312] = 1300, + [1313] = 1299, + [1314] = 1301, + [1315] = 1304, + [1316] = 1301, + [1317] = 1170, + [1318] = 1318, + [1319] = 1319, + [1320] = 1206, + [1321] = 1203, + [1322] = 1201, + [1323] = 1323, + [1324] = 1187, + [1325] = 1214, + [1326] = 1304, + [1327] = 670, + [1328] = 1211, + [1329] = 322, + [1330] = 1263, + [1331] = 1282, + [1332] = 1204, + [1333] = 1213, + [1334] = 1277, + [1335] = 1217, + [1336] = 683, + [1337] = 1220, + [1338] = 1338, + [1339] = 1298, + [1340] = 1283, + [1341] = 669, + [1342] = 1190, + [1343] = 1343, + [1344] = 1224, + [1345] = 670, + [1346] = 1280, + [1347] = 1279, + [1348] = 1291, + [1349] = 1226, + [1350] = 1350, + [1351] = 1278, + [1352] = 1275, + [1353] = 1274, + [1354] = 1350, + [1355] = 1301, + [1356] = 283, + [1357] = 1228, + [1358] = 1229, + [1359] = 683, + [1360] = 1318, + [1361] = 165, + [1362] = 1230, + [1363] = 1231, + [1364] = 1232, + [1365] = 1319, + [1366] = 1252, + [1367] = 1273, + [1368] = 1233, + [1369] = 1236, + [1370] = 1238, + [1371] = 1253, + [1372] = 1338, + [1373] = 1323, + [1374] = 1240, + [1375] = 1350, + [1376] = 1258, + [1377] = 1182, + [1378] = 1260, + [1379] = 1323, + [1380] = 1261, + [1381] = 1318, + [1382] = 1319, + [1383] = 1241, + [1384] = 1268, + [1385] = 1262, + [1386] = 1244, + [1387] = 1225, + [1388] = 1222, + [1389] = 1196, + [1390] = 1210, + [1391] = 1259, + [1392] = 1255, + [1393] = 1338, + [1394] = 1254, + [1395] = 1395, + [1396] = 1396, + [1397] = 1123, + [1398] = 325, + [1399] = 337, + [1400] = 286, + [1401] = 283, + [1402] = 192, + [1403] = 1093, + [1404] = 1131, + [1405] = 322, + [1406] = 1406, + [1407] = 1094, + [1408] = 1097, + [1409] = 1098, + [1410] = 283, + [1411] = 1411, + [1412] = 330, + [1413] = 326, + [1414] = 286, + [1415] = 1239, + [1416] = 332, + [1417] = 325, + [1418] = 349, + [1419] = 283, + [1420] = 1188, + [1421] = 321, + [1422] = 315, + [1423] = 308, + [1424] = 328, + [1425] = 329, + [1426] = 324, + [1427] = 331, + [1428] = 1093, + [1429] = 1098, + [1430] = 307, + [1431] = 1431, + [1432] = 1131, + [1433] = 1123, + [1434] = 1097, + [1435] = 1094, + [1436] = 352, + [1437] = 337, + [1438] = 310, + [1439] = 1184, + [1440] = 1188, + [1441] = 321, + [1442] = 1442, + [1443] = 1442, + [1444] = 1442, + [1445] = 1442, + [1446] = 1301, + [1447] = 1442, + [1448] = 1184, + [1449] = 1304, + [1450] = 352, + [1451] = 310, + [1452] = 349, + [1453] = 1442, + [1454] = 307, + [1455] = 331, + [1456] = 1442, + [1457] = 330, + [1458] = 1239, + [1459] = 315, + [1460] = 329, + [1461] = 328, + [1462] = 326, + [1463] = 332, + [1464] = 308, + [1465] = 324, + [1466] = 1466, + [1467] = 1467, + [1468] = 325, + [1469] = 1469, + [1470] = 1469, + [1471] = 1467, + [1472] = 165, + [1473] = 1473, + [1474] = 1474, + [1475] = 1475, + [1476] = 1466, + [1477] = 1466, + [1478] = 1467, + [1479] = 1469, + [1480] = 1480, + [1481] = 1467, + [1482] = 1467, + [1483] = 1467, + [1484] = 1473, + [1485] = 1466, + [1486] = 337, + [1487] = 1469, + [1488] = 1466, + [1489] = 1474, + [1490] = 1469, + [1491] = 1475, + [1492] = 1467, + [1493] = 1480, + [1494] = 1467, + [1495] = 1466, + [1496] = 1469, + [1497] = 1467, + [1498] = 1469, + [1499] = 1467, + [1500] = 1466, + [1501] = 1467, + [1502] = 1467, + [1503] = 669, + [1504] = 1466, + [1505] = 1467, + [1506] = 1467, + [1507] = 1469, + [1508] = 1466, + [1509] = 1467, + [1510] = 1469, + [1511] = 1511, + [1512] = 1301, + [1513] = 1467, + [1514] = 1170, + [1515] = 1467, + [1516] = 1467, + [1517] = 1467, + [1518] = 1467, + [1519] = 1467, + [1520] = 1467, + [1521] = 1466, + [1522] = 1467, + [1523] = 1467, + [1524] = 1466, + [1525] = 1467, + [1526] = 1467, + [1527] = 1466, + [1528] = 1467, + [1529] = 1466, + [1530] = 1466, + [1531] = 1469, + [1532] = 1473, + [1533] = 1474, + [1534] = 1467, + [1535] = 1466, + [1536] = 1536, + [1537] = 1466, + [1538] = 1466, + [1539] = 1467, + [1540] = 1466, + [1541] = 1469, + [1542] = 1467, + [1543] = 1467, + [1544] = 1304, + [1545] = 1466, + [1546] = 1467, + [1547] = 1467, + [1548] = 1467, + [1549] = 1467, + [1550] = 1467, + [1551] = 1469, + [1552] = 1467, + [1553] = 1467, + [1554] = 1466, + [1555] = 1467, + [1556] = 1466, + [1557] = 1466, + [1558] = 1475, + [1559] = 1559, + [1560] = 1466, + [1561] = 1467, + [1562] = 1467, + [1563] = 1467, + [1564] = 1466, + [1565] = 1467, + [1566] = 1469, + [1567] = 1480, + [1568] = 1466, + [1569] = 283, + [1570] = 1467, + [1571] = 286, + [1572] = 1466, + [1573] = 1467, + [1574] = 1466, + [1575] = 1469, + [1576] = 1466, + [1577] = 1577, + [1578] = 1261, + [1579] = 1230, + [1580] = 286, + [1581] = 1581, + [1582] = 349, + [1583] = 307, + [1584] = 1584, + [1585] = 308, + [1586] = 1584, + [1587] = 283, + [1588] = 1588, + [1589] = 315, + [1590] = 1584, + [1591] = 310, + [1592] = 321, + [1593] = 1584, + [1594] = 1584, + [1595] = 1581, + [1596] = 352, + [1597] = 324, + [1598] = 1581, + [1599] = 1588, + [1600] = 1581, + [1601] = 326, + [1602] = 1584, + [1603] = 1581, + [1604] = 1588, + [1605] = 670, + [1606] = 1283, + [1607] = 1298, + [1608] = 1263, + [1609] = 1184, + [1610] = 1187, + [1611] = 1196, + [1612] = 1211, + [1613] = 1259, + [1614] = 1584, + [1615] = 1581, + [1616] = 1210, + [1617] = 1222, + [1618] = 1225, + [1619] = 1268, + [1620] = 1260, + [1621] = 1182, + [1622] = 1258, + [1623] = 1253, + [1624] = 1252, + [1625] = 1190, + [1626] = 1282, + [1627] = 1201, + [1628] = 1203, + [1629] = 1206, + [1630] = 1213, + [1631] = 1214, + [1632] = 1217, + [1633] = 1220, + [1634] = 1224, + [1635] = 1226, + [1636] = 1228, + [1637] = 1229, + [1638] = 1581, + [1639] = 683, + [1640] = 1231, + [1641] = 1584, + [1642] = 328, + [1643] = 1581, + [1644] = 1584, + [1645] = 1232, + [1646] = 329, + [1647] = 1233, + [1648] = 1236, + [1649] = 1238, + [1650] = 1584, + [1651] = 1240, + [1652] = 1241, + [1653] = 1244, + [1654] = 1254, + [1655] = 1204, + [1656] = 1262, + [1657] = 1273, + [1658] = 1274, + [1659] = 330, + [1660] = 1275, + [1661] = 1277, + [1662] = 1278, + [1663] = 1291, + [1664] = 1581, + [1665] = 1279, + [1666] = 1280, + [1667] = 1255, + [1668] = 1581, + [1669] = 339, + [1670] = 1584, + [1671] = 331, + [1672] = 332, + [1673] = 1584, + [1674] = 1581, + [1675] = 1584, + [1676] = 1581, + [1677] = 1581, + [1678] = 1584, + [1679] = 1584, + [1680] = 1581, + [1681] = 1581, + [1682] = 308, + [1683] = 307, + [1684] = 332, + [1685] = 326, + [1686] = 321, + [1687] = 328, + [1688] = 324, + [1689] = 329, + [1690] = 315, + [1691] = 330, + [1692] = 331, + [1693] = 352, + [1694] = 349, + [1695] = 1695, + [1696] = 1695, + [1697] = 1697, + [1698] = 1698, + [1699] = 1699, + [1700] = 1695, + [1701] = 310, + [1702] = 1702, + [1703] = 1702, + [1704] = 1702, + [1705] = 1705, + [1706] = 1705, + [1707] = 1705, + [1708] = 1705, + [1709] = 1702, + [1710] = 1705, + [1711] = 1705, + [1712] = 1705, + [1713] = 1702, + [1714] = 1705, + [1715] = 1702, + [1716] = 1705, + [1717] = 1705, + [1718] = 1705, + [1719] = 1702, + [1720] = 1702, + [1721] = 1702, + [1722] = 1702, + [1723] = 1702, + [1724] = 1705, + [1725] = 1702, + [1726] = 670, + [1727] = 1702, + [1728] = 1705, + [1729] = 1705, + [1730] = 683, + [1731] = 1705, + [1732] = 1702, + [1733] = 1705, + [1734] = 1702, + [1735] = 1702, + [1736] = 1705, + [1737] = 1702, + [1738] = 1702, + [1739] = 1702, + [1740] = 1705, + [1741] = 1702, + [1742] = 1702, + [1743] = 1702, + [1744] = 165, + [1745] = 1705, + [1746] = 1705, + [1747] = 1705, + [1748] = 1702, + [1749] = 1705, + [1750] = 1702, + [1751] = 1702, + [1752] = 1705, + [1753] = 1705, + [1754] = 1705, + [1755] = 1705, + [1756] = 1705, + [1757] = 1702, + [1758] = 1702, + [1759] = 1705, + [1760] = 1705, + [1761] = 1702, + [1762] = 1702, + [1763] = 1705, + [1764] = 1702, + [1765] = 1702, + [1766] = 1705, + [1767] = 1702, + [1768] = 1705, + [1769] = 1769, + [1770] = 1769, + [1771] = 1769, + [1772] = 1769, + [1773] = 1769, + [1774] = 1769, + [1775] = 1769, + [1776] = 1769, + [1777] = 1769, + [1778] = 1769, + [1779] = 1769, + [1780] = 1769, + [1781] = 283, + [1782] = 1769, + [1783] = 1769, + [1784] = 1769, + [1785] = 1769, + [1786] = 1769, + [1787] = 1787, + [1788] = 1788, + [1789] = 1769, + [1790] = 1769, + [1791] = 1791, + [1792] = 1769, + [1793] = 1769, + [1794] = 1769, + [1795] = 1769, + [1796] = 1769, + [1797] = 1769, + [1798] = 1769, + [1799] = 1769, + [1800] = 1769, + [1801] = 1769, + [1802] = 1769, + [1803] = 1769, + [1804] = 1769, + [1805] = 1769, + [1806] = 1806, + [1807] = 1807, + [1808] = 1808, + [1809] = 1807, + [1810] = 1807, + [1811] = 1806, + [1812] = 1812, + [1813] = 1813, + [1814] = 1814, + [1815] = 1806, + [1816] = 1816, + [1817] = 1813, + [1818] = 1818, + [1819] = 1819, + [1820] = 1807, + [1821] = 1806, + [1822] = 1806, + [1823] = 1813, + [1824] = 1807, + [1825] = 1813, + [1826] = 1808, + [1827] = 1806, + [1828] = 1807, + [1829] = 1807, + [1830] = 1806, + [1831] = 1808, + [1832] = 1813, + [1833] = 1813, + [1834] = 1807, + [1835] = 1806, + [1836] = 1806, + [1837] = 1807, + [1838] = 1813, + [1839] = 1806, + [1840] = 1807, + [1841] = 1806, + [1842] = 1807, + [1843] = 1813, + [1844] = 1806, + [1845] = 1813, + [1846] = 1813, + [1847] = 1808, + [1848] = 1813, + [1849] = 1813, + [1850] = 1813, + [1851] = 1806, + [1852] = 1807, + [1853] = 1807, + [1854] = 1806, + [1855] = 1813, + [1856] = 437, + [1857] = 1806, + [1858] = 1813, + [1859] = 1807, + [1860] = 1806, + [1861] = 1806, + [1862] = 1813, + [1863] = 1863, + [1864] = 1813, + [1865] = 1865, + [1866] = 1807, + [1867] = 1806, + [1868] = 1806, + [1869] = 1807, + [1870] = 1870, + [1871] = 1813, + [1872] = 1808, + [1873] = 1807, + [1874] = 1813, + [1875] = 1806, + [1876] = 1876, + [1877] = 1808, + [1878] = 1813, + [1879] = 1807, + [1880] = 1806, + [1881] = 1813, + [1882] = 1807, + [1883] = 1806, + [1884] = 1813, + [1885] = 1813, + [1886] = 1807, + [1887] = 1808, + [1888] = 1888, + [1889] = 1813, + [1890] = 1806, + [1891] = 1891, + [1892] = 1807, + [1893] = 1806, + [1894] = 1807, + [1895] = 1807, + [1896] = 1813, + [1897] = 1813, + [1898] = 1806, + [1899] = 1899, + [1900] = 1806, + [1901] = 1807, + [1902] = 1807, + [1903] = 1806, + [1904] = 1807, + [1905] = 1807, + [1906] = 1806, + [1907] = 1813, + [1908] = 1813, + [1909] = 1813, + [1910] = 1813, + [1911] = 1806, + [1912] = 1807, + [1913] = 1806, + [1914] = 1806, + [1915] = 1813, + [1916] = 1807, + [1917] = 1807, + [1918] = 1807, + [1919] = 1806, + [1920] = 1920, + [1921] = 1813, + [1922] = 1922, + [1923] = 1923, + [1924] = 1924, + [1925] = 1925, + [1926] = 1926, + [1927] = 1927, + [1928] = 1928, + [1929] = 1929, + [1930] = 1930, + [1931] = 1931, + [1932] = 1932, + [1933] = 1933, + [1934] = 1934, + [1935] = 1935, + [1936] = 1935, + [1937] = 1935, + [1938] = 1935, + [1939] = 1935, + [1940] = 1935, + [1941] = 1935, + [1942] = 1942, + [1943] = 1935, + [1944] = 1944, + [1945] = 1945, + [1946] = 1935, + [1947] = 1935, + [1948] = 1935, + [1949] = 1935, + [1950] = 1935, + [1951] = 1935, + [1952] = 1935, + [1953] = 1953, + [1954] = 1954, + [1955] = 1955, + [1956] = 1954, + [1957] = 1954, + [1958] = 331, + [1959] = 1959, + [1960] = 1960, + [1961] = 310, + [1962] = 283, + [1963] = 1963, + [1964] = 307, + [1965] = 349, + [1966] = 308, + [1967] = 321, + [1968] = 286, + [1969] = 328, + [1970] = 329, + [1971] = 1971, + [1972] = 1972, + [1973] = 330, + [1974] = 332, + [1975] = 324, + [1976] = 307, + [1977] = 349, + [1978] = 330, + [1979] = 328, + [1980] = 1980, + [1981] = 308, + [1982] = 352, + [1983] = 1983, + [1984] = 315, + [1985] = 329, + [1986] = 331, + [1987] = 310, + [1988] = 326, + [1989] = 321, + [1990] = 1990, + [1991] = 1991, + [1992] = 1992, + [1993] = 1990, + [1994] = 329, + [1995] = 1995, + [1996] = 1990, + [1997] = 1997, + [1998] = 1998, + [1999] = 1999, + [2000] = 328, + [2001] = 308, + [2002] = 332, + [2003] = 1991, + [2004] = 2004, + [2005] = 307, + [2006] = 330, + [2007] = 324, + [2008] = 2008, + [2009] = 1999, + [2010] = 315, + [2011] = 321, + [2012] = 1999, + [2013] = 1997, + [2014] = 1991, + [2015] = 1997, + [2016] = 331, + [2017] = 326, + [2018] = 2018, + [2019] = 2019, + [2020] = 328, + [2021] = 331, + [2022] = 330, + [2023] = 329, + [2024] = 2024, + [2025] = 2025, + [2026] = 2026, + [2027] = 2027, + [2028] = 2028, + [2029] = 2018, + [2030] = 2030, + [2031] = 283, + [2032] = 2032, + [2033] = 2033, + [2034] = 2027, + [2035] = 2024, + [2036] = 2025, + [2037] = 2037, + [2038] = 2026, + [2039] = 2026, + [2040] = 2040, + [2041] = 2040, + [2042] = 2042, + [2043] = 2019, + [2044] = 2033, + [2045] = 2032, + [2046] = 2030, + [2047] = 2025, + [2048] = 2024, + [2049] = 2027, + [2050] = 2019, + [2051] = 321, + [2052] = 308, + [2053] = 307, + [2054] = 332, + [2055] = 2028, + [2056] = 2033, + [2057] = 2042, + [2058] = 2040, + [2059] = 326, + [2060] = 2032, + [2061] = 2030, + [2062] = 2018, + [2063] = 2028, + [2064] = 324, + [2065] = 2065, + [2066] = 286, + [2067] = 315, + [2068] = 2042, + [2069] = 349, + [2070] = 310, + [2071] = 2071, + [2072] = 2072, + [2073] = 2073, + [2074] = 352, + [2075] = 2075, + [2076] = 321, + [2077] = 2077, + [2078] = 2078, + [2079] = 329, + [2080] = 328, + [2081] = 2081, + [2082] = 326, + [2083] = 2083, + [2084] = 332, + [2085] = 2085, + [2086] = 324, + [2087] = 2087, + [2088] = 2088, + [2089] = 331, + [2090] = 2090, + [2091] = 315, + [2092] = 2092, + [2093] = 2093, + [2094] = 2094, + [2095] = 2095, + [2096] = 330, + [2097] = 2097, + [2098] = 2098, + [2099] = 2099, + [2100] = 2100, + [2101] = 2101, + [2102] = 2102, + [2103] = 2103, + [2104] = 2104, + [2105] = 2105, + [2106] = 2106, + [2107] = 2107, + [2108] = 2108, + [2109] = 2109, + [2110] = 2110, + [2111] = 437, + [2112] = 2112, + [2113] = 2113, + [2114] = 2106, + [2115] = 2101, + [2116] = 2101, + [2117] = 2101, + [2118] = 2118, + [2119] = 2105, + [2120] = 2120, + [2121] = 2106, + [2122] = 2101, + [2123] = 2101, + [2124] = 2105, + [2125] = 2101, + [2126] = 2126, + [2127] = 2127, + [2128] = 2128, + [2129] = 2129, + [2130] = 2130, + [2131] = 2131, + [2132] = 2132, + [2133] = 2133, + [2134] = 2134, + [2135] = 2135, + [2136] = 2136, + [2137] = 2137, + [2138] = 2133, + [2139] = 2139, + [2140] = 2140, + [2141] = 2139, + [2142] = 2142, + [2143] = 2133, + [2144] = 2144, + [2145] = 2145, + [2146] = 2133, + [2147] = 2128, + [2148] = 2133, + [2149] = 2133, + [2150] = 2150, + [2151] = 2151, + [2152] = 2152, + [2153] = 2153, + [2154] = 2154, + [2155] = 2155, + [2156] = 2156, + [2157] = 2157, + [2158] = 2158, + [2159] = 2159, + [2160] = 2129, + [2161] = 2151, + [2162] = 2162, + [2163] = 2163, + [2164] = 2164, + [2165] = 2137, + [2166] = 2130, + [2167] = 2136, + [2168] = 2168, + [2169] = 2169, + [2170] = 2170, + [2171] = 2171, + [2172] = 2172, + [2173] = 2135, + [2174] = 2134, + [2175] = 2171, + [2176] = 2132, + [2177] = 2144, + [2178] = 2156, + [2179] = 2155, + [2180] = 2180, + [2181] = 2145, + [2182] = 2182, + [2183] = 2150, + [2184] = 2142, + [2185] = 2131, + [2186] = 2133, + [2187] = 2131, + [2188] = 2140, + [2189] = 2150, + [2190] = 2158, + [2191] = 2131, + [2192] = 2140, + [2193] = 2150, + [2194] = 2153, + [2195] = 2195, + [2196] = 2131, + [2197] = 2140, + [2198] = 2150, + [2199] = 2199, + [2200] = 2150, + [2201] = 2131, + [2202] = 2202, + [2203] = 2140, + [2204] = 2182, + [2205] = 2205, + [2206] = 2150, + [2207] = 2207, + [2208] = 2140, + [2209] = 2150, + [2210] = 2210, + [2211] = 2130, + [2212] = 2182, + [2213] = 2131, + [2214] = 2140, + [2215] = 2150, + [2216] = 2131, + [2217] = 2140, + [2218] = 2135, + [2219] = 2134, + [2220] = 2150, + [2221] = 2210, + [2222] = 2171, + [2223] = 2131, + [2224] = 2131, + [2225] = 2140, + [2226] = 2140, + [2227] = 2150, + [2228] = 2150, + [2229] = 2150, + [2230] = 2129, + [2231] = 2151, + [2232] = 2131, + [2233] = 2140, + [2234] = 2150, + [2235] = 2131, + [2236] = 2140, + [2237] = 2131, + [2238] = 2131, + [2239] = 2136, + [2240] = 2210, + [2241] = 2140, + [2242] = 2150, + [2243] = 2137, + [2244] = 2156, + [2245] = 2155, + [2246] = 2210, + [2247] = 2247, + [2248] = 2131, + [2249] = 2150, + [2250] = 2133, + [2251] = 2133, + [2252] = 2202, + [2253] = 2140, + [2254] = 2153, + [2255] = 2205, + [2256] = 2150, + [2257] = 2207, + [2258] = 2139, + [2259] = 2144, + [2260] = 2145, + [2261] = 2140, + [2262] = 2131, + [2263] = 2131, + [2264] = 2140, + [2265] = 2140, + [2266] = 2150, + [2267] = 2140, + [2268] = 2131, + [2269] = 2158, + [2270] = 2140, + [2271] = 2150, + [2272] = 2128, + [2273] = 2142, + [2274] = 2131, + [2275] = 2131, + [2276] = 2276, + [2277] = 2140, + [2278] = 2150, + [2279] = 2150, + [2280] = 2140, + [2281] = 2195, + [2282] = 2131, + [2283] = 2140, + [2284] = 2150, + [2285] = 2131, + [2286] = 2131, + [2287] = 2195, + [2288] = 2199, + [2289] = 2140, + [2290] = 2210, + [2291] = 2150, + [2292] = 2150, + [2293] = 2131, + [2294] = 2199, + [2295] = 2207, + [2296] = 2296, + [2297] = 2297, + [2298] = 2140, + [2299] = 2150, + [2300] = 2133, + [2301] = 2133, + [2302] = 2140, + [2303] = 2131, + [2304] = 2131, + [2305] = 2140, + [2306] = 2133, + [2307] = 2150, + [2308] = 2132, + [2309] = 2150, + [2310] = 2131, + [2311] = 2133, + [2312] = 2205, + [2313] = 2140, + [2314] = 2210, + [2315] = 2131, + [2316] = 2140, + [2317] = 2150, + [2318] = 2247, + [2319] = 2150, + [2320] = 2140, + [2321] = 2131, + [2322] = 2131, + [2323] = 2140, + [2324] = 2247, + [2325] = 2140, + [2326] = 2150, + [2327] = 2131, + [2328] = 2140, + [2329] = 2150, + [2330] = 2330, + [2331] = 2331, + [2332] = 2150, + [2333] = 2131, + [2334] = 2140, + [2335] = 2150, + [2336] = 2131, + [2337] = 2210, + [2338] = 2202, + [2339] = 2133, +}; + +static TSCharacterRange sym__comment_word_character_set_1[] = { + {0, 0x08}, {0x0b, 0x1f}, {'!', '!'}, {'#', '#'}, {'%', '%'}, {'*', ':'}, {'=', '='}, {'?', '_'}, + {'a', '{'}, {'}', 0x10ffff}, +}; + +static TSCharacterRange sym_word_character_set_1[] = { + {0, 0x08}, {0x0b, 0x1f}, {'!', '!'}, {'%', '%'}, {'*', ':'}, {'=', '='}, {'?', '_'}, {'a', '{'}, + {'}', 0x10ffff}, +}; + +static bool ts_lex(TSLexer *lexer, TSStateId state) { + START_LEXER(); + eof = lexer->eof(lexer); + switch (state) { + case 0: + if (eof) ADVANCE(255); + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '%', 374, + '&', 358, + '\'', 219, + '(', 271, + ')', 277, + '*', 369, + '+', 386, + '-', 384, + '/', 372, + '0', 473, + ':', 380, + ';', 530, + '<', 291, + '=', 418, + '>', 294, + '?', 422, + '@', 472, + '\\', 129, + '^', 354, + '_', 476, + '`', 431, + 'd', 526, + 'e', 523, + 'f', 521, + 'i', 525, + '{', 280, + '|', 273, + '}', 282, + '~', 388, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(252); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(499); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 1: + if (lookahead == '\n') SKIP(186); + END_STATE(); + case 2: + if (lookahead == '\n') SKIP(190); + END_STATE(); + case 3: + if (lookahead == '\n') SKIP(192); + END_STATE(); + case 4: + if (lookahead == '\n') SKIP(5); + END_STATE(); + case 5: + ADVANCE_MAP( + '\n', 278, + '!', 286, + '"', 395, + '#', 435, + '$', 393, + '&', 225, + '\'', 219, + '(', 271, + '<', 290, + '>', 295, + '\\', 137, + '`', 430, + '{', 280, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(5); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(479); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '{' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 6: + if (lookahead == '\n') SKIP(193); + END_STATE(); + case 7: + if (lookahead == '\n') SKIP(194); + END_STATE(); + case 8: + if (lookahead == '\n') SKIP(195); + END_STATE(); + case 9: + if (lookahead == '\n') SKIP(204); + END_STATE(); + case 10: + ADVANCE_MAP( + '\n', 310, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 13, + '_', 477, + '`', 430, + 'e', 439, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(10); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(480); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 11: + if (lookahead == '\n') ADVANCE(446); + END_STATE(); + case 12: + if (lookahead == '\n') ADVANCE(446); + if (lookahead == '\r') ADVANCE(11); + if (lookahead == ' ') ADVANCE(480); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(10); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 13: + if (lookahead == '\n') ADVANCE(446); + if (lookahead == '\r') ADVANCE(11); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(10); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 14: + if (lookahead == '\n') ADVANCE(470); + END_STATE(); + case 15: + if (lookahead == '\n') ADVANCE(470); + if (lookahead == '\r') ADVANCE(14); + END_STATE(); + case 16: + if (lookahead == '\n') ADVANCE(470); + if (lookahead == '\r') ADVANCE(14); + if (lookahead != 0 && + (lookahead < '\t' || '\r' < lookahead)) ADVANCE(528); + END_STATE(); + case 17: + if (lookahead == '\n') ADVANCE(448); + END_STATE(); + case 18: + if (lookahead == '\n') ADVANCE(448); + if (lookahead == '\r') ADVANCE(17); + if (lookahead == ' ') ADVANCE(481); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(94); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 19: + if (lookahead == '\n') ADVANCE(448); + if (lookahead == '\r') ADVANCE(17); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(94); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 20: + if (lookahead == '\n') ADVANCE(451); + END_STATE(); + case 21: + if (lookahead == '\n') ADVANCE(451); + if (lookahead == '\r') ADVANCE(20); + if (lookahead == ' ') ADVANCE(485); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(109); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 22: + if (lookahead == '\n') ADVANCE(451); + if (lookahead == '\r') ADVANCE(20); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(109); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 23: + if (lookahead == '\n') ADVANCE(449); + END_STATE(); + case 24: + if (lookahead == '\n') ADVANCE(449); + if (lookahead == '\r') ADVANCE(23); + if (lookahead == ' ') ADVANCE(484); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(107); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 25: + if (lookahead == '\n') ADVANCE(449); + if (lookahead == '\r') ADVANCE(23); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(107); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 26: + if (lookahead == '\n') ADVANCE(453); + END_STATE(); + case 27: + if (lookahead == '\n') ADVANCE(453); + if (lookahead == '\r') ADVANCE(26); + if (lookahead == ' ') ADVANCE(488); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(113); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 28: + if (lookahead == '\n') ADVANCE(453); + if (lookahead == '\r') ADVANCE(26); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(113); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 29: + if (lookahead == '\n') ADVANCE(455); + END_STATE(); + case 30: + if (lookahead == '\n') ADVANCE(455); + if (lookahead == '\r') ADVANCE(29); + if (lookahead == ' ') ADVANCE(491); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(117); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 31: + if (lookahead == '\n') ADVANCE(455); + if (lookahead == '\r') ADVANCE(29); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(117); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 32: + if (lookahead == '\n') SKIP(105); + END_STATE(); + case 33: + if (lookahead == '\n') SKIP(106); + END_STATE(); + case 34: + if (lookahead == '\n') ADVANCE(457); + END_STATE(); + case 35: + if (lookahead == '\n') ADVANCE(457); + if (lookahead == '\r') ADVANCE(34); + if (lookahead == ' ') ADVANCE(493); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(120); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 36: + if (lookahead == '\n') ADVANCE(457); + if (lookahead == '\r') ADVANCE(34); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(120); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 37: + if (lookahead == '\n') ADVANCE(459); + END_STATE(); + case 38: + if (lookahead == '\n') ADVANCE(459); + if (lookahead == '\r') ADVANCE(37); + if (lookahead == ' ') ADVANCE(495); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(123); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 39: + if (lookahead == '\n') ADVANCE(459); + if (lookahead == '\r') ADVANCE(37); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(123); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 40: + if (lookahead == '\n') ADVANCE(465); + END_STATE(); + case 41: + if (lookahead == '\n') ADVANCE(465); + if (lookahead == '\r') ADVANCE(40); + if (lookahead == ' ') ADVANCE(500); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(188); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 42: + if (lookahead == '\n') ADVANCE(465); + if (lookahead == '\r') ADVANCE(40); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(188); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 43: + if (lookahead == '\n') ADVANCE(466); + END_STATE(); + case 44: + if (lookahead == '\n') ADVANCE(466); + if (lookahead == '\r') ADVANCE(43); + if (lookahead == ' ') ADVANCE(501); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(189); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 45: + if (lookahead == '\n') ADVANCE(466); + if (lookahead == '\r') ADVANCE(43); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(189); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 46: + if (lookahead == '\n') SKIP(110); + END_STATE(); + case 47: + if (lookahead == '\n') SKIP(205); + END_STATE(); + case 48: + ADVANCE_MAP( + '\n', 311, + '!', 285, + '#', 410, + '$', 392, + '&', 359, + ')', 277, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 50, + '_', 478, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(48); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 49: + if (lookahead == '\n') ADVANCE(447); + END_STATE(); + case 50: + if (lookahead == '\n') ADVANCE(447); + if (lookahead == '\r') ADVANCE(49); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(48); + END_STATE(); + case 51: + if (lookahead == '\n') SKIP(196); + END_STATE(); + case 52: + if (lookahead == '\n') ADVANCE(450); + END_STATE(); + case 53: + if (lookahead == '\n') ADVANCE(450); + if (lookahead == '\r') ADVANCE(52); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(108); + END_STATE(); + case 54: + if (lookahead == '\n') ADVANCE(452); + END_STATE(); + case 55: + if (lookahead == '\n') ADVANCE(452); + if (lookahead == '\r') ADVANCE(54); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(112); + END_STATE(); + case 56: + if (lookahead == '\n') ADVANCE(454); + END_STATE(); + case 57: + if (lookahead == '\n') ADVANCE(454); + if (lookahead == '\r') ADVANCE(56); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(116); + END_STATE(); + case 58: + if (lookahead == '\n') SKIP(191); + END_STATE(); + case 59: + if (lookahead == '\n') ADVANCE(464); + END_STATE(); + case 60: + if (lookahead == '\n') ADVANCE(464); + if (lookahead == '\r') ADVANCE(59); + if (lookahead == ' ') ADVANCE(502); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(187); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 61: + if (lookahead == '\n') ADVANCE(464); + if (lookahead == '\r') ADVANCE(59); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(187); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 62: + if (lookahead == '\n') ADVANCE(456); + END_STATE(); + case 63: + if (lookahead == '\n') ADVANCE(456); + if (lookahead == '\r') ADVANCE(62); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(119); + END_STATE(); + case 64: + if (lookahead == '\n') ADVANCE(467); + END_STATE(); + case 65: + if (lookahead == '\n') ADVANCE(467); + if (lookahead == '\r') ADVANCE(64); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(199); + END_STATE(); + case 66: + if (lookahead == '\n') SKIP(198); + END_STATE(); + case 67: + if (lookahead == '\n') ADVANCE(312); + if (lookahead == '#') ADVANCE(435); + if (lookahead == '&') ADVANCE(356); + if (lookahead == ';') ADVANCE(530); + if (lookahead == '\\') SKIP(183); + if (lookahead == '`') ADVANCE(226); + if (lookahead == 'i') ADVANCE(234); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(67); + END_STATE(); + case 68: + if (lookahead == '\n') SKIP(115); + END_STATE(); + case 69: + if (lookahead == '\n') ADVANCE(462); + END_STATE(); + case 70: + if (lookahead == '\n') ADVANCE(462); + if (lookahead == '\r') ADVANCE(69); + if (lookahead == ' ') ADVANCE(497); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(126); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 71: + if (lookahead == '\n') ADVANCE(462); + if (lookahead == '\r') ADVANCE(69); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(126); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 72: + if (lookahead == '\n') SKIP(207); + END_STATE(); + case 73: + if (lookahead == '\n') SKIP(118); + END_STATE(); + case 74: + if (lookahead == '\n') ADVANCE(463); + END_STATE(); + case 75: + if (lookahead == '\n') ADVANCE(463); + if (lookahead == '\r') ADVANCE(74); + if (lookahead == ' ') ADVANCE(498); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(127); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 76: + if (lookahead == '\n') ADVANCE(463); + if (lookahead == '\r') ADVANCE(74); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(127); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 77: + if (lookahead == '\n') SKIP(217); + END_STATE(); + case 78: + if (lookahead == '\n') SKIP(212); + END_STATE(); + case 79: + if (lookahead == '\n') ADVANCE(460); + END_STATE(); + case 80: + if (lookahead == '\n') ADVANCE(460); + if (lookahead == '\r') ADVANCE(79); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(124); + END_STATE(); + case 81: + if (lookahead == '\n') SKIP(209); + END_STATE(); + case 82: + if (lookahead == '\n') SKIP(216); + END_STATE(); + case 83: + if (lookahead == '\n') ADVANCE(400); + if (lookahead == '\r') ADVANCE(396); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') ADVANCE(400); + if (lookahead != 0) ADVANCE(403); + END_STATE(); + case 84: + if (lookahead == '\n') ADVANCE(468); + END_STATE(); + case 85: + if (lookahead == '\n') ADVANCE(468); + if (lookahead == '\r') ADVANCE(84); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(200); + END_STATE(); + case 86: + if (lookahead == '\n') SKIP(202); + END_STATE(); + case 87: + if (lookahead == '\n') SKIP(210); + END_STATE(); + case 88: + if (lookahead == '\n') ADVANCE(401); + if (lookahead == '\r') ADVANCE(398); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') ADVANCE(401); + if (lookahead != 0) ADVANCE(403); + END_STATE(); + case 89: + if (lookahead == '\n') ADVANCE(469); + END_STATE(); + case 90: + if (lookahead == '\n') ADVANCE(469); + if (lookahead == '\r') ADVANCE(89); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(203); + END_STATE(); + case 91: + if (lookahead == '\n') SKIP(67); + END_STATE(); + case 92: + if (lookahead == '\n') SKIP(208); + END_STATE(); + case 93: + if (lookahead == '\n') SKIP(211); + END_STATE(); + case 94: + ADVANCE_MAP( + '\n', 313, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 19, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(94); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(481); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 95: + if (lookahead == '\n') SKIP(114); + END_STATE(); + case 96: + if (lookahead == '\n') SKIP(111); + END_STATE(); + case 97: + if (lookahead == '\n') ADVANCE(461); + END_STATE(); + case 98: + if (lookahead == '\n') ADVANCE(461); + if (lookahead == '\r') ADVANCE(97); + if (lookahead == ' ') ADVANCE(496); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(125); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 99: + if (lookahead == '\n') ADVANCE(461); + if (lookahead == '\r') ADVANCE(97); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(125); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 100: + if (lookahead == '\n') SKIP(206); + END_STATE(); + case 101: + if (lookahead == '\n') ADVANCE(458); + END_STATE(); + case 102: + if (lookahead == '\n') ADVANCE(458); + if (lookahead == '\r') ADVANCE(101); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(122); + END_STATE(); + case 103: + if (lookahead == '\n') SKIP(121); + END_STATE(); + case 104: + if (lookahead == '\n') SKIP(213); + END_STATE(); + case 105: + ADVANCE_MAP( + '\n', 314, + '"', 395, + '#', 435, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + ')', 277, + ';', 530, + '<', 292, + '>', 295, + '\\', 147, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(105); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(482); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 106: + ADVANCE_MAP( + '\n', 315, + '"', 395, + '#', 435, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + ';', 530, + '<', 292, + '>', 295, + '\\', 149, + '`', 430, + 'e', 527, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(106); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(483); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead)) ADVANCE(528); + END_STATE(); + case 107: + ADVANCE_MAP( + '\n', 316, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 25, + '_', 477, + '`', 430, + 'e', 439, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(107); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(484); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 108: + ADVANCE_MAP( + '\n', 317, + '!', 285, + '#', 410, + '$', 392, + '&', 359, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 53, + '_', 478, + '`', 430, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(108); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 109: + ADVANCE_MAP( + '\n', 318, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + ')', 277, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 22, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(109); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(485); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 110: + ADVANCE_MAP( + '\n', 319, + '"', 395, + '#', 435, + '$', 393, + '&', 218, + '\'', 219, + '<', 290, + '>', 295, + '\\', 151, + '`', 430, + '|', 274, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(110); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(486); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 111: + ADVANCE_MAP( + '\n', 320, + '"', 395, + '#', 435, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + ';', 530, + '<', 292, + '>', 295, + '\\', 157, + '`', 431, + 'e', 527, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(111); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(487); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead)) ADVANCE(528); + END_STATE(); + case 112: + ADVANCE_MAP( + '\n', 321, + '!', 285, + '#', 410, + '$', 392, + '&', 359, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 55, + '_', 478, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(112); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 113: + ADVANCE_MAP( + '\n', 322, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + ')', 277, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 28, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(113); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(488); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 114: + ADVANCE_MAP( + '\n', 323, + '"', 395, + '#', 435, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + ')', 277, + ';', 530, + '<', 292, + '>', 295, + '\\', 153, + '`', 431, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(114); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(489); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 115: + ADVANCE_MAP( + '\n', 324, + '"', 395, + '#', 435, + '$', 393, + '&', 356, + '\'', 219, + '(', 271, + ';', 530, + '\\', 165, + '`', 430, + 'e', 527, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(115); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(490); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '>' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 116: + ADVANCE_MAP( + '\n', 325, + '!', 285, + '#', 410, + '$', 392, + '&', 359, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 57, + '_', 478, + 'e', 444, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(116); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 117: + ADVANCE_MAP( + '\n', 326, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 31, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(117); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(491); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 118: + ADVANCE_MAP( + '\n', 327, + '"', 395, + '#', 435, + '$', 393, + '&', 356, + '\'', 219, + ';', 530, + '\\', 169, + '`', 430, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(118); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(492); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '>' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 119: + ADVANCE_MAP( + '\n', 328, + '!', 285, + '#', 410, + '$', 392, + '&', 218, + '*', 368, + '-', 365, + '0', 475, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 63, + '_', 478, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(119); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 120: + ADVANCE_MAP( + '\n', 329, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 218, + '\'', 219, + '(', 271, + '*', 371, + '-', 367, + '0', 474, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 36, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(120); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(493); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 121: + ADVANCE_MAP( + '\n', 330, + '"', 395, + '#', 435, + '$', 393, + '&', 356, + '\'', 219, + ';', 530, + '\\', 176, + '`', 431, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(121); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(494); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '>' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 122: + ADVANCE_MAP( + '\n', 331, + '!', 285, + '#', 410, + '$', 392, + '&', 218, + '*', 368, + '-', 365, + '0', 475, + '<', 290, + '>', 295, + '?', 377, + '@', 471, + '\\', 102, + '_', 478, + '|', 237, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(122); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 123: + ADVANCE_MAP( + '\n', 332, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 218, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 39, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(123); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(495); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 124: + ADVANCE_MAP( + '\n', 333, + '!', 285, + '#', 410, + '$', 392, + '&', 356, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '?', 377, + '@', 471, + '\\', 80, + '_', 478, + 'i', 443, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(124); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 125: + ADVANCE_MAP( + '\n', 334, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 218, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + '<', 290, + '>', 295, + '?', 378, + '@', 472, + '\\', 99, + '_', 477, + '`', 430, + '|', 237, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(125); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(496); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 126: + ADVANCE_MAP( + '\n', 335, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 356, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '?', 378, + '@', 472, + '\\', 71, + '_', 477, + '`', 430, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(126); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(497); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<' && + (lookahead < '>' || 'Z' < lookahead) && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 127: + ADVANCE_MAP( + '\n', 336, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 76, + '_', 477, + '`', 430, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(127); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(498); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<' && + (lookahead < '>' || 'Z' < lookahead) && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 128: + if (lookahead == '\r') SKIP(1); + if (lookahead == ' ') ADVANCE(499); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(186); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 129: + if (lookahead == '\r') SKIP(1); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(186); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 130: + if (lookahead == '\r') ADVANCE(404); + if (lookahead != 0) ADVANCE(403); + END_STATE(); + case 131: + if (lookahead == '\r') SKIP(2); + if (lookahead == ' ') ADVANCE(503); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(190); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 132: + if (lookahead == '\r') SKIP(2); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(190); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 133: + if (lookahead == '\r') SKIP(3); + if (lookahead == ' ') ADVANCE(504); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(192); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 134: + if (lookahead == '\r') SKIP(3); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(192); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 135: + if (lookahead == '\r') ADVANCE(399); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') ADVANCE(402); + if (lookahead != 0) ADVANCE(403); + END_STATE(); + case 136: + if (lookahead == '\r') SKIP(4); + if (lookahead == ' ') ADVANCE(479); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(5); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 137: + if (lookahead == '\r') SKIP(4); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(5); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 138: + if (lookahead == '\r') SKIP(6); + if (lookahead == ' ') ADVANCE(505); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(193); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 139: + if (lookahead == '\r') SKIP(6); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(193); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 140: + if (lookahead == '\r') SKIP(7); + if (lookahead == ' ') ADVANCE(506); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(194); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 141: + if (lookahead == '\r') SKIP(7); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(194); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 142: + if (lookahead == '\r') SKIP(8); + if (lookahead == ' ') ADVANCE(507); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(195); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 143: + if (lookahead == '\r') SKIP(8); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(195); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 144: + if (lookahead == '\r') SKIP(9); + if (lookahead == ' ') ADVANCE(509); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(204); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 145: + if (lookahead == '\r') SKIP(9); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(204); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 146: + if (lookahead == '\r') SKIP(32); + if (lookahead == ' ') ADVANCE(482); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(105); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 147: + if (lookahead == '\r') SKIP(32); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(105); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 148: + if (lookahead == '\r') SKIP(33); + if (lookahead == ' ') ADVANCE(483); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(106); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 149: + if (lookahead == '\r') SKIP(33); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(106); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 150: + if (lookahead == '\r') SKIP(46); + if (lookahead == ' ') ADVANCE(486); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(110); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 151: + if (lookahead == '\r') SKIP(46); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(110); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 152: + if (lookahead == '\r') SKIP(95); + if (lookahead == ' ') ADVANCE(489); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(114); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 153: + if (lookahead == '\r') SKIP(95); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(114); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 154: + if (lookahead == '\r') SKIP(47); + if (lookahead == ' ') ADVANCE(510); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(205); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 155: + if (lookahead == '\r') SKIP(47); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(205); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 156: + if (lookahead == '\r') SKIP(96); + if (lookahead == ' ') ADVANCE(487); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(111); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 157: + if (lookahead == '\r') SKIP(96); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(111); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 158: + if (lookahead == '\r') SKIP(51); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(196); + END_STATE(); + case 159: + if (lookahead == '\r') SKIP(58); + if (lookahead == ' ') ADVANCE(508); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(191); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 160: + if (lookahead == '\r') SKIP(58); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(191); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 161: + if (lookahead == '\r') SKIP(100); + if (lookahead == ' ') ADVANCE(511); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(206); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 162: + if (lookahead == '\r') SKIP(100); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(206); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 163: + if (lookahead == '\r') SKIP(66); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(198); + END_STATE(); + case 164: + if (lookahead == '\r') SKIP(68); + if (lookahead == ' ') ADVANCE(490); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(115); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 165: + if (lookahead == '\r') SKIP(68); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(115); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 166: + if (lookahead == '\r') SKIP(72); + if (lookahead == ' ') ADVANCE(512); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(207); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 167: + if (lookahead == '\r') SKIP(72); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(207); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 168: + if (lookahead == '\r') SKIP(73); + if (lookahead == ' ') ADVANCE(492); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(118); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 169: + if (lookahead == '\r') SKIP(73); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(118); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 170: + if (lookahead == '\r') SKIP(77); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(217); + END_STATE(); + case 171: + if (lookahead == '\r') SKIP(78); + if (lookahead == ' ') ADVANCE(513); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(212); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 172: + if (lookahead == '\r') SKIP(78); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(212); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 173: + if (lookahead == '\r') SKIP(104); + if (lookahead == ' ') ADVANCE(514); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(213); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 174: + if (lookahead == '\r') SKIP(104); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(213); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 175: + if (lookahead == '\r') SKIP(103); + if (lookahead == ' ') ADVANCE(494); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(121); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 176: + if (lookahead == '\r') SKIP(103); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(121); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 177: + if (lookahead == '\r') SKIP(81); + if (lookahead == ' ') ADVANCE(515); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(209); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 178: + if (lookahead == '\r') SKIP(81); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(209); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 179: + if (lookahead == '\r') SKIP(82); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(216); + END_STATE(); + case 180: + if (lookahead == '\r') SKIP(86); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(202); + END_STATE(); + case 181: + if (lookahead == '\r') SKIP(87); + if (lookahead == ' ') ADVANCE(516); + if (('\t' <= lookahead && lookahead <= '\f')) SKIP(210); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 182: + if (lookahead == '\r') SKIP(87); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(210); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 183: + if (lookahead == '\r') SKIP(91); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(67); + END_STATE(); + case 184: + if (lookahead == '\r') SKIP(92); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(208); + END_STATE(); + case 185: + if (lookahead == '\r') SKIP(93); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(211); + END_STATE(); + case 186: + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '%', 374, + '&', 358, + '\'', 219, + '(', 271, + ')', 277, + '*', 369, + '+', 386, + '-', 384, + '/', 372, + '0', 473, + ':', 381, + ';', 530, + '<', 291, + '=', 289, + '>', 294, + '?', 378, + '@', 472, + '\\', 129, + '^', 354, + '_', 476, + '`', 431, + 'd', 526, + 'e', 523, + 'f', 521, + 'i', 525, + '{', 280, + '|', 273, + '}', 282, + '~', 388, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(186); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(499); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 187: + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 225, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + '<', 290, + '>', 295, + '?', 378, + '@', 472, + '\\', 61, + '_', 477, + '`', 430, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(187); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(502); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 188: + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 218, + '\'', 219, + '(', 271, + '*', 371, + '-', 367, + '0', 474, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 42, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(188); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(500); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 189: + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 218, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 45, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(189); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(501); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 190: + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 435, + '$', 393, + '&', 225, + '\'', 219, + '(', 271, + ')', 277, + ';', 223, + '<', 290, + '>', 295, + '\\', 132, + '`', 430, + '{', 280, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(190); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(503); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + lookahead != '{' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 191: + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 435, + '$', 393, + '&', 225, + '\'', 219, + '(', 271, + ';', 223, + '<', 290, + '>', 295, + '\\', 160, + '`', 430, + 'e', 527, + '{', 280, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(191); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(508); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != '{' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 192: + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 435, + '$', 393, + '&', 225, + '\'', 219, + '(', 271, + '<', 290, + '>', 295, + '\\', 134, + '`', 430, + 'e', 524, + 'f', 521, + '{', 280, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(192); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(504); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '{' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 193: + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 435, + '$', 393, + '&', 225, + '\'', 219, + '(', 271, + '<', 290, + '>', 295, + '\\', 139, + '`', 430, + 'd', 526, + '{', 280, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(193); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(505); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '{' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 194: + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 435, + '$', 393, + '&', 225, + '\'', 219, + '(', 271, + '<', 290, + '>', 295, + '\\', 141, + '`', 430, + 'f', 521, + '{', 280, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(194); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(506); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '{' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 195: + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 435, + '$', 393, + '&', 225, + '\'', 219, + '(', 271, + '<', 290, + '>', 295, + '\\', 143, + '`', 430, + '{', 280, + '}', 282, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(195); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(507); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + (lookahead < '{' || '}' < lookahead)) ADVANCE(528); + END_STATE(); + case 196: + ADVANCE_MAP( + '!', 224, + '#', 435, + '%', 376, + '&', 357, + ')', 277, + '*', 370, + '+', 364, + '-', 366, + '/', 373, + '<', 293, + '=', 288, + '>', 296, + '?', 377, + ); + if (lookahead == '\\') SKIP(158); + if (lookahead == '^') ADVANCE(355); + if (lookahead == '`') ADVANCE(226); + if (lookahead == '|') ADVANCE(275); + if (lookahead == '}') ADVANCE(281); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(196); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('_' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 197: + ADVANCE_MAP( + '!', 285, + '"', 395, + '#', 410, + '$', 392, + '*', 368, + '-', 365, + '0', 475, + '?', 377, + '@', 471, + '\\', 83, + '_', 478, + ); + if (lookahead == '\n' || + lookahead == '\r') SKIP(197); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') ADVANCE(400); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + if (lookahead != 0 && + (lookahead < '_' || 'z' < lookahead)) ADVANCE(403); + END_STATE(); + case 198: + ADVANCE_MAP( + '!', 285, + '"', 395, + '#', 435, + '$', 394, + '&', 218, + '(', 271, + ')', 221, + '+', 387, + '-', 385, + '<', 292, + '=', 287, + '>', 295, + ); + if (lookahead == '\\') SKIP(163); + if (lookahead == '`') ADVANCE(430); + if (lookahead == '|') ADVANCE(276); + if (lookahead == '~') ADVANCE(388); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(198); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(409); + if (('A' <= lookahead && lookahead <= 'Z') || + ('_' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 199: + ADVANCE_MAP( + '!', 285, + '#', 410, + '$', 392, + '&', 218, + '*', 368, + '-', 365, + '0', 475, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 65, + '_', 478, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(199); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 200: + ADVANCE_MAP( + '!', 285, + '#', 410, + '$', 392, + ')', 277, + '*', 368, + '-', 365, + '0', 475, + '?', 377, + '@', 471, + '\\', 85, + '_', 478, + '|', 272, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(200); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 201: + ADVANCE_MAP( + '!', 285, + '#', 410, + '$', 392, + '*', 368, + '-', 365, + '0', 475, + '?', 377, + '@', 471, + '\\', 88, + '_', 478, + ); + if (lookahead == '\n' || + lookahead == '\r') SKIP(201); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') ADVANCE(401); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + if (lookahead != 0 && + (lookahead < ' ' || '$' < lookahead) && + (lookahead < '_' || 'z' < lookahead)) ADVANCE(403); + END_STATE(); + case 202: + ADVANCE_MAP( + '!', 285, + '#', 410, + '$', 392, + '*', 368, + '-', 365, + '0', 475, + '?', 377, + '@', 471, + ); + if (lookahead == '\\') SKIP(180); + if (lookahead == '_') ADVANCE(478); + if (lookahead == '}') ADVANCE(281); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(202); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 203: + ADVANCE_MAP( + '!', 285, + '#', 410, + '$', 392, + '*', 368, + '-', 365, + '0', 475, + '?', 377, + '@', 471, + '\\', 90, + '_', 478, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(203); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 204: + ADVANCE_MAP( + '"', 395, + '#', 435, + '$', 393, + '&', 225, + '\'', 219, + '(', 271, + '<', 290, + '>', 295, + '\\', 145, + '`', 430, + '{', 280, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(204); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(509); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '{' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 205: + ADVANCE_MAP( + '"', 395, + '#', 435, + '$', 393, + '&', 218, + '\'', 219, + '(', 271, + '<', 292, + '>', 295, + '\\', 155, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(205); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(510); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 206: + ADVANCE_MAP( + '"', 395, + '#', 435, + '$', 393, + '&', 218, + '\'', 219, + '(', 271, + '<', 292, + '>', 295, + '\\', 162, + '`', 431, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(206); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(511); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 207: + ADVANCE_MAP( + '"', 395, + '#', 435, + '$', 393, + '\'', 219, + '(', 271, + '\\', 167, + '`', 430, + 'e', 527, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(207); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(512); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '>' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 208: + if (lookahead == '"') ADVANCE(395); + if (lookahead == '#') ADVANCE(435); + if (lookahead == '$') ADVANCE(220); + if (lookahead == ')') ADVANCE(277); + if (lookahead == '\\') SKIP(184); + if (lookahead == '`') ADVANCE(430); + if (lookahead == '|') ADVANCE(272); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(208); + END_STATE(); + case 209: + if (lookahead == '"') ADVANCE(395); + if (lookahead == '#') ADVANCE(435); + if (lookahead == '$') ADVANCE(394); + if (lookahead == '\'') ADVANCE(219); + if (lookahead == '\\') ADVANCE(178); + if (lookahead == '`') ADVANCE(430); + if (lookahead == '}') ADVANCE(282); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(209); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(515); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '>' && + lookahead != '|' && + lookahead != '}') ADVANCE(528); + END_STATE(); + case 210: + if (lookahead == '"') ADVANCE(395); + if (lookahead == '#') ADVANCE(435); + if (lookahead == '$') ADVANCE(394); + if (lookahead == '\'') ADVANCE(219); + if (lookahead == '\\') ADVANCE(182); + if (lookahead == '`') ADVANCE(430); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(210); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(516); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '>' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 211: + if (lookahead == '"') ADVANCE(395); + if (lookahead == '#') ADVANCE(435); + if (lookahead == '\'') ADVANCE(219); + if (lookahead == ')') ADVANCE(277); + if (lookahead == '\\') SKIP(185); + if (lookahead == '}') ADVANCE(281); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(427); + END_STATE(); + case 212: + if (lookahead == '"') ADVANCE(395); + if (lookahead == '#') ADVANCE(436); + if (lookahead == '$') ADVANCE(393); + if (lookahead == '\'') ADVANCE(219); + if (lookahead == '\\') ADVANCE(172); + if (lookahead == '`') ADVANCE(431); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(212); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(513); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '>' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 213: + if (lookahead == '"') ADVANCE(395); + if (lookahead == '#') ADVANCE(436); + if (lookahead == '$') ADVANCE(393); + if (lookahead == '\'') ADVANCE(219); + if (lookahead == '\\') ADVANCE(174); + if (lookahead == '`') ADVANCE(430); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(213); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(514); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '&' || ')' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '>' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 214: + if (lookahead == '"') ADVANCE(395); + if (lookahead == '#') ADVANCE(405); + if (lookahead == '$') ADVANCE(393); + if (lookahead == '\\') ADVANCE(135); + if (lookahead == '`') ADVANCE(430); + if (lookahead == '\n' || + lookahead == '\r') SKIP(214); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') ADVANCE(402); + if (lookahead != 0) ADVANCE(403); + END_STATE(); + case 215: + if (lookahead == '#') ADVANCE(410); + if (lookahead == '%') ADVANCE(375); + if (lookahead == '+') ADVANCE(424); + if (lookahead == '-') ADVANCE(414); + if (lookahead == ':') ADVANCE(222); + if (lookahead == '=') ADVANCE(417); + if (lookahead == '?') ADVANCE(421); + if (lookahead == '\\') SKIP(179); + if (lookahead == '}') ADVANCE(281); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(216); + END_STATE(); + case 216: + if (lookahead == '#') ADVANCE(410); + if (lookahead == '%') ADVANCE(375); + if (lookahead == '\\') SKIP(179); + if (lookahead == '}') ADVANCE(281); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(216); + END_STATE(); + case 217: + if (lookahead == '#') ADVANCE(435); + if (lookahead == '&') ADVANCE(218); + if (lookahead == ')') ADVANCE(277); + if (lookahead == '<') ADVANCE(292); + if (lookahead == '>') ADVANCE(295); + if (lookahead == '\\') SKIP(170); + if (lookahead == '`') ADVANCE(226); + if (lookahead == '|') ADVANCE(276); + if (lookahead == '}') ADVANCE(281); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(217); + END_STATE(); + case 218: + if (lookahead == '&') ADVANCE(283); + if (lookahead == '>') ADVANCE(299); + END_STATE(); + case 219: + if (lookahead == '\'') ADVANCE(406); + if (lookahead != 0) ADVANCE(219); + END_STATE(); + case 220: + if (lookahead == '(') ADVANCE(428); + if (lookahead == '{') ADVANCE(412); + END_STATE(); + case 221: + if (lookahead == ')') ADVANCE(339); + END_STATE(); + case 222: + if (lookahead == '+') ADVANCE(423); + if (lookahead == '-') ADVANCE(413); + if (lookahead == '=') ADVANCE(415); + if (lookahead == '?') ADVANCE(419); + END_STATE(); + case 223: + if (lookahead == ';') ADVANCE(279); + END_STATE(); + case 224: + if (lookahead == '=') ADVANCE(361); + END_STATE(); + case 225: + if (lookahead == '>') ADVANCE(299); + END_STATE(); + case 226: + if (lookahead == '`') ADVANCE(391); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(226); + END_STATE(); + case 227: + if (lookahead == 'a') ADVANCE(228); + END_STATE(); + case 228: + if (lookahead == 'c') ADVANCE(267); + END_STATE(); + case 229: + if (lookahead == 'e') ADVANCE(265); + END_STATE(); + case 230: + if (lookahead == 'f') ADVANCE(263); + END_STATE(); + case 231: + if (lookahead == 'i') ADVANCE(261); + END_STATE(); + case 232: + if (lookahead == 'i') ADVANCE(230); + if (lookahead == 's') ADVANCE(229); + END_STATE(); + case 233: + if (lookahead == 'l') ADVANCE(232); + if (lookahead == 's') ADVANCE(227); + END_STATE(); + case 234: + if (lookahead == 'n') ADVANCE(256); + END_STATE(); + case 235: + if (lookahead == 'o') ADVANCE(259); + END_STATE(); + case 236: + if (lookahead == 's') ADVANCE(227); + END_STATE(); + case 237: + if (lookahead == '|') ADVANCE(284); + END_STATE(); + case 238: + if (lookahead != 0 && + (lookahead < '\t' || '\r' < lookahead)) ADVANCE(528); + END_STATE(); + case 239: + if (eof) ADVANCE(255); + if (lookahead == '\n') SKIP(254); + END_STATE(); + case 240: + if (eof) ADVANCE(255); + if (lookahead == '\n') SKIP(241); + END_STATE(); + case 241: + if (eof) ADVANCE(255); + if (lookahead == '\n') ADVANCE(312); + if (lookahead == '#') ADVANCE(435); + if (lookahead == '&') ADVANCE(359); + if (lookahead == ')') ADVANCE(277); + if (lookahead == ';') ADVANCE(530); + if (lookahead == '<') ADVANCE(292); + if (lookahead == '>') ADVANCE(295); + if (lookahead == '\\') SKIP(250); + if (lookahead == '`') ADVANCE(431); + if (lookahead == 'e') ADVANCE(236); + if (lookahead == '|') ADVANCE(276); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(241); + END_STATE(); + case 242: + if (eof) ADVANCE(255); + if (lookahead == '\n') ADVANCE(312); + if (lookahead == '#') ADVANCE(435); + if (lookahead == '&') ADVANCE(359); + if (lookahead == ')') ADVANCE(277); + if (lookahead == ';') ADVANCE(530); + if (lookahead == '<') ADVANCE(292); + if (lookahead == '>') ADVANCE(295); + if (lookahead == '\\') SKIP(251); + if (lookahead == '`') ADVANCE(430); + if (lookahead == '|') ADVANCE(276); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(242); + END_STATE(); + case 243: + if (eof) ADVANCE(255); + if (lookahead == '\n') SKIP(242); + END_STATE(); + case 244: + if (eof) ADVANCE(255); + ADVANCE_MAP( + '\n', 313, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 19, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(244); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(481); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 245: + if (eof) ADVANCE(255); + ADVANCE_MAP( + '\n', 314, + '"', 395, + '#', 435, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + ')', 277, + ';', 530, + '<', 292, + '>', 295, + '\\', 147, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(245); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(482); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 246: + if (eof) ADVANCE(255); + ADVANCE_MAP( + '\n', 321, + '!', 285, + '#', 410, + '$', 392, + '&', 359, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 55, + '_', 478, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(246); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 247: + if (eof) ADVANCE(255); + ADVANCE_MAP( + '\n', 323, + '"', 395, + '#', 435, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + ')', 277, + ';', 530, + '<', 292, + '>', 295, + '\\', 153, + '`', 431, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(247); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(489); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 248: + if (eof) ADVANCE(255); + ADVANCE_MAP( + '\n', 326, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 31, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(248); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(491); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 249: + if (eof) ADVANCE(255); + if (lookahead == '\r') SKIP(239); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(254); + END_STATE(); + case 250: + if (eof) ADVANCE(255); + if (lookahead == '\r') SKIP(240); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(241); + END_STATE(); + case 251: + if (eof) ADVANCE(255); + if (lookahead == '\r') SKIP(243); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(242); + END_STATE(); + case 252: + if (eof) ADVANCE(255); + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '%', 374, + '&', 358, + '\'', 219, + '(', 271, + ')', 277, + '*', 369, + '+', 386, + '-', 384, + '/', 372, + '0', 473, + ':', 381, + ';', 530, + '<', 291, + '=', 289, + '>', 294, + '?', 378, + '@', 472, + '\\', 129, + '^', 354, + '_', 476, + '`', 431, + 'd', 526, + 'e', 523, + 'f', 521, + 'i', 525, + '{', 280, + '|', 273, + '}', 282, + '~', 388, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(252); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(499); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 253: + if (eof) ADVANCE(255); + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 435, + '$', 393, + '&', 225, + '\'', 219, + '(', 271, + ')', 277, + ';', 223, + '<', 290, + '>', 295, + '\\', 132, + '`', 430, + '{', 280, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(253); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(503); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + lookahead != '{' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 254: + if (eof) ADVANCE(255); + ADVANCE_MAP( + '!', 224, + '#', 435, + '$', 394, + '%', 376, + '&', 357, + ')', 221, + '*', 370, + '+', 364, + '-', 366, + '/', 373, + ':', 379, + ';', 223, + '<', 293, + '=', 288, + '>', 296, + '?', 377, + ); + if (lookahead == '\\') SKIP(249); + if (lookahead == '^') ADVANCE(355); + if (lookahead == '`') ADVANCE(430); + if (lookahead == 'd') ADVANCE(235); + if (lookahead == 'e') ADVANCE(233); + if (lookahead == 'f') ADVANCE(231); + if (lookahead == 'i') ADVANCE(234); + if (lookahead == '|') ADVANCE(275); + if (lookahead == '}') ADVANCE(281); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(254); + END_STATE(); + case 255: + ACCEPT_TOKEN(ts_builtin_sym_end); + END_STATE(); + case 256: + ACCEPT_TOKEN(anon_sym_in); + END_STATE(); + case 257: + ACCEPT_TOKEN(anon_sym_in); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 258: + ACCEPT_TOKEN(anon_sym_in); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 259: + ACCEPT_TOKEN(anon_sym_do); + END_STATE(); + case 260: + ACCEPT_TOKEN(anon_sym_do); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 261: + ACCEPT_TOKEN(anon_sym_fi); + END_STATE(); + case 262: + ACCEPT_TOKEN(anon_sym_fi); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 263: + ACCEPT_TOKEN(anon_sym_elif); + END_STATE(); + case 264: + ACCEPT_TOKEN(anon_sym_elif); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 265: + ACCEPT_TOKEN(anon_sym_else); + END_STATE(); + case 266: + ACCEPT_TOKEN(anon_sym_else); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 267: + ACCEPT_TOKEN(anon_sym_esac); + END_STATE(); + case 268: + ACCEPT_TOKEN(anon_sym_esac); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 269: + ACCEPT_TOKEN(anon_sym_esac); + if (lookahead == '\\') ADVANCE(16); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 270: + ACCEPT_TOKEN(anon_sym_esac); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 271: + ACCEPT_TOKEN(anon_sym_LPAREN); + END_STATE(); + case 272: + ACCEPT_TOKEN(anon_sym_PIPE); + END_STATE(); + case 273: + ACCEPT_TOKEN(anon_sym_PIPE); + if (lookahead == '&') ADVANCE(337); + if (lookahead == '=') ADVANCE(353); + if (lookahead == '|') ADVANCE(284); + END_STATE(); + case 274: + ACCEPT_TOKEN(anon_sym_PIPE); + if (lookahead == '&') ADVANCE(337); + if (lookahead == '|') ADVANCE(284); + END_STATE(); + case 275: + ACCEPT_TOKEN(anon_sym_PIPE); + if (lookahead == '=') ADVANCE(353); + if (lookahead == '|') ADVANCE(284); + END_STATE(); + case 276: + ACCEPT_TOKEN(anon_sym_PIPE); + if (lookahead == '|') ADVANCE(284); + END_STATE(); + case 277: + ACCEPT_TOKEN(anon_sym_RPAREN); + END_STATE(); + case 278: + ACCEPT_TOKEN(anon_sym_LF); + if (lookahead == '\n') ADVANCE(278); + if (lookahead == '\\') ADVANCE(137); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(479); + END_STATE(); + case 279: + ACCEPT_TOKEN(anon_sym_SEMI_SEMI); + END_STATE(); + case 280: + ACCEPT_TOKEN(anon_sym_LBRACE); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 281: + ACCEPT_TOKEN(anon_sym_RBRACE); + END_STATE(); + case 282: + ACCEPT_TOKEN(anon_sym_RBRACE); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 283: + ACCEPT_TOKEN(anon_sym_AMP_AMP); + END_STATE(); + case 284: + ACCEPT_TOKEN(anon_sym_PIPE_PIPE); + END_STATE(); + case 285: + ACCEPT_TOKEN(anon_sym_BANG); + END_STATE(); + case 286: + ACCEPT_TOKEN(anon_sym_BANG); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 287: + ACCEPT_TOKEN(anon_sym_EQ); + END_STATE(); + case 288: + ACCEPT_TOKEN(anon_sym_EQ); + if (lookahead == '=') ADVANCE(360); + END_STATE(); + case 289: + ACCEPT_TOKEN(anon_sym_EQ); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 290: + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '&') ADVANCE(301); + END_STATE(); + case 291: + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '&') ADVANCE(301); + if (lookahead == '<') ADVANCE(307); + if (lookahead == '=') ADVANCE(362); + END_STATE(); + case 292: + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '&') ADVANCE(301); + if (lookahead == '<') ADVANCE(306); + END_STATE(); + case 293: + ACCEPT_TOKEN(anon_sym_LT); + if (lookahead == '<') ADVANCE(308); + if (lookahead == '=') ADVANCE(362); + END_STATE(); + case 294: + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '&') ADVANCE(302); + if (lookahead == '=') ADVANCE(363); + if (lookahead == '>') ADVANCE(298); + if (lookahead == '|') ADVANCE(303); + END_STATE(); + case 295: + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '&') ADVANCE(302); + if (lookahead == '>') ADVANCE(297); + if (lookahead == '|') ADVANCE(303); + END_STATE(); + case 296: + ACCEPT_TOKEN(anon_sym_GT); + if (lookahead == '=') ADVANCE(363); + if (lookahead == '>') ADVANCE(298); + END_STATE(); + case 297: + ACCEPT_TOKEN(anon_sym_GT_GT); + END_STATE(); + case 298: + ACCEPT_TOKEN(anon_sym_GT_GT); + if (lookahead == '=') ADVANCE(349); + END_STATE(); + case 299: + ACCEPT_TOKEN(anon_sym_AMP_GT); + if (lookahead == '>') ADVANCE(300); + END_STATE(); + case 300: + ACCEPT_TOKEN(anon_sym_AMP_GT_GT); + END_STATE(); + case 301: + ACCEPT_TOKEN(anon_sym_LT_AMP); + if (lookahead == '-') ADVANCE(304); + END_STATE(); + case 302: + ACCEPT_TOKEN(anon_sym_GT_AMP); + if (lookahead == '-') ADVANCE(305); + END_STATE(); + case 303: + ACCEPT_TOKEN(anon_sym_GT_PIPE); + END_STATE(); + case 304: + ACCEPT_TOKEN(anon_sym_LT_AMP_DASH); + END_STATE(); + case 305: + ACCEPT_TOKEN(anon_sym_GT_AMP_DASH); + END_STATE(); + case 306: + ACCEPT_TOKEN(anon_sym_LT_LT); + if (lookahead == '-') ADVANCE(309); + END_STATE(); + case 307: + ACCEPT_TOKEN(anon_sym_LT_LT); + if (lookahead == '-') ADVANCE(309); + if (lookahead == '=') ADVANCE(348); + END_STATE(); + case 308: + ACCEPT_TOKEN(anon_sym_LT_LT); + if (lookahead == '=') ADVANCE(348); + END_STATE(); + case 309: + ACCEPT_TOKEN(anon_sym_LT_LT_DASH); + END_STATE(); + case 310: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(310); + if (lookahead == '\\') ADVANCE(13); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(480); + END_STATE(); + case 311: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(311); + if (lookahead == '\\') ADVANCE(50); + END_STATE(); + case 312: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(312); + END_STATE(); + case 313: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(313); + if (lookahead == '\\') ADVANCE(19); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(481); + END_STATE(); + case 314: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(314); + if (lookahead == '\\') ADVANCE(147); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(482); + END_STATE(); + case 315: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(315); + if (lookahead == '\\') ADVANCE(149); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(483); + END_STATE(); + case 316: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(316); + if (lookahead == '\\') ADVANCE(25); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(484); + END_STATE(); + case 317: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(317); + if (lookahead == '\\') ADVANCE(53); + END_STATE(); + case 318: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(318); + if (lookahead == '\\') ADVANCE(22); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(485); + END_STATE(); + case 319: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(319); + if (lookahead == '\\') ADVANCE(151); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(486); + END_STATE(); + case 320: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(320); + if (lookahead == '\\') ADVANCE(157); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(487); + END_STATE(); + case 321: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(321); + if (lookahead == '\\') ADVANCE(55); + END_STATE(); + case 322: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(322); + if (lookahead == '\\') ADVANCE(28); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(488); + END_STATE(); + case 323: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(323); + if (lookahead == '\\') ADVANCE(153); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(489); + END_STATE(); + case 324: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(324); + if (lookahead == '\\') ADVANCE(165); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(490); + END_STATE(); + case 325: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(325); + if (lookahead == '\\') ADVANCE(57); + END_STATE(); + case 326: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(326); + if (lookahead == '\\') ADVANCE(31); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(491); + END_STATE(); + case 327: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(327); + if (lookahead == '\\') ADVANCE(169); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(492); + END_STATE(); + case 328: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(328); + if (lookahead == '\\') ADVANCE(63); + END_STATE(); + case 329: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(329); + if (lookahead == '\\') ADVANCE(36); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(493); + END_STATE(); + case 330: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(330); + if (lookahead == '\\') ADVANCE(176); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(494); + END_STATE(); + case 331: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(331); + if (lookahead == '\\') ADVANCE(102); + END_STATE(); + case 332: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(332); + if (lookahead == '\\') ADVANCE(39); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(495); + END_STATE(); + case 333: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(333); + if (lookahead == '\\') ADVANCE(80); + END_STATE(); + case 334: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(334); + if (lookahead == '\\') ADVANCE(99); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(496); + END_STATE(); + case 335: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(335); + if (lookahead == '\\') ADVANCE(71); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(497); + END_STATE(); + case 336: + ACCEPT_TOKEN(aux_sym_heredoc_redirect_token1); + if (lookahead == '\n') ADVANCE(336); + if (lookahead == '\\') ADVANCE(76); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(498); + END_STATE(); + case 337: + ACCEPT_TOKEN(anon_sym_PIPE_AMP); + END_STATE(); + case 338: + ACCEPT_TOKEN(anon_sym_DOLLAR_LPAREN_LPAREN); + END_STATE(); + case 339: + ACCEPT_TOKEN(anon_sym_RPAREN_RPAREN); + END_STATE(); + case 340: + ACCEPT_TOKEN(anon_sym_PLUS_EQ); + END_STATE(); + case 341: + ACCEPT_TOKEN(anon_sym_DASH_EQ); + END_STATE(); + case 342: + ACCEPT_TOKEN(anon_sym_STAR_EQ); + END_STATE(); + case 343: + ACCEPT_TOKEN(anon_sym_STAR_EQ); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 344: + ACCEPT_TOKEN(anon_sym_SLASH_EQ); + END_STATE(); + case 345: + ACCEPT_TOKEN(anon_sym_SLASH_EQ); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 346: + ACCEPT_TOKEN(anon_sym_PERCENT_EQ); + END_STATE(); + case 347: + ACCEPT_TOKEN(anon_sym_PERCENT_EQ); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 348: + ACCEPT_TOKEN(anon_sym_LT_LT_EQ); + END_STATE(); + case 349: + ACCEPT_TOKEN(anon_sym_GT_GT_EQ); + END_STATE(); + case 350: + ACCEPT_TOKEN(anon_sym_AMP_EQ); + END_STATE(); + case 351: + ACCEPT_TOKEN(anon_sym_CARET_EQ); + END_STATE(); + case 352: + ACCEPT_TOKEN(anon_sym_CARET_EQ); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 353: + ACCEPT_TOKEN(anon_sym_PIPE_EQ); + END_STATE(); + case 354: + ACCEPT_TOKEN(anon_sym_CARET); + if (lookahead == '=') ADVANCE(352); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 355: + ACCEPT_TOKEN(anon_sym_CARET); + if (lookahead == '=') ADVANCE(351); + END_STATE(); + case 356: + ACCEPT_TOKEN(anon_sym_AMP); + END_STATE(); + case 357: + ACCEPT_TOKEN(anon_sym_AMP); + if (lookahead == '&') ADVANCE(283); + if (lookahead == '=') ADVANCE(350); + END_STATE(); + case 358: + ACCEPT_TOKEN(anon_sym_AMP); + if (lookahead == '&') ADVANCE(283); + if (lookahead == '=') ADVANCE(350); + if (lookahead == '>') ADVANCE(299); + END_STATE(); + case 359: + ACCEPT_TOKEN(anon_sym_AMP); + if (lookahead == '&') ADVANCE(283); + if (lookahead == '>') ADVANCE(299); + END_STATE(); + case 360: + ACCEPT_TOKEN(anon_sym_EQ_EQ); + END_STATE(); + case 361: + ACCEPT_TOKEN(anon_sym_BANG_EQ); + END_STATE(); + case 362: + ACCEPT_TOKEN(anon_sym_LT_EQ); + END_STATE(); + case 363: + ACCEPT_TOKEN(anon_sym_GT_EQ); + END_STATE(); + case 364: + ACCEPT_TOKEN(anon_sym_PLUS); + if (lookahead == '+') ADVANCE(389); + if (lookahead == '=') ADVANCE(340); + END_STATE(); + case 365: + ACCEPT_TOKEN(anon_sym_DASH); + END_STATE(); + case 366: + ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '-') ADVANCE(390); + if (lookahead == '=') ADVANCE(341); + END_STATE(); + case 367: + ACCEPT_TOKEN(anon_sym_DASH); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 368: + ACCEPT_TOKEN(anon_sym_STAR); + END_STATE(); + case 369: + ACCEPT_TOKEN(anon_sym_STAR); + if (lookahead == '=') ADVANCE(343); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 370: + ACCEPT_TOKEN(anon_sym_STAR); + if (lookahead == '=') ADVANCE(342); + END_STATE(); + case 371: + ACCEPT_TOKEN(anon_sym_STAR); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 372: + ACCEPT_TOKEN(anon_sym_SLASH); + if (lookahead == '=') ADVANCE(345); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 373: + ACCEPT_TOKEN(anon_sym_SLASH); + if (lookahead == '=') ADVANCE(344); + END_STATE(); + case 374: + ACCEPT_TOKEN(anon_sym_PERCENT); + if (lookahead == '%') ADVANCE(426); + if (lookahead == '=') ADVANCE(347); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 375: + ACCEPT_TOKEN(anon_sym_PERCENT); + if (lookahead == '%') ADVANCE(425); + END_STATE(); + case 376: + ACCEPT_TOKEN(anon_sym_PERCENT); + if (lookahead == '=') ADVANCE(346); + END_STATE(); + case 377: + ACCEPT_TOKEN(anon_sym_QMARK); + END_STATE(); + case 378: + ACCEPT_TOKEN(anon_sym_QMARK); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 379: + ACCEPT_TOKEN(anon_sym_COLON); + END_STATE(); + case 380: + ACCEPT_TOKEN(anon_sym_COLON); + if (lookahead == '=') ADVANCE(416); + if (lookahead == '?') ADVANCE(420); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 381: + ACCEPT_TOKEN(anon_sym_COLON); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 382: + ACCEPT_TOKEN(anon_sym_PLUS_PLUS); + END_STATE(); + case 383: + ACCEPT_TOKEN(anon_sym_DASH_DASH); + END_STATE(); + case 384: + ACCEPT_TOKEN(anon_sym_DASH2); + END_STATE(); + case 385: + ACCEPT_TOKEN(anon_sym_DASH2); + if (lookahead == '-') ADVANCE(383); + END_STATE(); + case 386: + ACCEPT_TOKEN(anon_sym_PLUS2); + END_STATE(); + case 387: + ACCEPT_TOKEN(anon_sym_PLUS2); + if (lookahead == '+') ADVANCE(382); + END_STATE(); + case 388: + ACCEPT_TOKEN(anon_sym_TILDE); + END_STATE(); + case 389: + ACCEPT_TOKEN(anon_sym_PLUS_PLUS2); + END_STATE(); + case 390: + ACCEPT_TOKEN(anon_sym_DASH_DASH2); + END_STATE(); + case 391: + ACCEPT_TOKEN(aux_sym_concatenation_token1); + END_STATE(); + case 392: + ACCEPT_TOKEN(anon_sym_DOLLAR); + END_STATE(); + case 393: + ACCEPT_TOKEN(anon_sym_DOLLAR); + if (lookahead == '(') ADVANCE(429); + if (lookahead == '{') ADVANCE(412); + END_STATE(); + case 394: + ACCEPT_TOKEN(anon_sym_DOLLAR); + if (lookahead == '(') ADVANCE(428); + if (lookahead == '{') ADVANCE(412); + END_STATE(); + case 395: + ACCEPT_TOKEN(anon_sym_DQUOTE); + END_STATE(); + case 396: + ACCEPT_TOKEN(sym_string_content); + if (lookahead == '\n') ADVANCE(400); + if (lookahead == '\\') ADVANCE(130); + if (lookahead != 0 && + lookahead != '\r' && + lookahead != '"' && + lookahead != '$' && + lookahead != '`') ADVANCE(403); + END_STATE(); + case 397: + ACCEPT_TOKEN(sym_string_content); + if (lookahead == '\n') ADVANCE(403); + if (lookahead == '\\') ADVANCE(432); + if (lookahead != 0 && + lookahead != '\r' && + lookahead != '"' && + lookahead != '$' && + lookahead != '`') ADVANCE(405); + END_STATE(); + case 398: + ACCEPT_TOKEN(sym_string_content); + if (lookahead == '\n') ADVANCE(401); + if (lookahead == '\\') ADVANCE(130); + if (lookahead != 0 && + lookahead != '\r' && + lookahead != '"' && + lookahead != '$' && + lookahead != '`') ADVANCE(403); + END_STATE(); + case 399: + ACCEPT_TOKEN(sym_string_content); + if (lookahead == '\n') ADVANCE(402); + if (lookahead == '\\') ADVANCE(130); + if (lookahead != 0 && + lookahead != '\r' && + lookahead != '"' && + lookahead != '$' && + lookahead != '`') ADVANCE(403); + END_STATE(); + case 400: + ACCEPT_TOKEN(sym_string_content); + ADVANCE_MAP( + '!', 285, + '"', 395, + '#', 410, + '$', 392, + '*', 368, + '-', 365, + '0', 475, + '?', 377, + '@', 471, + '\\', 83, + '_', 478, + ); + if (lookahead == '\n' || + lookahead == '\r') SKIP(197); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') ADVANCE(400); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + if (lookahead != 0 && + (lookahead < '_' || 'z' < lookahead)) ADVANCE(403); + END_STATE(); + case 401: + ACCEPT_TOKEN(sym_string_content); + ADVANCE_MAP( + '!', 285, + '#', 410, + '$', 392, + '*', 368, + '-', 365, + '0', 475, + '?', 377, + '@', 471, + '\\', 88, + '_', 478, + ); + if (lookahead == '\n' || + lookahead == '\r') SKIP(201); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') ADVANCE(401); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + if (lookahead != 0 && + (lookahead < ' ' || '$' < lookahead) && + (lookahead < '_' || 'z' < lookahead)) ADVANCE(403); + END_STATE(); + case 402: + ACCEPT_TOKEN(sym_string_content); + if (lookahead == '"') ADVANCE(395); + if (lookahead == '#') ADVANCE(405); + if (lookahead == '$') ADVANCE(393); + if (lookahead == '\\') ADVANCE(135); + if (lookahead == '`') ADVANCE(430); + if (lookahead == '\n' || + lookahead == '\r') SKIP(214); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') ADVANCE(402); + if (lookahead != 0) ADVANCE(403); + END_STATE(); + case 403: + ACCEPT_TOKEN(sym_string_content); + if (lookahead == '\\') ADVANCE(130); + if (lookahead != 0 && + lookahead != '\n' && + lookahead != '\r' && + lookahead != '"' && + lookahead != '$' && + lookahead != '`') ADVANCE(403); + END_STATE(); + case 404: + ACCEPT_TOKEN(sym_string_content); + if (lookahead == '\\') ADVANCE(130); + if (lookahead != 0 && + lookahead != '\r' && + lookahead != '"' && + lookahead != '$' && + lookahead != '`') ADVANCE(403); + END_STATE(); + case 405: + ACCEPT_TOKEN(sym_string_content); + if (lookahead == '\\') ADVANCE(432); + if (lookahead != 0 && + lookahead != '\n' && + lookahead != '\r' && + lookahead != '"' && + lookahead != '$' && + lookahead != '`') ADVANCE(405); + END_STATE(); + case 406: + ACCEPT_TOKEN(sym_raw_string); + END_STATE(); + case 407: + ACCEPT_TOKEN(sym_number); + if (lookahead == '\\') ADVANCE(238); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 408: + ACCEPT_TOKEN(sym_number); + if (lookahead == '\\') ADVANCE(16); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 409: + ACCEPT_TOKEN(sym_number); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(409); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 410: + ACCEPT_TOKEN(anon_sym_POUND); + END_STATE(); + case 411: + ACCEPT_TOKEN(anon_sym_POUND); + if (lookahead == '\\') ADVANCE(434); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(529); + END_STATE(); + case 412: + ACCEPT_TOKEN(anon_sym_DOLLAR_LBRACE); + END_STATE(); + case 413: + ACCEPT_TOKEN(anon_sym_COLON_DASH); + END_STATE(); + case 414: + ACCEPT_TOKEN(anon_sym_DASH3); + END_STATE(); + case 415: + ACCEPT_TOKEN(anon_sym_COLON_EQ); + END_STATE(); + case 416: + ACCEPT_TOKEN(anon_sym_COLON_EQ); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 417: + ACCEPT_TOKEN(anon_sym_EQ2); + END_STATE(); + case 418: + ACCEPT_TOKEN(anon_sym_EQ2); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 419: + ACCEPT_TOKEN(anon_sym_COLON_QMARK); + END_STATE(); + case 420: + ACCEPT_TOKEN(anon_sym_COLON_QMARK); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 421: + ACCEPT_TOKEN(anon_sym_QMARK2); + END_STATE(); + case 422: + ACCEPT_TOKEN(anon_sym_QMARK2); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 423: + ACCEPT_TOKEN(anon_sym_COLON_PLUS); + END_STATE(); + case 424: + ACCEPT_TOKEN(anon_sym_PLUS3); + END_STATE(); + case 425: + ACCEPT_TOKEN(anon_sym_PERCENT_PERCENT); + END_STATE(); + case 426: + ACCEPT_TOKEN(anon_sym_PERCENT_PERCENT); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 427: + ACCEPT_TOKEN(aux_sym_expansion_regex_token1); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(427); + END_STATE(); + case 428: + ACCEPT_TOKEN(anon_sym_DOLLAR_LPAREN); + END_STATE(); + case 429: + ACCEPT_TOKEN(anon_sym_DOLLAR_LPAREN); + if (lookahead == '(') ADVANCE(338); + END_STATE(); + case 430: + ACCEPT_TOKEN(anon_sym_BQUOTE); + END_STATE(); + case 431: + ACCEPT_TOKEN(anon_sym_BQUOTE); + if (lookahead == '`') ADVANCE(391); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') ADVANCE(226); + END_STATE(); + case 432: + ACCEPT_TOKEN(sym_comment); + if (lookahead == '\n') ADVANCE(403); + if (lookahead == '\r') ADVANCE(397); + if (lookahead != 0) ADVANCE(405); + END_STATE(); + case 433: + ACCEPT_TOKEN(sym_comment); + if (lookahead == '\t' || + (0x0b <= lookahead && lookahead <= '\r')) ADVANCE(435); + if (lookahead != 0 && + (lookahead < '\t' || '\r' < lookahead)) ADVANCE(436); + END_STATE(); + case 434: + ACCEPT_TOKEN(sym_comment); + if (lookahead == '\t' || + (0x0b <= lookahead && lookahead <= '\r')) ADVANCE(435); + if (lookahead != 0 && + (lookahead < '\t' || '\r' < lookahead)) ADVANCE(529); + END_STATE(); + case 435: + ACCEPT_TOKEN(sym_comment); + if (lookahead != 0 && + lookahead != '\n') ADVANCE(435); + END_STATE(); + case 436: + ACCEPT_TOKEN(sym__comment_word); + if (lookahead == '\\') ADVANCE(433); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(436); + END_STATE(); + case 437: + ACCEPT_TOKEN(aux_sym__simple_variable_name_token1); + if (lookahead == '\\') ADVANCE(16); + if (lookahead == 'a') ADVANCE(438); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 438: + ACCEPT_TOKEN(aux_sym__simple_variable_name_token1); + if (lookahead == '\\') ADVANCE(16); + if (lookahead == 'c') ADVANCE(269); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 439: + ACCEPT_TOKEN(aux_sym__simple_variable_name_token1); + if (lookahead == '\\') ADVANCE(16); + if (lookahead == 's') ADVANCE(437); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 440: + ACCEPT_TOKEN(aux_sym__simple_variable_name_token1); + if (lookahead == '\\') ADVANCE(16); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 441: + ACCEPT_TOKEN(aux_sym__simple_variable_name_token1); + if (lookahead == 'a') ADVANCE(442); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 442: + ACCEPT_TOKEN(aux_sym__simple_variable_name_token1); + if (lookahead == 'c') ADVANCE(270); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 443: + ACCEPT_TOKEN(aux_sym__simple_variable_name_token1); + if (lookahead == 'n') ADVANCE(258); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 444: + ACCEPT_TOKEN(aux_sym__simple_variable_name_token1); + if (lookahead == 's') ADVANCE(441); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 445: + ACCEPT_TOKEN(aux_sym__simple_variable_name_token1); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 446: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 310, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 13, + '_', 477, + '`', 430, + 'e', 439, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(10); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(480); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 447: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 311, + '!', 285, + '#', 410, + '$', 392, + '&', 359, + ')', 277, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 50, + '_', 478, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(48); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 448: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 313, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 19, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(94); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(481); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 449: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 316, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 25, + '_', 477, + '`', 430, + 'e', 439, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(107); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(484); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 450: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 317, + '!', 285, + '#', 410, + '$', 392, + '&', 359, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 53, + '_', 478, + '`', 430, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(108); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 451: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 318, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '(', 271, + ')', 277, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 22, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(109); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(485); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0) ADVANCE(528); + END_STATE(); + case 452: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 321, + '!', 285, + '#', 410, + '$', 392, + '&', 359, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 55, + '_', 478, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(112); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 453: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 322, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + ')', 277, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 28, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(113); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(488); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 454: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 325, + '!', 285, + '#', 410, + '$', 392, + '&', 359, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 57, + '_', 478, + 'e', 444, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(116); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 455: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 326, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 359, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 31, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(117); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(491); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead)) ADVANCE(528); + END_STATE(); + case 456: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 328, + '!', 285, + '#', 410, + '$', 392, + '&', 218, + '*', 368, + '-', 365, + '0', 475, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 63, + '_', 478, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(119); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 457: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 329, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 218, + '\'', 219, + '(', 271, + '*', 371, + '-', 367, + '0', 474, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 36, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(120); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(493); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 458: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 331, + '!', 285, + '#', 410, + '$', 392, + '&', 218, + '*', 368, + '-', 365, + '0', 475, + '<', 290, + '>', 295, + '?', 377, + '@', 471, + '\\', 102, + '_', 478, + '|', 237, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(122); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 459: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 332, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 218, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 39, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(123); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(495); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 460: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 333, + '!', 285, + '#', 410, + '$', 392, + '&', 356, + '*', 368, + '-', 365, + '0', 475, + ';', 530, + '?', 377, + '@', 471, + '\\', 80, + '_', 478, + 'i', 443, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(124); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 461: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 334, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 218, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + '<', 290, + '>', 295, + '?', 378, + '@', 472, + '\\', 99, + '_', 477, + '`', 430, + '|', 237, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(125); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(496); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 462: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 335, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 356, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + ';', 530, + '?', 378, + '@', 472, + '\\', 71, + '_', 477, + '`', 430, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(126); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(497); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<' && + (lookahead < '>' || 'Z' < lookahead) && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 463: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '\n', 336, + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 76, + '_', 477, + '`', 430, + ); + if (lookahead == '\t' || + lookahead == ' ') SKIP(127); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(498); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<' && + (lookahead < '>' || 'Z' < lookahead) && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 464: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 225, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + '<', 290, + '>', 295, + '?', 378, + '@', 472, + '\\', 61, + '_', 477, + '`', 430, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(187); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(502); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<' && + lookahead != '|') ADVANCE(528); + END_STATE(); + case 465: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 218, + '\'', 219, + '(', 271, + '*', 371, + '-', 367, + '0', 474, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 42, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(188); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(500); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 466: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '!', 286, + '"', 395, + '#', 410, + '$', 393, + '&', 218, + '\'', 219, + '*', 371, + '-', 367, + '0', 474, + '<', 292, + '>', 295, + '?', 378, + '@', 472, + '\\', 45, + '_', 477, + '`', 430, + '|', 276, + ); + if (lookahead == '\t' || + lookahead == '\n' || + lookahead == ' ') SKIP(189); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(501); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if (lookahead != 0 && + (lookahead < '&' || '*' < lookahead) && + lookahead != ';' && + lookahead != '<') ADVANCE(528); + END_STATE(); + case 467: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '!', 285, + '#', 410, + '$', 392, + '&', 218, + '*', 368, + '-', 365, + '0', 475, + '<', 292, + '>', 295, + '?', 377, + '@', 471, + '\\', 65, + '_', 478, + '|', 276, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(199); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 468: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '!', 285, + '#', 410, + '$', 392, + ')', 277, + '*', 368, + '-', 365, + '0', 475, + '?', 377, + '@', 471, + '\\', 85, + '_', 478, + '|', 272, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(200); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 469: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + ADVANCE_MAP( + '!', 285, + '#', 410, + '$', 392, + '*', 368, + '-', 365, + '0', 475, + '?', 377, + '@', 471, + '\\', 90, + '_', 478, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(203); + if (('1' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 470: + ACCEPT_TOKEN(aux_sym__multiline_variable_name_token1); + if (lookahead == '\\') ADVANCE(15); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(470); + END_STATE(); + case 471: + ACCEPT_TOKEN(anon_sym_AT); + END_STATE(); + case 472: + ACCEPT_TOKEN(anon_sym_AT); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 473: + ACCEPT_TOKEN(anon_sym_0); + if (lookahead == '\\') ADVANCE(238); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 474: + ACCEPT_TOKEN(anon_sym_0); + if (lookahead == '\\') ADVANCE(16); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 475: + ACCEPT_TOKEN(anon_sym_0); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 476: + ACCEPT_TOKEN(anon_sym__); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 477: + ACCEPT_TOKEN(anon_sym__); + if (lookahead == '\\') ADVANCE(16); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 478: + ACCEPT_TOKEN(anon_sym__); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(445); + END_STATE(); + case 479: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\n') ADVANCE(278); + if (lookahead == '!') ADVANCE(286); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(136); + if (lookahead == '{') ADVANCE(280); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(479); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 480: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 310, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 12, + '_', 477, + 'e', 439, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(480); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 481: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 313, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 18, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(481); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 482: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\n') ADVANCE(314); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(146); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(482); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 483: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\n') ADVANCE(315); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(148); + if (lookahead == 'e') ADVANCE(527); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(483); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 484: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 316, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 24, + '_', 477, + 'e', 439, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(484); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 485: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 318, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 21, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(485); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 486: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\n') ADVANCE(319); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(150); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(486); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 487: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\n') ADVANCE(320); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(156); + if (lookahead == 'e') ADVANCE(527); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(487); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 488: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 322, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 27, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(488); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 489: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\n') ADVANCE(323); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(152); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(489); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 490: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\n') ADVANCE(324); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(164); + if (lookahead == 'e') ADVANCE(527); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(490); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 491: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 326, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 30, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(491); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 492: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\n') ADVANCE(327); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(168); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(492); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 493: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 329, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 35, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(493); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 494: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\n') ADVANCE(330); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(175); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(494); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 495: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 332, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 38, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(495); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 496: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 334, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 98, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(496); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 497: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 335, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 70, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(497); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 498: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '\n', 336, + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 75, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(498); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 499: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '!', 286, + '#', 411, + '%', 374, + '*', 369, + '+', 386, + '-', 384, + '/', 372, + '0', 473, + ':', 381, + '=', 289, + '?', 378, + '@', 472, + '\\', 128, + '^', 354, + '_', 476, + 'd', 526, + 'e', 523, + 'f', 521, + 'i', 525, + '{', 280, + '}', 282, + '~', 388, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(499); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(407); + if (lookahead != 0 && + (lookahead < '\t' || '\r' < lookahead) && + (lookahead < ' ' || '+' < lookahead) && + (lookahead < '/' || '@' < lookahead) && + (lookahead < '^' || '`' < lookahead) && + (lookahead < '{' || '~' < lookahead)) ADVANCE(528); + END_STATE(); + case 500: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 41, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(500); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 501: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 44, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(501); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 502: + ACCEPT_TOKEN(sym_word); + ADVANCE_MAP( + '!', 286, + '#', 411, + '*', 371, + '-', 367, + '0', 474, + '?', 378, + '@', 472, + '\\', 60, + '_', 477, + ); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(502); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(408); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(440); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 503: + ACCEPT_TOKEN(sym_word); + if (lookahead == '!') ADVANCE(286); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(131); + if (lookahead == '{') ADVANCE(280); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(503); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 504: + ACCEPT_TOKEN(sym_word); + if (lookahead == '!') ADVANCE(286); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(133); + if (lookahead == 'e') ADVANCE(524); + if (lookahead == 'f') ADVANCE(521); + if (lookahead == '{') ADVANCE(280); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(504); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 505: + ACCEPT_TOKEN(sym_word); + if (lookahead == '!') ADVANCE(286); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(138); + if (lookahead == 'd') ADVANCE(526); + if (lookahead == '{') ADVANCE(280); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(505); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 506: + ACCEPT_TOKEN(sym_word); + if (lookahead == '!') ADVANCE(286); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(140); + if (lookahead == 'f') ADVANCE(521); + if (lookahead == '{') ADVANCE(280); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(506); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 507: + ACCEPT_TOKEN(sym_word); + if (lookahead == '!') ADVANCE(286); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(142); + if (lookahead == '{') ADVANCE(280); + if (lookahead == '}') ADVANCE(282); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(507); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 508: + ACCEPT_TOKEN(sym_word); + if (lookahead == '!') ADVANCE(286); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(159); + if (lookahead == 'e') ADVANCE(527); + if (lookahead == '{') ADVANCE(280); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(508); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 509: + ACCEPT_TOKEN(sym_word); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(144); + if (lookahead == '{') ADVANCE(280); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(509); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 510: + ACCEPT_TOKEN(sym_word); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(154); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(510); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 511: + ACCEPT_TOKEN(sym_word); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(161); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(511); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 512: + ACCEPT_TOKEN(sym_word); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(166); + if (lookahead == 'e') ADVANCE(527); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(512); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 513: + ACCEPT_TOKEN(sym_word); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(171); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(513); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 514: + ACCEPT_TOKEN(sym_word); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(173); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(514); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(407); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 515: + ACCEPT_TOKEN(sym_word); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(177); + if (lookahead == '}') ADVANCE(282); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(515); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 516: + ACCEPT_TOKEN(sym_word); + if (lookahead == '#') ADVANCE(529); + if (lookahead == '\\') ADVANCE(181); + if ((0x0b <= lookahead && lookahead <= '\r')) ADVANCE(516); + if ((!eof && set_contains(sym_word_character_set_1, 9, lookahead))) ADVANCE(528); + END_STATE(); + case 517: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 'a') ADVANCE(518); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 518: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 'c') ADVANCE(268); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 519: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 'e') ADVANCE(266); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 520: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 'f') ADVANCE(264); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 521: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 'i') ADVANCE(262); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 522: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 'i') ADVANCE(520); + if (lookahead == 's') ADVANCE(519); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 523: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 'l') ADVANCE(522); + if (lookahead == 's') ADVANCE(517); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 524: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 'l') ADVANCE(522); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 525: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 'n') ADVANCE(257); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 526: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 'o') ADVANCE(260); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 527: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if (lookahead == 's') ADVANCE(517); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 528: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(238); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(528); + END_STATE(); + case 529: + ACCEPT_TOKEN(sym_word); + if (lookahead == '\\') ADVANCE(434); + if ((!eof && set_contains(sym__comment_word_character_set_1, 10, lookahead))) ADVANCE(529); + END_STATE(); + case 530: + ACCEPT_TOKEN(anon_sym_SEMI); + if (lookahead == ';') ADVANCE(279); + END_STATE(); + default: + return false; + } +} + +static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) { + START_LEXER(); + eof = lexer->eof(lexer); + switch (state) { + case 0: + if (lookahead == '\\') SKIP(1); + if (lookahead == 'c') ADVANCE(2); + if (lookahead == 'd') ADVANCE(3); + if (lookahead == 'f') ADVANCE(4); + if (lookahead == 'i') ADVANCE(5); + if (lookahead == 't') ADVANCE(6); + if (lookahead == 'u') ADVANCE(7); + if (lookahead == 'w') ADVANCE(8); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ') SKIP(0); + END_STATE(); + case 1: + if (lookahead == '\r') SKIP(9); + if (('\t' <= lookahead && lookahead <= '\f') || + lookahead == ' ') SKIP(0); + END_STATE(); + case 2: + if (lookahead == 'a') ADVANCE(10); + END_STATE(); + case 3: + if (lookahead == 'o') ADVANCE(11); + END_STATE(); + case 4: + if (lookahead == 'o') ADVANCE(12); + END_STATE(); + case 5: + if (lookahead == 'f') ADVANCE(13); + END_STATE(); + case 6: + if (lookahead == 'h') ADVANCE(14); + END_STATE(); + case 7: + if (lookahead == 'n') ADVANCE(15); + END_STATE(); + case 8: + if (lookahead == 'h') ADVANCE(16); + END_STATE(); + case 9: + if (lookahead == '\n') SKIP(0); + END_STATE(); + case 10: + if (lookahead == 's') ADVANCE(17); + END_STATE(); + case 11: + if (lookahead == 'n') ADVANCE(18); + END_STATE(); + case 12: + if (lookahead == 'r') ADVANCE(19); + END_STATE(); + case 13: + ACCEPT_TOKEN(anon_sym_if); + END_STATE(); + case 14: + if (lookahead == 'e') ADVANCE(20); + END_STATE(); + case 15: + if (lookahead == 't') ADVANCE(21); + END_STATE(); + case 16: + if (lookahead == 'i') ADVANCE(22); + END_STATE(); + case 17: + if (lookahead == 'e') ADVANCE(23); + END_STATE(); + case 18: + if (lookahead == 'e') ADVANCE(24); + END_STATE(); + case 19: + ACCEPT_TOKEN(anon_sym_for); + END_STATE(); + case 20: + if (lookahead == 'n') ADVANCE(25); + END_STATE(); + case 21: + if (lookahead == 'i') ADVANCE(26); + END_STATE(); + case 22: + if (lookahead == 'l') ADVANCE(27); + END_STATE(); + case 23: + ACCEPT_TOKEN(anon_sym_case); + END_STATE(); + case 24: + ACCEPT_TOKEN(anon_sym_done); + END_STATE(); + case 25: + ACCEPT_TOKEN(anon_sym_then); + END_STATE(); + case 26: + if (lookahead == 'l') ADVANCE(28); + END_STATE(); + case 27: + if (lookahead == 'e') ADVANCE(29); + END_STATE(); + case 28: + ACCEPT_TOKEN(anon_sym_until); + END_STATE(); + case 29: + ACCEPT_TOKEN(anon_sym_while); + END_STATE(); + default: + return false; + } +} + +static const TSLexMode ts_lex_modes[STATE_COUNT] = { + [0] = {.lex_state = 0, .external_lex_state = 1}, + [1] = {.lex_state = 253, .external_lex_state = 2}, + [2] = {.lex_state = 192, .external_lex_state = 2}, + [3] = {.lex_state = 192, .external_lex_state = 2}, + [4] = {.lex_state = 192, .external_lex_state = 2}, + [5] = {.lex_state = 192, .external_lex_state = 2}, + [6] = {.lex_state = 192, .external_lex_state = 2}, + [7] = {.lex_state = 192, .external_lex_state = 2}, + [8] = {.lex_state = 5, .external_lex_state = 2}, + [9] = {.lex_state = 5, .external_lex_state = 2}, + [10] = {.lex_state = 5, .external_lex_state = 2}, + [11] = {.lex_state = 5, .external_lex_state = 2}, + [12] = {.lex_state = 5, .external_lex_state = 2}, + [13] = {.lex_state = 5, .external_lex_state = 2}, + [14] = {.lex_state = 5, .external_lex_state = 2}, + [15] = {.lex_state = 5, .external_lex_state = 2}, + [16] = {.lex_state = 5, .external_lex_state = 2}, + [17] = {.lex_state = 5, .external_lex_state = 2}, + [18] = {.lex_state = 5, .external_lex_state = 2}, + [19] = {.lex_state = 5, .external_lex_state = 2}, + [20] = {.lex_state = 5, .external_lex_state = 2}, + [21] = {.lex_state = 5, .external_lex_state = 2}, + [22] = {.lex_state = 5, .external_lex_state = 2}, + [23] = {.lex_state = 5, .external_lex_state = 2}, + [24] = {.lex_state = 192, .external_lex_state = 2}, + [25] = {.lex_state = 5, .external_lex_state = 2}, + [26] = {.lex_state = 5, .external_lex_state = 2}, + [27] = {.lex_state = 192, .external_lex_state = 2}, + [28] = {.lex_state = 5, .external_lex_state = 2}, + [29] = {.lex_state = 5, .external_lex_state = 2}, + [30] = {.lex_state = 5, .external_lex_state = 2}, + [31] = {.lex_state = 5, .external_lex_state = 2}, + [32] = {.lex_state = 192, .external_lex_state = 2}, + [33] = {.lex_state = 5, .external_lex_state = 2}, + [34] = {.lex_state = 5, .external_lex_state = 2}, + [35] = {.lex_state = 193, .external_lex_state = 2}, + [36] = {.lex_state = 253, .external_lex_state = 2}, + [37] = {.lex_state = 193, .external_lex_state = 2}, + [38] = {.lex_state = 193, .external_lex_state = 2}, + [39] = {.lex_state = 253, .external_lex_state = 2}, + [40] = {.lex_state = 253, .external_lex_state = 2}, + [41] = {.lex_state = 253, .external_lex_state = 2}, + [42] = {.lex_state = 253, .external_lex_state = 2}, + [43] = {.lex_state = 253, .external_lex_state = 2}, + [44] = {.lex_state = 253, .external_lex_state = 2}, + [45] = {.lex_state = 253, .external_lex_state = 2}, + [46] = {.lex_state = 194, .external_lex_state = 2}, + [47] = {.lex_state = 253, .external_lex_state = 2}, + [48] = {.lex_state = 253, .external_lex_state = 2}, + [49] = {.lex_state = 195, .external_lex_state = 2}, + [50] = {.lex_state = 253, .external_lex_state = 2}, + [51] = {.lex_state = 253, .external_lex_state = 2}, + [52] = {.lex_state = 253, .external_lex_state = 2}, + [53] = {.lex_state = 253, .external_lex_state = 2}, + [54] = {.lex_state = 253, .external_lex_state = 2}, + [55] = {.lex_state = 253, .external_lex_state = 2}, + [56] = {.lex_state = 253, .external_lex_state = 2}, + [57] = {.lex_state = 253, .external_lex_state = 2}, + [58] = {.lex_state = 253, .external_lex_state = 2}, + [59] = {.lex_state = 253, .external_lex_state = 2}, + [60] = {.lex_state = 253, .external_lex_state = 2}, + [61] = {.lex_state = 253, .external_lex_state = 2}, + [62] = {.lex_state = 253, .external_lex_state = 2}, + [63] = {.lex_state = 253, .external_lex_state = 2}, + [64] = {.lex_state = 253, .external_lex_state = 2}, + [65] = {.lex_state = 253, .external_lex_state = 2}, + [66] = {.lex_state = 253, .external_lex_state = 2}, + [67] = {.lex_state = 253, .external_lex_state = 2}, + [68] = {.lex_state = 253, .external_lex_state = 2}, + [69] = {.lex_state = 253, .external_lex_state = 2}, + [70] = {.lex_state = 253, .external_lex_state = 2}, + [71] = {.lex_state = 253, .external_lex_state = 2}, + [72] = {.lex_state = 194, .external_lex_state = 2}, + [73] = {.lex_state = 253, .external_lex_state = 2}, + [74] = {.lex_state = 253, .external_lex_state = 2}, + [75] = {.lex_state = 253, .external_lex_state = 2}, + [76] = {.lex_state = 253, .external_lex_state = 2}, + [77] = {.lex_state = 253, .external_lex_state = 2}, + [78] = {.lex_state = 253, .external_lex_state = 2}, + [79] = {.lex_state = 194, .external_lex_state = 2}, + [80] = {.lex_state = 253, .external_lex_state = 2}, + [81] = {.lex_state = 253, .external_lex_state = 2}, + [82] = {.lex_state = 253, .external_lex_state = 2}, + [83] = {.lex_state = 253, .external_lex_state = 2}, + [84] = {.lex_state = 253, .external_lex_state = 2}, + [85] = {.lex_state = 253, .external_lex_state = 2}, + [86] = {.lex_state = 253, .external_lex_state = 2}, + [87] = {.lex_state = 253, .external_lex_state = 2}, + [88] = {.lex_state = 253, .external_lex_state = 2}, + [89] = {.lex_state = 253, .external_lex_state = 2}, + [90] = {.lex_state = 253, .external_lex_state = 2}, + [91] = {.lex_state = 253, .external_lex_state = 2}, + [92] = {.lex_state = 253, .external_lex_state = 2}, + [93] = {.lex_state = 253, .external_lex_state = 2}, + [94] = {.lex_state = 253, .external_lex_state = 2}, + [95] = {.lex_state = 253, .external_lex_state = 2}, + [96] = {.lex_state = 195, .external_lex_state = 2}, + [97] = {.lex_state = 253, .external_lex_state = 2}, + [98] = {.lex_state = 195, .external_lex_state = 2}, + [99] = {.lex_state = 253, .external_lex_state = 2}, + [100] = {.lex_state = 253, .external_lex_state = 2}, + [101] = {.lex_state = 253, .external_lex_state = 2}, + [102] = {.lex_state = 253, .external_lex_state = 2}, + [103] = {.lex_state = 253, .external_lex_state = 2}, + [104] = {.lex_state = 253, .external_lex_state = 2}, + [105] = {.lex_state = 253, .external_lex_state = 2}, + [106] = {.lex_state = 253, .external_lex_state = 2}, + [107] = {.lex_state = 253, .external_lex_state = 2}, + [108] = {.lex_state = 253, .external_lex_state = 2}, + [109] = {.lex_state = 253, .external_lex_state = 2}, + [110] = {.lex_state = 253, .external_lex_state = 2}, + [111] = {.lex_state = 253, .external_lex_state = 2}, + [112] = {.lex_state = 253, .external_lex_state = 2}, + [113] = {.lex_state = 195, .external_lex_state = 2}, + [114] = {.lex_state = 253, .external_lex_state = 2}, + [115] = {.lex_state = 253, .external_lex_state = 2}, + [116] = {.lex_state = 253, .external_lex_state = 2}, + [117] = {.lex_state = 253, .external_lex_state = 2}, + [118] = {.lex_state = 193, .external_lex_state = 2}, + [119] = {.lex_state = 253, .external_lex_state = 2}, + [120] = {.lex_state = 253, .external_lex_state = 2}, + [121] = {.lex_state = 253, .external_lex_state = 2}, + [122] = {.lex_state = 253, .external_lex_state = 2}, + [123] = {.lex_state = 253, .external_lex_state = 2}, + [124] = {.lex_state = 253, .external_lex_state = 2}, + [125] = {.lex_state = 253, .external_lex_state = 2}, + [126] = {.lex_state = 253, .external_lex_state = 2}, + [127] = {.lex_state = 253, .external_lex_state = 2}, + [128] = {.lex_state = 253, .external_lex_state = 2}, + [129] = {.lex_state = 253, .external_lex_state = 2}, + [130] = {.lex_state = 253, .external_lex_state = 2}, + [131] = {.lex_state = 253, .external_lex_state = 2}, + [132] = {.lex_state = 253, .external_lex_state = 2}, + [133] = {.lex_state = 253, .external_lex_state = 2}, + [134] = {.lex_state = 253, .external_lex_state = 2}, + [135] = {.lex_state = 253, .external_lex_state = 2}, + [136] = {.lex_state = 253, .external_lex_state = 2}, + [137] = {.lex_state = 253, .external_lex_state = 2}, + [138] = {.lex_state = 253, .external_lex_state = 2}, + [139] = {.lex_state = 253, .external_lex_state = 2}, + [140] = {.lex_state = 253, .external_lex_state = 2}, + [141] = {.lex_state = 253, .external_lex_state = 2}, + [142] = {.lex_state = 253, .external_lex_state = 2}, + [143] = {.lex_state = 253, .external_lex_state = 2}, + [144] = {.lex_state = 253, .external_lex_state = 2}, + [145] = {.lex_state = 253, .external_lex_state = 2}, + [146] = {.lex_state = 253, .external_lex_state = 2}, + [147] = {.lex_state = 253, .external_lex_state = 2}, + [148] = {.lex_state = 253, .external_lex_state = 2}, + [149] = {.lex_state = 253, .external_lex_state = 2}, + [150] = {.lex_state = 253, .external_lex_state = 2}, + [151] = {.lex_state = 253, .external_lex_state = 2}, + [152] = {.lex_state = 253, .external_lex_state = 2}, + [153] = {.lex_state = 253, .external_lex_state = 2}, + [154] = {.lex_state = 253, .external_lex_state = 2}, + [155] = {.lex_state = 253, .external_lex_state = 2}, + [156] = {.lex_state = 253, .external_lex_state = 2}, + [157] = {.lex_state = 253, .external_lex_state = 2}, + [158] = {.lex_state = 204, .external_lex_state = 2}, + [159] = {.lex_state = 204, .external_lex_state = 2}, + [160] = {.lex_state = 204, .external_lex_state = 2}, + [161] = {.lex_state = 204, .external_lex_state = 2}, + [162] = {.lex_state = 204, .external_lex_state = 2}, + [163] = {.lex_state = 204, .external_lex_state = 2}, + [164] = {.lex_state = 204, .external_lex_state = 2}, + [165] = {.lex_state = 10, .external_lex_state = 3}, + [166] = {.lex_state = 244, .external_lex_state = 4}, + [167] = {.lex_state = 109, .external_lex_state = 4}, + [168] = {.lex_state = 244, .external_lex_state = 4}, + [169] = {.lex_state = 107, .external_lex_state = 5}, + [170] = {.lex_state = 113, .external_lex_state = 6}, + [171] = {.lex_state = 248, .external_lex_state = 6}, + [172] = {.lex_state = 113, .external_lex_state = 7}, + [173] = {.lex_state = 248, .external_lex_state = 7}, + [174] = {.lex_state = 248, .external_lex_state = 6}, + [175] = {.lex_state = 107, .external_lex_state = 8}, + [176] = {.lex_state = 248, .external_lex_state = 7}, + [177] = {.lex_state = 113, .external_lex_state = 7}, + [178] = {.lex_state = 107, .external_lex_state = 8}, + [179] = {.lex_state = 245, .external_lex_state = 9}, + [180] = {.lex_state = 245, .external_lex_state = 9}, + [181] = {.lex_state = 248, .external_lex_state = 7}, + [182] = {.lex_state = 248, .external_lex_state = 7}, + [183] = {.lex_state = 245, .external_lex_state = 9}, + [184] = {.lex_state = 106, .external_lex_state = 10}, + [185] = {.lex_state = 245, .external_lex_state = 9}, + [186] = {.lex_state = 106, .external_lex_state = 10}, + [187] = {.lex_state = 245, .external_lex_state = 9}, + [188] = {.lex_state = 120, .external_lex_state = 4}, + [189] = {.lex_state = 245, .external_lex_state = 9}, + [190] = {.lex_state = 245, .external_lex_state = 9}, + [191] = {.lex_state = 245, .external_lex_state = 9}, + [192] = {.lex_state = 245, .external_lex_state = 7}, + [193] = {.lex_state = 245, .external_lex_state = 7}, + [194] = {.lex_state = 245, .external_lex_state = 11}, + [195] = {.lex_state = 245, .external_lex_state = 7}, + [196] = {.lex_state = 245, .external_lex_state = 11}, + [197] = {.lex_state = 245, .external_lex_state = 7}, + [198] = {.lex_state = 106, .external_lex_state = 12}, + [199] = {.lex_state = 245, .external_lex_state = 11}, + [200] = {.lex_state = 106, .external_lex_state = 12}, + [201] = {.lex_state = 106, .external_lex_state = 12}, + [202] = {.lex_state = 245, .external_lex_state = 11}, + [203] = {.lex_state = 245, .external_lex_state = 7}, + [204] = {.lex_state = 123, .external_lex_state = 6}, + [205] = {.lex_state = 106, .external_lex_state = 8}, + [206] = {.lex_state = 245, .external_lex_state = 11}, + [207] = {.lex_state = 106, .external_lex_state = 8}, + [208] = {.lex_state = 245, .external_lex_state = 7}, + [209] = {.lex_state = 188, .external_lex_state = 13}, + [210] = {.lex_state = 245, .external_lex_state = 11}, + [211] = {.lex_state = 106, .external_lex_state = 8}, + [212] = {.lex_state = 245, .external_lex_state = 7}, + [213] = {.lex_state = 106, .external_lex_state = 14}, + [214] = {.lex_state = 245, .external_lex_state = 15}, + [215] = {.lex_state = 245, .external_lex_state = 7}, + [216] = {.lex_state = 245, .external_lex_state = 15}, + [217] = {.lex_state = 245, .external_lex_state = 15}, + [218] = {.lex_state = 245, .external_lex_state = 11}, + [219] = {.lex_state = 245, .external_lex_state = 11}, + [220] = {.lex_state = 245, .external_lex_state = 15}, + [221] = {.lex_state = 245, .external_lex_state = 7}, + [222] = {.lex_state = 106, .external_lex_state = 8}, + [223] = {.lex_state = 106, .external_lex_state = 8}, + [224] = {.lex_state = 245, .external_lex_state = 7}, + [225] = {.lex_state = 245, .external_lex_state = 15}, + [226] = {.lex_state = 106, .external_lex_state = 8}, + [227] = {.lex_state = 245, .external_lex_state = 15}, + [228] = {.lex_state = 245, .external_lex_state = 7}, + [229] = {.lex_state = 106, .external_lex_state = 8}, + [230] = {.lex_state = 106, .external_lex_state = 14}, + [231] = {.lex_state = 189, .external_lex_state = 16}, + [232] = {.lex_state = 123, .external_lex_state = 7}, + [233] = {.lex_state = 245, .external_lex_state = 7}, + [234] = {.lex_state = 106, .external_lex_state = 14}, + [235] = {.lex_state = 245, .external_lex_state = 7}, + [236] = {.lex_state = 245, .external_lex_state = 7}, + [237] = {.lex_state = 123, .external_lex_state = 7}, + [238] = {.lex_state = 245, .external_lex_state = 7}, + [239] = {.lex_state = 245, .external_lex_state = 11}, + [240] = {.lex_state = 245, .external_lex_state = 7}, + [241] = {.lex_state = 245, .external_lex_state = 7}, + [242] = {.lex_state = 245, .external_lex_state = 11}, + [243] = {.lex_state = 245, .external_lex_state = 11}, + [244] = {.lex_state = 245, .external_lex_state = 7}, + [245] = {.lex_state = 110, .external_lex_state = 17}, + [246] = {.lex_state = 245, .external_lex_state = 15}, + [247] = {.lex_state = 245, .external_lex_state = 15}, + [248] = {.lex_state = 106, .external_lex_state = 8}, + [249] = {.lex_state = 106, .external_lex_state = 14}, + [250] = {.lex_state = 245, .external_lex_state = 15}, + [251] = {.lex_state = 245, .external_lex_state = 9}, + [252] = {.lex_state = 245, .external_lex_state = 7}, + [253] = {.lex_state = 245, .external_lex_state = 7}, + [254] = {.lex_state = 245, .external_lex_state = 7}, + [255] = {.lex_state = 245, .external_lex_state = 7}, + [256] = {.lex_state = 245, .external_lex_state = 7}, + [257] = {.lex_state = 245, .external_lex_state = 7}, + [258] = {.lex_state = 245, .external_lex_state = 15}, + [259] = {.lex_state = 245, .external_lex_state = 9}, + [260] = {.lex_state = 245, .external_lex_state = 15}, + [261] = {.lex_state = 245, .external_lex_state = 15}, + [262] = {.lex_state = 245, .external_lex_state = 7}, + [263] = {.lex_state = 245, .external_lex_state = 15}, + [264] = {.lex_state = 245, .external_lex_state = 7}, + [265] = {.lex_state = 189, .external_lex_state = 18}, + [266] = {.lex_state = 245, .external_lex_state = 7}, + [267] = {.lex_state = 106, .external_lex_state = 8}, + [268] = {.lex_state = 245, .external_lex_state = 15}, + [269] = {.lex_state = 110, .external_lex_state = 17}, + [270] = {.lex_state = 189, .external_lex_state = 18}, + [271] = {.lex_state = 245, .external_lex_state = 7}, + [272] = {.lex_state = 245, .external_lex_state = 15}, + [273] = {.lex_state = 110, .external_lex_state = 17}, + [274] = {.lex_state = 110, .external_lex_state = 17}, + [275] = {.lex_state = 110, .external_lex_state = 17}, + [276] = {.lex_state = 245, .external_lex_state = 7}, + [277] = {.lex_state = 245, .external_lex_state = 7}, + [278] = {.lex_state = 110, .external_lex_state = 17}, + [279] = {.lex_state = 245, .external_lex_state = 7}, + [280] = {.lex_state = 245, .external_lex_state = 7}, + [281] = {.lex_state = 245, .external_lex_state = 7}, + [282] = {.lex_state = 106, .external_lex_state = 14}, + [283] = {.lex_state = 247, .external_lex_state = 19}, + [284] = {.lex_state = 245, .external_lex_state = 15}, + [285] = {.lex_state = 205, .external_lex_state = 20}, + [286] = {.lex_state = 111, .external_lex_state = 21}, + [287] = {.lex_state = 205, .external_lex_state = 20}, + [288] = {.lex_state = 111, .external_lex_state = 21}, + [289] = {.lex_state = 111, .external_lex_state = 21}, + [290] = {.lex_state = 245, .external_lex_state = 15}, + [291] = {.lex_state = 247, .external_lex_state = 19}, + [292] = {.lex_state = 247, .external_lex_state = 19}, + [293] = {.lex_state = 247, .external_lex_state = 19}, + [294] = {.lex_state = 247, .external_lex_state = 19}, + [295] = {.lex_state = 245, .external_lex_state = 7}, + [296] = {.lex_state = 245, .external_lex_state = 7}, + [297] = {.lex_state = 111, .external_lex_state = 21}, + [298] = {.lex_state = 245, .external_lex_state = 7}, + [299] = {.lex_state = 247, .external_lex_state = 19}, + [300] = {.lex_state = 247, .external_lex_state = 19}, + [301] = {.lex_state = 245, .external_lex_state = 7}, + [302] = {.lex_state = 247, .external_lex_state = 19}, + [303] = {.lex_state = 245, .external_lex_state = 15}, + [304] = {.lex_state = 245, .external_lex_state = 15}, + [305] = {.lex_state = 247, .external_lex_state = 22}, + [306] = {.lex_state = 245, .external_lex_state = 11}, + [307] = {.lex_state = 111, .external_lex_state = 21}, + [308] = {.lex_state = 111, .external_lex_state = 21}, + [309] = {.lex_state = 247, .external_lex_state = 23}, + [310] = {.lex_state = 247, .external_lex_state = 19}, + [311] = {.lex_state = 111, .external_lex_state = 24}, + [312] = {.lex_state = 205, .external_lex_state = 2}, + [313] = {.lex_state = 247, .external_lex_state = 19}, + [314] = {.lex_state = 247, .external_lex_state = 19}, + [315] = {.lex_state = 247, .external_lex_state = 19}, + [316] = {.lex_state = 254, .external_lex_state = 25}, + [317] = {.lex_state = 254, .external_lex_state = 25}, + [318] = {.lex_state = 254, .external_lex_state = 25}, + [319] = {.lex_state = 111, .external_lex_state = 24}, + [320] = {.lex_state = 247, .external_lex_state = 22}, + [321] = {.lex_state = 254, .external_lex_state = 25}, + [322] = {.lex_state = 247, .external_lex_state = 23}, + [323] = {.lex_state = 247, .external_lex_state = 19}, + [324] = {.lex_state = 254, .external_lex_state = 25}, + [325] = {.lex_state = 247, .external_lex_state = 23}, + [326] = {.lex_state = 254, .external_lex_state = 25}, + [327] = {.lex_state = 247, .external_lex_state = 22}, + [328] = {.lex_state = 254, .external_lex_state = 25}, + [329] = {.lex_state = 254, .external_lex_state = 25}, + [330] = {.lex_state = 254, .external_lex_state = 25}, + [331] = {.lex_state = 254, .external_lex_state = 25}, + [332] = {.lex_state = 254, .external_lex_state = 25}, + [333] = {.lex_state = 247, .external_lex_state = 22}, + [334] = {.lex_state = 247, .external_lex_state = 22}, + [335] = {.lex_state = 254, .external_lex_state = 25}, + [336] = {.lex_state = 111, .external_lex_state = 24}, + [337] = {.lex_state = 247, .external_lex_state = 23}, + [338] = {.lex_state = 247, .external_lex_state = 23}, + [339] = {.lex_state = 247, .external_lex_state = 23}, + [340] = {.lex_state = 111, .external_lex_state = 24}, + [341] = {.lex_state = 111, .external_lex_state = 24}, + [342] = {.lex_state = 247, .external_lex_state = 23}, + [343] = {.lex_state = 247, .external_lex_state = 23}, + [344] = {.lex_state = 247, .external_lex_state = 22}, + [345] = {.lex_state = 254, .external_lex_state = 25}, + [346] = {.lex_state = 254, .external_lex_state = 25}, + [347] = {.lex_state = 254, .external_lex_state = 25}, + [348] = {.lex_state = 247, .external_lex_state = 19}, + [349] = {.lex_state = 111, .external_lex_state = 21}, + [350] = {.lex_state = 205, .external_lex_state = 2}, + [351] = {.lex_state = 247, .external_lex_state = 23}, + [352] = {.lex_state = 111, .external_lex_state = 21}, + [353] = {.lex_state = 245, .external_lex_state = 7}, + [354] = {.lex_state = 247, .external_lex_state = 19}, + [355] = {.lex_state = 205, .external_lex_state = 2}, + [356] = {.lex_state = 111, .external_lex_state = 21}, + [357] = {.lex_state = 111, .external_lex_state = 26}, + [358] = {.lex_state = 125, .external_lex_state = 27}, + [359] = {.lex_state = 111, .external_lex_state = 21}, + [360] = {.lex_state = 254, .external_lex_state = 25}, + [361] = {.lex_state = 111, .external_lex_state = 24}, + [362] = {.lex_state = 247, .external_lex_state = 19}, + [363] = {.lex_state = 247, .external_lex_state = 19}, + [364] = {.lex_state = 205, .external_lex_state = 2}, + [365] = {.lex_state = 247, .external_lex_state = 19}, + [366] = {.lex_state = 205, .external_lex_state = 2}, + [367] = {.lex_state = 111, .external_lex_state = 21}, + [368] = {.lex_state = 111, .external_lex_state = 21}, + [369] = {.lex_state = 247, .external_lex_state = 19}, + [370] = {.lex_state = 254, .external_lex_state = 25}, + [371] = {.lex_state = 247, .external_lex_state = 23}, + [372] = {.lex_state = 247, .external_lex_state = 23}, + [373] = {.lex_state = 247, .external_lex_state = 19}, + [374] = {.lex_state = 247, .external_lex_state = 19}, + [375] = {.lex_state = 247, .external_lex_state = 19}, + [376] = {.lex_state = 247, .external_lex_state = 19}, + [377] = {.lex_state = 247, .external_lex_state = 23}, + [378] = {.lex_state = 245, .external_lex_state = 7}, + [379] = {.lex_state = 111, .external_lex_state = 26}, + [380] = {.lex_state = 247, .external_lex_state = 19}, + [381] = {.lex_state = 247, .external_lex_state = 19}, + [382] = {.lex_state = 247, .external_lex_state = 19}, + [383] = {.lex_state = 245, .external_lex_state = 7}, + [384] = {.lex_state = 111, .external_lex_state = 21}, + [385] = {.lex_state = 111, .external_lex_state = 26}, + [386] = {.lex_state = 111, .external_lex_state = 21}, + [387] = {.lex_state = 111, .external_lex_state = 21}, + [388] = {.lex_state = 111, .external_lex_state = 21}, + [389] = {.lex_state = 111, .external_lex_state = 21}, + [390] = {.lex_state = 245, .external_lex_state = 11}, + [391] = {.lex_state = 245, .external_lex_state = 11}, + [392] = {.lex_state = 247, .external_lex_state = 19}, + [393] = {.lex_state = 247, .external_lex_state = 19}, + [394] = {.lex_state = 247, .external_lex_state = 19}, + [395] = {.lex_state = 247, .external_lex_state = 19}, + [396] = {.lex_state = 247, .external_lex_state = 19}, + [397] = {.lex_state = 247, .external_lex_state = 19}, + [398] = {.lex_state = 111, .external_lex_state = 21}, + [399] = {.lex_state = 247, .external_lex_state = 19}, + [400] = {.lex_state = 247, .external_lex_state = 19}, + [401] = {.lex_state = 247, .external_lex_state = 19}, + [402] = {.lex_state = 247, .external_lex_state = 19}, + [403] = {.lex_state = 254, .external_lex_state = 25}, + [404] = {.lex_state = 254, .external_lex_state = 25}, + [405] = {.lex_state = 254, .external_lex_state = 25}, + [406] = {.lex_state = 254, .external_lex_state = 25}, + [407] = {.lex_state = 254, .external_lex_state = 25}, + [408] = {.lex_state = 254, .external_lex_state = 25}, + [409] = {.lex_state = 254, .external_lex_state = 25}, + [410] = {.lex_state = 254, .external_lex_state = 25}, + [411] = {.lex_state = 254, .external_lex_state = 25}, + [412] = {.lex_state = 254, .external_lex_state = 25}, + [413] = {.lex_state = 254, .external_lex_state = 25}, + [414] = {.lex_state = 254, .external_lex_state = 25}, + [415] = {.lex_state = 254, .external_lex_state = 25}, + [416] = {.lex_state = 247, .external_lex_state = 19}, + [417] = {.lex_state = 205, .external_lex_state = 2}, + [418] = {.lex_state = 247, .external_lex_state = 19}, + [419] = {.lex_state = 247, .external_lex_state = 19}, + [420] = {.lex_state = 247, .external_lex_state = 19}, + [421] = {.lex_state = 205, .external_lex_state = 2}, + [422] = {.lex_state = 247, .external_lex_state = 22}, + [423] = {.lex_state = 254, .external_lex_state = 25}, + [424] = {.lex_state = 111, .external_lex_state = 26}, + [425] = {.lex_state = 111, .external_lex_state = 24}, + [426] = {.lex_state = 111, .external_lex_state = 24}, + [427] = {.lex_state = 111, .external_lex_state = 24}, + [428] = {.lex_state = 111, .external_lex_state = 28}, + [429] = {.lex_state = 111, .external_lex_state = 24}, + [430] = {.lex_state = 111, .external_lex_state = 24}, + [431] = {.lex_state = 48, .external_lex_state = 7}, + [432] = {.lex_state = 111, .external_lex_state = 28}, + [433] = {.lex_state = 254, .external_lex_state = 25}, + [434] = {.lex_state = 205, .external_lex_state = 29}, + [435] = {.lex_state = 111, .external_lex_state = 24}, + [436] = {.lex_state = 254, .external_lex_state = 25}, + [437] = {.lex_state = 253, .external_lex_state = 2}, + [438] = {.lex_state = 247, .external_lex_state = 23}, + [439] = {.lex_state = 247, .external_lex_state = 23}, + [440] = {.lex_state = 247, .external_lex_state = 23}, + [441] = {.lex_state = 247, .external_lex_state = 23}, + [442] = {.lex_state = 247, .external_lex_state = 23}, + [443] = {.lex_state = 245, .external_lex_state = 15}, + [444] = {.lex_state = 245, .external_lex_state = 15}, + [445] = {.lex_state = 247, .external_lex_state = 23}, + [446] = {.lex_state = 247, .external_lex_state = 30}, + [447] = {.lex_state = 247, .external_lex_state = 30}, + [448] = {.lex_state = 247, .external_lex_state = 23}, + [449] = {.lex_state = 254, .external_lex_state = 25}, + [450] = {.lex_state = 247, .external_lex_state = 23}, + [451] = {.lex_state = 254, .external_lex_state = 25}, + [452] = {.lex_state = 254, .external_lex_state = 25}, + [453] = {.lex_state = 254, .external_lex_state = 25}, + [454] = {.lex_state = 247, .external_lex_state = 23}, + [455] = {.lex_state = 247, .external_lex_state = 23}, + [456] = {.lex_state = 247, .external_lex_state = 23}, + [457] = {.lex_state = 247, .external_lex_state = 23}, + [458] = {.lex_state = 247, .external_lex_state = 23}, + [459] = {.lex_state = 247, .external_lex_state = 23}, + [460] = {.lex_state = 247, .external_lex_state = 23}, + [461] = {.lex_state = 254, .external_lex_state = 25}, + [462] = {.lex_state = 196, .external_lex_state = 25}, + [463] = {.lex_state = 254, .external_lex_state = 25}, + [464] = {.lex_state = 108, .external_lex_state = 7}, + [465] = {.lex_state = 205, .external_lex_state = 29}, + [466] = {.lex_state = 247, .external_lex_state = 23}, + [467] = {.lex_state = 254, .external_lex_state = 25}, + [468] = {.lex_state = 254, .external_lex_state = 25}, + [469] = {.lex_state = 111, .external_lex_state = 24}, + [470] = {.lex_state = 254, .external_lex_state = 25}, + [471] = {.lex_state = 254, .external_lex_state = 25}, + [472] = {.lex_state = 254, .external_lex_state = 25}, + [473] = {.lex_state = 254, .external_lex_state = 25}, + [474] = {.lex_state = 247, .external_lex_state = 30}, + [475] = {.lex_state = 254, .external_lex_state = 25}, + [476] = {.lex_state = 196, .external_lex_state = 25}, + [477] = {.lex_state = 247, .external_lex_state = 22}, + [478] = {.lex_state = 254, .external_lex_state = 25}, + [479] = {.lex_state = 247, .external_lex_state = 22}, + [480] = {.lex_state = 111, .external_lex_state = 26}, + [481] = {.lex_state = 48, .external_lex_state = 7}, + [482] = {.lex_state = 111, .external_lex_state = 26}, + [483] = {.lex_state = 196, .external_lex_state = 25}, + [484] = {.lex_state = 196, .external_lex_state = 25}, + [485] = {.lex_state = 196, .external_lex_state = 25}, + [486] = {.lex_state = 196, .external_lex_state = 25}, + [487] = {.lex_state = 205, .external_lex_state = 29}, + [488] = {.lex_state = 247, .external_lex_state = 22}, + [489] = {.lex_state = 254, .external_lex_state = 25}, + [490] = {.lex_state = 111, .external_lex_state = 26}, + [491] = {.lex_state = 111, .external_lex_state = 24}, + [492] = {.lex_state = 196, .external_lex_state = 25}, + [493] = {.lex_state = 246, .external_lex_state = 7}, + [494] = {.lex_state = 196, .external_lex_state = 25}, + [495] = {.lex_state = 196, .external_lex_state = 25}, + [496] = {.lex_state = 247, .external_lex_state = 22}, + [497] = {.lex_state = 111, .external_lex_state = 26}, + [498] = {.lex_state = 111, .external_lex_state = 26}, + [499] = {.lex_state = 111, .external_lex_state = 24}, + [500] = {.lex_state = 247, .external_lex_state = 23}, + [501] = {.lex_state = 247, .external_lex_state = 23}, + [502] = {.lex_state = 254, .external_lex_state = 25}, + [503] = {.lex_state = 254, .external_lex_state = 25}, + [504] = {.lex_state = 247, .external_lex_state = 23}, + [505] = {.lex_state = 254, .external_lex_state = 25}, + [506] = {.lex_state = 111, .external_lex_state = 28}, + [507] = {.lex_state = 254, .external_lex_state = 25}, + [508] = {.lex_state = 254, .external_lex_state = 25}, + [509] = {.lex_state = 111, .external_lex_state = 26}, + [510] = {.lex_state = 111, .external_lex_state = 24}, + [511] = {.lex_state = 196, .external_lex_state = 25}, + [512] = {.lex_state = 196, .external_lex_state = 25}, + [513] = {.lex_state = 196, .external_lex_state = 25}, + [514] = {.lex_state = 111, .external_lex_state = 24}, + [515] = {.lex_state = 111, .external_lex_state = 24}, + [516] = {.lex_state = 196, .external_lex_state = 25}, + [517] = {.lex_state = 196, .external_lex_state = 25}, + [518] = {.lex_state = 196, .external_lex_state = 25}, + [519] = {.lex_state = 247, .external_lex_state = 22}, + [520] = {.lex_state = 111, .external_lex_state = 26}, + [521] = {.lex_state = 247, .external_lex_state = 22}, + [522] = {.lex_state = 247, .external_lex_state = 22}, + [523] = {.lex_state = 196, .external_lex_state = 25}, + [524] = {.lex_state = 247, .external_lex_state = 23}, + [525] = {.lex_state = 108, .external_lex_state = 7}, + [526] = {.lex_state = 245, .external_lex_state = 7}, + [527] = {.lex_state = 196, .external_lex_state = 25}, + [528] = {.lex_state = 254, .external_lex_state = 25}, + [529] = {.lex_state = 254, .external_lex_state = 25}, + [530] = {.lex_state = 247, .external_lex_state = 22}, + [531] = {.lex_state = 116, .external_lex_state = 8}, + [532] = {.lex_state = 247, .external_lex_state = 23}, + [533] = {.lex_state = 247, .external_lex_state = 22}, + [534] = {.lex_state = 247, .external_lex_state = 22}, + [535] = {.lex_state = 254, .external_lex_state = 25}, + [536] = {.lex_state = 247, .external_lex_state = 23}, + [537] = {.lex_state = 111, .external_lex_state = 26}, + [538] = {.lex_state = 254, .external_lex_state = 25}, + [539] = {.lex_state = 247, .external_lex_state = 22}, + [540] = {.lex_state = 246, .external_lex_state = 7}, + [541] = {.lex_state = 247, .external_lex_state = 22}, + [542] = {.lex_state = 247, .external_lex_state = 22}, + [543] = {.lex_state = 247, .external_lex_state = 22}, + [544] = {.lex_state = 247, .external_lex_state = 22}, + [545] = {.lex_state = 247, .external_lex_state = 30}, + [546] = {.lex_state = 111, .external_lex_state = 26}, + [547] = {.lex_state = 116, .external_lex_state = 8}, + [548] = {.lex_state = 247, .external_lex_state = 23}, + [549] = {.lex_state = 247, .external_lex_state = 23}, + [550] = {.lex_state = 247, .external_lex_state = 23}, + [551] = {.lex_state = 247, .external_lex_state = 22}, + [552] = {.lex_state = 247, .external_lex_state = 22}, + [553] = {.lex_state = 247, .external_lex_state = 22}, + [554] = {.lex_state = 247, .external_lex_state = 22}, + [555] = {.lex_state = 247, .external_lex_state = 22}, + [556] = {.lex_state = 247, .external_lex_state = 23}, + [557] = {.lex_state = 196, .external_lex_state = 25}, + [558] = {.lex_state = 205, .external_lex_state = 18}, + [559] = {.lex_state = 254, .external_lex_state = 25}, + [560] = {.lex_state = 247, .external_lex_state = 22}, + [561] = {.lex_state = 247, .external_lex_state = 23}, + [562] = {.lex_state = 247, .external_lex_state = 23}, + [563] = {.lex_state = 247, .external_lex_state = 22}, + [564] = {.lex_state = 111, .external_lex_state = 26}, + [565] = {.lex_state = 111, .external_lex_state = 26}, + [566] = {.lex_state = 247, .external_lex_state = 23}, + [567] = {.lex_state = 245, .external_lex_state = 15}, + [568] = {.lex_state = 196, .external_lex_state = 25}, + [569] = {.lex_state = 196, .external_lex_state = 25}, + [570] = {.lex_state = 196, .external_lex_state = 25}, + [571] = {.lex_state = 196, .external_lex_state = 25}, + [572] = {.lex_state = 196, .external_lex_state = 25}, + [573] = {.lex_state = 196, .external_lex_state = 25}, + [574] = {.lex_state = 196, .external_lex_state = 25}, + [575] = {.lex_state = 196, .external_lex_state = 25}, + [576] = {.lex_state = 196, .external_lex_state = 25}, + [577] = {.lex_state = 196, .external_lex_state = 25}, + [578] = {.lex_state = 196, .external_lex_state = 25}, + [579] = {.lex_state = 196, .external_lex_state = 25}, + [580] = {.lex_state = 196, .external_lex_state = 25}, + [581] = {.lex_state = 111, .external_lex_state = 24}, + [582] = {.lex_state = 111, .external_lex_state = 26}, + [583] = {.lex_state = 205, .external_lex_state = 18}, + [584] = {.lex_state = 254, .external_lex_state = 25}, + [585] = {.lex_state = 254, .external_lex_state = 25}, + [586] = {.lex_state = 247, .external_lex_state = 22}, + [587] = {.lex_state = 205, .external_lex_state = 18}, + [588] = {.lex_state = 247, .external_lex_state = 30}, + [589] = {.lex_state = 247, .external_lex_state = 22}, + [590] = {.lex_state = 247, .external_lex_state = 22}, + [591] = {.lex_state = 254, .external_lex_state = 25}, + [592] = {.lex_state = 247, .external_lex_state = 22}, + [593] = {.lex_state = 247, .external_lex_state = 22}, + [594] = {.lex_state = 111, .external_lex_state = 26}, + [595] = {.lex_state = 245, .external_lex_state = 7}, + [596] = {.lex_state = 247, .external_lex_state = 22}, + [597] = {.lex_state = 247, .external_lex_state = 22}, + [598] = {.lex_state = 247, .external_lex_state = 23}, + [599] = {.lex_state = 247, .external_lex_state = 23}, + [600] = {.lex_state = 247, .external_lex_state = 30}, + [601] = {.lex_state = 196, .external_lex_state = 25}, + [602] = {.lex_state = 111, .external_lex_state = 24}, + [603] = {.lex_state = 247, .external_lex_state = 23}, + [604] = {.lex_state = 247, .external_lex_state = 23}, + [605] = {.lex_state = 247, .external_lex_state = 30}, + [606] = {.lex_state = 111, .external_lex_state = 28}, + [607] = {.lex_state = 111, .external_lex_state = 28}, + [608] = {.lex_state = 111, .external_lex_state = 28}, + [609] = {.lex_state = 111, .external_lex_state = 28}, + [610] = {.lex_state = 111, .external_lex_state = 28}, + [611] = {.lex_state = 111, .external_lex_state = 28}, + [612] = {.lex_state = 111, .external_lex_state = 28}, + [613] = {.lex_state = 247, .external_lex_state = 30}, + [614] = {.lex_state = 111, .external_lex_state = 28}, + [615] = {.lex_state = 192, .external_lex_state = 2}, + [616] = {.lex_state = 111, .external_lex_state = 28}, + [617] = {.lex_state = 111, .external_lex_state = 28}, + [618] = {.lex_state = 245, .external_lex_state = 7}, + [619] = {.lex_state = 245, .external_lex_state = 7}, + [620] = {.lex_state = 245, .external_lex_state = 7}, + [621] = {.lex_state = 247, .external_lex_state = 30}, + [622] = {.lex_state = 106, .external_lex_state = 10}, + [623] = {.lex_state = 111, .external_lex_state = 28}, + [624] = {.lex_state = 245, .external_lex_state = 9}, + [625] = {.lex_state = 247, .external_lex_state = 30}, + [626] = {.lex_state = 245, .external_lex_state = 7}, + [627] = {.lex_state = 247, .external_lex_state = 30}, + [628] = {.lex_state = 247, .external_lex_state = 30}, + [629] = {.lex_state = 247, .external_lex_state = 30}, + [630] = {.lex_state = 247, .external_lex_state = 30}, + [631] = {.lex_state = 247, .external_lex_state = 30}, + [632] = {.lex_state = 247, .external_lex_state = 30}, + [633] = {.lex_state = 247, .external_lex_state = 30}, + [634] = {.lex_state = 247, .external_lex_state = 30}, + [635] = {.lex_state = 247, .external_lex_state = 30}, + [636] = {.lex_state = 245, .external_lex_state = 9}, + [637] = {.lex_state = 246, .external_lex_state = 7}, + [638] = {.lex_state = 205, .external_lex_state = 18}, + [639] = {.lex_state = 205, .external_lex_state = 18}, + [640] = {.lex_state = 247, .external_lex_state = 30}, + [641] = {.lex_state = 247, .external_lex_state = 30}, + [642] = {.lex_state = 247, .external_lex_state = 30}, + [643] = {.lex_state = 247, .external_lex_state = 30}, + [644] = {.lex_state = 247, .external_lex_state = 30}, + [645] = {.lex_state = 247, .external_lex_state = 30}, + [646] = {.lex_state = 111, .external_lex_state = 28}, + [647] = {.lex_state = 247, .external_lex_state = 30}, + [648] = {.lex_state = 247, .external_lex_state = 30}, + [649] = {.lex_state = 247, .external_lex_state = 30}, + [650] = {.lex_state = 247, .external_lex_state = 30}, + [651] = {.lex_state = 205, .external_lex_state = 31}, + [652] = {.lex_state = 247, .external_lex_state = 30}, + [653] = {.lex_state = 205, .external_lex_state = 31}, + [654] = {.lex_state = 247, .external_lex_state = 30}, + [655] = {.lex_state = 247, .external_lex_state = 30}, + [656] = {.lex_state = 111, .external_lex_state = 28}, + [657] = {.lex_state = 247, .external_lex_state = 30}, + [658] = {.lex_state = 245, .external_lex_state = 15}, + [659] = {.lex_state = 111, .external_lex_state = 28}, + [660] = {.lex_state = 247, .external_lex_state = 30}, + [661] = {.lex_state = 247, .external_lex_state = 30}, + [662] = {.lex_state = 247, .external_lex_state = 30}, + [663] = {.lex_state = 246, .external_lex_state = 7}, + [664] = {.lex_state = 192, .external_lex_state = 2}, + [665] = {.lex_state = 245, .external_lex_state = 15}, + [666] = {.lex_state = 205, .external_lex_state = 31}, + [667] = {.lex_state = 253, .external_lex_state = 2}, + [668] = {.lex_state = 245, .external_lex_state = 7}, + [669] = {.lex_state = 245, .external_lex_state = 7}, + [670] = {.lex_state = 245, .external_lex_state = 7}, + [671] = {.lex_state = 253, .external_lex_state = 2}, + [672] = {.lex_state = 205, .external_lex_state = 32}, + [673] = {.lex_state = 253, .external_lex_state = 2}, + [674] = {.lex_state = 253, .external_lex_state = 2}, + [675] = {.lex_state = 245, .external_lex_state = 7}, + [676] = {.lex_state = 106, .external_lex_state = 8}, + [677] = {.lex_state = 245, .external_lex_state = 7}, + [678] = {.lex_state = 245, .external_lex_state = 7}, + [679] = {.lex_state = 245, .external_lex_state = 7}, + [680] = {.lex_state = 245, .external_lex_state = 7}, + [681] = {.lex_state = 245, .external_lex_state = 7}, + [682] = {.lex_state = 245, .external_lex_state = 7}, + [683] = {.lex_state = 106, .external_lex_state = 8}, + [684] = {.lex_state = 106, .external_lex_state = 12}, + [685] = {.lex_state = 245, .external_lex_state = 7}, + [686] = {.lex_state = 205, .external_lex_state = 31}, + [687] = {.lex_state = 106, .external_lex_state = 12}, + [688] = {.lex_state = 191, .external_lex_state = 33}, + [689] = {.lex_state = 245, .external_lex_state = 7}, + [690] = {.lex_state = 205, .external_lex_state = 31}, + [691] = {.lex_state = 245, .external_lex_state = 7}, + [692] = {.lex_state = 253, .external_lex_state = 2}, + [693] = {.lex_state = 245, .external_lex_state = 7}, + [694] = {.lex_state = 247, .external_lex_state = 19}, + [695] = {.lex_state = 106, .external_lex_state = 8}, + [696] = {.lex_state = 245, .external_lex_state = 7}, + [697] = {.lex_state = 245, .external_lex_state = 7}, + [698] = {.lex_state = 245, .external_lex_state = 7}, + [699] = {.lex_state = 245, .external_lex_state = 7}, + [700] = {.lex_state = 245, .external_lex_state = 7}, + [701] = {.lex_state = 245, .external_lex_state = 7}, + [702] = {.lex_state = 245, .external_lex_state = 7}, + [703] = {.lex_state = 245, .external_lex_state = 7}, + [704] = {.lex_state = 245, .external_lex_state = 7}, + [705] = {.lex_state = 245, .external_lex_state = 7}, + [706] = {.lex_state = 245, .external_lex_state = 11}, + [707] = {.lex_state = 245, .external_lex_state = 7}, + [708] = {.lex_state = 205, .external_lex_state = 18}, + [709] = {.lex_state = 5, .external_lex_state = 2}, + [710] = {.lex_state = 245, .external_lex_state = 7}, + [711] = {.lex_state = 253, .external_lex_state = 2}, + [712] = {.lex_state = 245, .external_lex_state = 11}, + [713] = {.lex_state = 205, .external_lex_state = 32}, + [714] = {.lex_state = 245, .external_lex_state = 7}, + [715] = {.lex_state = 245, .external_lex_state = 11}, + [716] = {.lex_state = 191, .external_lex_state = 33}, + [717] = {.lex_state = 245, .external_lex_state = 11}, + [718] = {.lex_state = 253, .external_lex_state = 2}, + [719] = {.lex_state = 253, .external_lex_state = 2}, + [720] = {.lex_state = 247, .external_lex_state = 19}, + [721] = {.lex_state = 245, .external_lex_state = 7}, + [722] = {.lex_state = 253, .external_lex_state = 2}, + [723] = {.lex_state = 253, .external_lex_state = 2}, + [724] = {.lex_state = 245, .external_lex_state = 7}, + [725] = {.lex_state = 245, .external_lex_state = 7}, + [726] = {.lex_state = 245, .external_lex_state = 7}, + [727] = {.lex_state = 205, .external_lex_state = 32}, + [728] = {.lex_state = 253, .external_lex_state = 2}, + [729] = {.lex_state = 245, .external_lex_state = 7}, + [730] = {.lex_state = 245, .external_lex_state = 7}, + [731] = {.lex_state = 253, .external_lex_state = 2}, + [732] = {.lex_state = 205, .external_lex_state = 32}, + [733] = {.lex_state = 205, .external_lex_state = 32}, + [734] = {.lex_state = 247, .external_lex_state = 19}, + [735] = {.lex_state = 187, .external_lex_state = 32}, + [736] = {.lex_state = 245, .external_lex_state = 7}, + [737] = {.lex_state = 245, .external_lex_state = 7}, + [738] = {.lex_state = 253, .external_lex_state = 2}, + [739] = {.lex_state = 253, .external_lex_state = 2}, + [740] = {.lex_state = 253, .external_lex_state = 2}, + [741] = {.lex_state = 245, .external_lex_state = 7}, + [742] = {.lex_state = 106, .external_lex_state = 8}, + [743] = {.lex_state = 205, .external_lex_state = 32}, + [744] = {.lex_state = 106, .external_lex_state = 8}, + [745] = {.lex_state = 245, .external_lex_state = 7}, + [746] = {.lex_state = 245, .external_lex_state = 7}, + [747] = {.lex_state = 245, .external_lex_state = 7}, + [748] = {.lex_state = 245, .external_lex_state = 7}, + [749] = {.lex_state = 245, .external_lex_state = 7}, + [750] = {.lex_state = 253, .external_lex_state = 2}, + [751] = {.lex_state = 191, .external_lex_state = 33}, + [752] = {.lex_state = 191, .external_lex_state = 33}, + [753] = {.lex_state = 191, .external_lex_state = 33}, + [754] = {.lex_state = 191, .external_lex_state = 33}, + [755] = {.lex_state = 191, .external_lex_state = 33}, + [756] = {.lex_state = 191, .external_lex_state = 33}, + [757] = {.lex_state = 191, .external_lex_state = 33}, + [758] = {.lex_state = 191, .external_lex_state = 33}, + [759] = {.lex_state = 191, .external_lex_state = 33}, + [760] = {.lex_state = 191, .external_lex_state = 33}, + [761] = {.lex_state = 191, .external_lex_state = 33}, + [762] = {.lex_state = 191, .external_lex_state = 33}, + [763] = {.lex_state = 191, .external_lex_state = 33}, + [764] = {.lex_state = 191, .external_lex_state = 33}, + [765] = {.lex_state = 205, .external_lex_state = 32}, + [766] = {.lex_state = 245, .external_lex_state = 7}, + [767] = {.lex_state = 205, .external_lex_state = 18}, + [768] = {.lex_state = 245, .external_lex_state = 7}, + [769] = {.lex_state = 247, .external_lex_state = 23}, + [770] = {.lex_state = 253, .external_lex_state = 2}, + [771] = {.lex_state = 206, .external_lex_state = 34}, + [772] = {.lex_state = 253, .external_lex_state = 2}, + [773] = {.lex_state = 193, .external_lex_state = 2}, + [774] = {.lex_state = 253, .external_lex_state = 2}, + [775] = {.lex_state = 253, .external_lex_state = 2}, + [776] = {.lex_state = 195, .external_lex_state = 2}, + [777] = {.lex_state = 206, .external_lex_state = 34}, + [778] = {.lex_state = 253, .external_lex_state = 2}, + [779] = {.lex_state = 253, .external_lex_state = 2}, + [780] = {.lex_state = 247, .external_lex_state = 22}, + [781] = {.lex_state = 194, .external_lex_state = 2}, + [782] = {.lex_state = 253, .external_lex_state = 2}, + [783] = {.lex_state = 194, .external_lex_state = 2}, + [784] = {.lex_state = 253, .external_lex_state = 2}, + [785] = {.lex_state = 253, .external_lex_state = 2}, + [786] = {.lex_state = 245, .external_lex_state = 7}, + [787] = {.lex_state = 245, .external_lex_state = 7}, + [788] = {.lex_state = 253, .external_lex_state = 2}, + [789] = {.lex_state = 253, .external_lex_state = 2}, + [790] = {.lex_state = 253, .external_lex_state = 2}, + [791] = {.lex_state = 253, .external_lex_state = 2}, + [792] = {.lex_state = 253, .external_lex_state = 2}, + [793] = {.lex_state = 206, .external_lex_state = 34}, + [794] = {.lex_state = 253, .external_lex_state = 2}, + [795] = {.lex_state = 247, .external_lex_state = 23}, + [796] = {.lex_state = 247, .external_lex_state = 22}, + [797] = {.lex_state = 253, .external_lex_state = 2}, + [798] = {.lex_state = 195, .external_lex_state = 2}, + [799] = {.lex_state = 247, .external_lex_state = 23}, + [800] = {.lex_state = 247, .external_lex_state = 23}, + [801] = {.lex_state = 245, .external_lex_state = 17}, + [802] = {.lex_state = 206, .external_lex_state = 34}, + [803] = {.lex_state = 245, .external_lex_state = 17}, + [804] = {.lex_state = 245, .external_lex_state = 17}, + [805] = {.lex_state = 193, .external_lex_state = 2}, + [806] = {.lex_state = 247, .external_lex_state = 23}, + [807] = {.lex_state = 206, .external_lex_state = 34}, + [808] = {.lex_state = 253, .external_lex_state = 2}, + [809] = {.lex_state = 206, .external_lex_state = 34}, + [810] = {.lex_state = 206, .external_lex_state = 35}, + [811] = {.lex_state = 206, .external_lex_state = 34}, + [812] = {.lex_state = 206, .external_lex_state = 34}, + [813] = {.lex_state = 206, .external_lex_state = 34}, + [814] = {.lex_state = 206, .external_lex_state = 34}, + [815] = {.lex_state = 206, .external_lex_state = 35}, + [816] = {.lex_state = 206, .external_lex_state = 34}, + [817] = {.lex_state = 206, .external_lex_state = 34}, + [818] = {.lex_state = 206, .external_lex_state = 34}, + [819] = {.lex_state = 206, .external_lex_state = 34}, + [820] = {.lex_state = 206, .external_lex_state = 34}, + [821] = {.lex_state = 206, .external_lex_state = 34}, + [822] = {.lex_state = 206, .external_lex_state = 36}, + [823] = {.lex_state = 206, .external_lex_state = 34}, + [824] = {.lex_state = 206, .external_lex_state = 36}, + [825] = {.lex_state = 253, .external_lex_state = 2}, + [826] = {.lex_state = 206, .external_lex_state = 34}, + [827] = {.lex_state = 247, .external_lex_state = 30}, + [828] = {.lex_state = 206, .external_lex_state = 35}, + [829] = {.lex_state = 253, .external_lex_state = 2}, + [830] = {.lex_state = 206, .external_lex_state = 36}, + [831] = {.lex_state = 253, .external_lex_state = 2}, + [832] = {.lex_state = 253, .external_lex_state = 2}, + [833] = {.lex_state = 253, .external_lex_state = 2}, + [834] = {.lex_state = 253, .external_lex_state = 2}, + [835] = {.lex_state = 247, .external_lex_state = 30}, + [836] = {.lex_state = 253, .external_lex_state = 2}, + [837] = {.lex_state = 253, .external_lex_state = 2}, + [838] = {.lex_state = 253, .external_lex_state = 2}, + [839] = {.lex_state = 253, .external_lex_state = 2}, + [840] = {.lex_state = 253, .external_lex_state = 2}, + [841] = {.lex_state = 119, .external_lex_state = 7}, + [842] = {.lex_state = 206, .external_lex_state = 35}, + [843] = {.lex_state = 119, .external_lex_state = 7}, + [844] = {.lex_state = 206, .external_lex_state = 35}, + [845] = {.lex_state = 206, .external_lex_state = 35}, + [846] = {.lex_state = 245, .external_lex_state = 17}, + [847] = {.lex_state = 253, .external_lex_state = 2}, + [848] = {.lex_state = 253, .external_lex_state = 2}, + [849] = {.lex_state = 253, .external_lex_state = 2}, + [850] = {.lex_state = 245, .external_lex_state = 17}, + [851] = {.lex_state = 253, .external_lex_state = 2}, + [852] = {.lex_state = 206, .external_lex_state = 35}, + [853] = {.lex_state = 199, .external_lex_state = 18}, + [854] = {.lex_state = 206, .external_lex_state = 36}, + [855] = {.lex_state = 206, .external_lex_state = 36}, + [856] = {.lex_state = 206, .external_lex_state = 37}, + [857] = {.lex_state = 206, .external_lex_state = 36}, + [858] = {.lex_state = 206, .external_lex_state = 36}, + [859] = {.lex_state = 205, .external_lex_state = 32}, + [860] = {.lex_state = 206, .external_lex_state = 36}, + [861] = {.lex_state = 206, .external_lex_state = 36}, + [862] = {.lex_state = 206, .external_lex_state = 36}, + [863] = {.lex_state = 206, .external_lex_state = 36}, + [864] = {.lex_state = 206, .external_lex_state = 35}, + [865] = {.lex_state = 206, .external_lex_state = 35}, + [866] = {.lex_state = 206, .external_lex_state = 35}, + [867] = {.lex_state = 205, .external_lex_state = 32}, + [868] = {.lex_state = 206, .external_lex_state = 35}, + [869] = {.lex_state = 206, .external_lex_state = 36}, + [870] = {.lex_state = 206, .external_lex_state = 35}, + [871] = {.lex_state = 206, .external_lex_state = 36}, + [872] = {.lex_state = 206, .external_lex_state = 35}, + [873] = {.lex_state = 206, .external_lex_state = 36}, + [874] = {.lex_state = 206, .external_lex_state = 36}, + [875] = {.lex_state = 206, .external_lex_state = 37}, + [876] = {.lex_state = 199, .external_lex_state = 18}, + [877] = {.lex_state = 206, .external_lex_state = 35}, + [878] = {.lex_state = 206, .external_lex_state = 35}, + [879] = {.lex_state = 206, .external_lex_state = 36}, + [880] = {.lex_state = 206, .external_lex_state = 35}, + [881] = {.lex_state = 206, .external_lex_state = 36}, + [882] = {.lex_state = 206, .external_lex_state = 35}, + [883] = {.lex_state = 205, .external_lex_state = 32}, + [884] = {.lex_state = 206, .external_lex_state = 37}, + [885] = {.lex_state = 206, .external_lex_state = 35}, + [886] = {.lex_state = 206, .external_lex_state = 35}, + [887] = {.lex_state = 206, .external_lex_state = 35}, + [888] = {.lex_state = 198, .external_lex_state = 38}, + [889] = {.lex_state = 198, .external_lex_state = 38}, + [890] = {.lex_state = 198, .external_lex_state = 38}, + [891] = {.lex_state = 198, .external_lex_state = 38}, + [892] = {.lex_state = 198, .external_lex_state = 38}, + [893] = {.lex_state = 241, .external_lex_state = 23}, + [894] = {.lex_state = 198, .external_lex_state = 38}, + [895] = {.lex_state = 198, .external_lex_state = 38}, + [896] = {.lex_state = 115, .external_lex_state = 39}, + [897] = {.lex_state = 198, .external_lex_state = 38}, + [898] = {.lex_state = 206, .external_lex_state = 37}, + [899] = {.lex_state = 206, .external_lex_state = 37}, + [900] = {.lex_state = 206, .external_lex_state = 37}, + [901] = {.lex_state = 206, .external_lex_state = 37}, + [902] = {.lex_state = 198, .external_lex_state = 38}, + [903] = {.lex_state = 206, .external_lex_state = 37}, + [904] = {.lex_state = 115, .external_lex_state = 39}, + [905] = {.lex_state = 115, .external_lex_state = 39}, + [906] = {.lex_state = 206, .external_lex_state = 37}, + [907] = {.lex_state = 198, .external_lex_state = 38}, + [908] = {.lex_state = 206, .external_lex_state = 37}, + [909] = {.lex_state = 198, .external_lex_state = 38}, + [910] = {.lex_state = 198, .external_lex_state = 38}, + [911] = {.lex_state = 198, .external_lex_state = 38}, + [912] = {.lex_state = 206, .external_lex_state = 37}, + [913] = {.lex_state = 198, .external_lex_state = 38}, + [914] = {.lex_state = 198, .external_lex_state = 38}, + [915] = {.lex_state = 198, .external_lex_state = 38}, + [916] = {.lex_state = 198, .external_lex_state = 38}, + [917] = {.lex_state = 206, .external_lex_state = 37}, + [918] = {.lex_state = 198, .external_lex_state = 38}, + [919] = {.lex_state = 198, .external_lex_state = 38}, + [920] = {.lex_state = 198, .external_lex_state = 38}, + [921] = {.lex_state = 206, .external_lex_state = 37}, + [922] = {.lex_state = 198, .external_lex_state = 38}, + [923] = {.lex_state = 206, .external_lex_state = 37}, + [924] = {.lex_state = 206, .external_lex_state = 37}, + [925] = {.lex_state = 115, .external_lex_state = 39}, + [926] = {.lex_state = 198, .external_lex_state = 38}, + [927] = {.lex_state = 205, .external_lex_state = 32}, + [928] = {.lex_state = 205, .external_lex_state = 20}, + [929] = {.lex_state = 205, .external_lex_state = 32}, + [930] = {.lex_state = 198, .external_lex_state = 38}, + [931] = {.lex_state = 198, .external_lex_state = 38}, + [932] = {.lex_state = 198, .external_lex_state = 38}, + [933] = {.lex_state = 198, .external_lex_state = 38}, + [934] = {.lex_state = 115, .external_lex_state = 39}, + [935] = {.lex_state = 198, .external_lex_state = 38}, + [936] = {.lex_state = 206, .external_lex_state = 37}, + [937] = {.lex_state = 115, .external_lex_state = 39}, + [938] = {.lex_state = 206, .external_lex_state = 37}, + [939] = {.lex_state = 198, .external_lex_state = 38}, + [940] = {.lex_state = 198, .external_lex_state = 38}, + [941] = {.lex_state = 241, .external_lex_state = 23}, + [942] = {.lex_state = 198, .external_lex_state = 38}, + [943] = {.lex_state = 198, .external_lex_state = 38}, + [944] = {.lex_state = 198, .external_lex_state = 38}, + [945] = {.lex_state = 198, .external_lex_state = 38}, + [946] = {.lex_state = 241, .external_lex_state = 23}, + [947] = {.lex_state = 247, .external_lex_state = 40}, + [948] = {.lex_state = 241, .external_lex_state = 30}, + [949] = {.lex_state = 205, .external_lex_state = 29}, + [950] = {.lex_state = 247, .external_lex_state = 40}, + [951] = {.lex_state = 198, .external_lex_state = 38}, + [952] = {.lex_state = 198, .external_lex_state = 38}, + [953] = {.lex_state = 241, .external_lex_state = 23}, + [954] = {.lex_state = 205, .external_lex_state = 29}, + [955] = {.lex_state = 198, .external_lex_state = 38}, + [956] = {.lex_state = 205, .external_lex_state = 18}, + [957] = {.lex_state = 198, .external_lex_state = 38}, + [958] = {.lex_state = 198, .external_lex_state = 38}, + [959] = {.lex_state = 198, .external_lex_state = 38}, + [960] = {.lex_state = 198, .external_lex_state = 38}, + [961] = {.lex_state = 205, .external_lex_state = 18}, + [962] = {.lex_state = 198, .external_lex_state = 38}, + [963] = {.lex_state = 241, .external_lex_state = 23}, + [964] = {.lex_state = 198, .external_lex_state = 38}, + [965] = {.lex_state = 241, .external_lex_state = 23}, + [966] = {.lex_state = 241, .external_lex_state = 23}, + [967] = {.lex_state = 198, .external_lex_state = 38}, + [968] = {.lex_state = 241, .external_lex_state = 23}, + [969] = {.lex_state = 198, .external_lex_state = 38}, + [970] = {.lex_state = 198, .external_lex_state = 38}, + [971] = {.lex_state = 198, .external_lex_state = 38}, + [972] = {.lex_state = 241, .external_lex_state = 23}, + [973] = {.lex_state = 198, .external_lex_state = 38}, + [974] = {.lex_state = 198, .external_lex_state = 38}, + [975] = {.lex_state = 241, .external_lex_state = 23}, + [976] = {.lex_state = 198, .external_lex_state = 38}, + [977] = {.lex_state = 198, .external_lex_state = 38}, + [978] = {.lex_state = 198, .external_lex_state = 38}, + [979] = {.lex_state = 198, .external_lex_state = 38}, + [980] = {.lex_state = 198, .external_lex_state = 38}, + [981] = {.lex_state = 241, .external_lex_state = 23}, + [982] = {.lex_state = 198, .external_lex_state = 38}, + [983] = {.lex_state = 198, .external_lex_state = 38}, + [984] = {.lex_state = 198, .external_lex_state = 38}, + [985] = {.lex_state = 122, .external_lex_state = 27}, + [986] = {.lex_state = 198, .external_lex_state = 38}, + [987] = {.lex_state = 205, .external_lex_state = 18}, + [988] = {.lex_state = 205, .external_lex_state = 18}, + [989] = {.lex_state = 205, .external_lex_state = 18}, + [990] = {.lex_state = 198, .external_lex_state = 38}, + [991] = {.lex_state = 198, .external_lex_state = 38}, + [992] = {.lex_state = 241, .external_lex_state = 23}, + [993] = {.lex_state = 198, .external_lex_state = 38}, + [994] = {.lex_state = 241, .external_lex_state = 23}, + [995] = {.lex_state = 241, .external_lex_state = 23}, + [996] = {.lex_state = 198, .external_lex_state = 38}, + [997] = {.lex_state = 198, .external_lex_state = 38}, + [998] = {.lex_state = 198, .external_lex_state = 38}, + [999] = {.lex_state = 198, .external_lex_state = 38}, + [1000] = {.lex_state = 198, .external_lex_state = 38}, + [1001] = {.lex_state = 247, .external_lex_state = 40}, + [1002] = {.lex_state = 241, .external_lex_state = 23}, + [1003] = {.lex_state = 241, .external_lex_state = 14}, + [1004] = {.lex_state = 241, .external_lex_state = 30}, + [1005] = {.lex_state = 241, .external_lex_state = 24}, + [1006] = {.lex_state = 241, .external_lex_state = 15}, + [1007] = {.lex_state = 241, .external_lex_state = 24}, + [1008] = {.lex_state = 241, .external_lex_state = 14}, + [1009] = {.lex_state = 241, .external_lex_state = 24}, + [1010] = {.lex_state = 242, .external_lex_state = 15}, + [1011] = {.lex_state = 247, .external_lex_state = 40}, + [1012] = {.lex_state = 242, .external_lex_state = 15}, + [1013] = {.lex_state = 242, .external_lex_state = 15}, + [1014] = {.lex_state = 247, .external_lex_state = 40}, + [1015] = {.lex_state = 242, .external_lex_state = 15}, + [1016] = {.lex_state = 247, .external_lex_state = 40}, + [1017] = {.lex_state = 247, .external_lex_state = 40}, + [1018] = {.lex_state = 242, .external_lex_state = 15}, + [1019] = {.lex_state = 242, .external_lex_state = 15}, + [1020] = {.lex_state = 247, .external_lex_state = 40}, + [1021] = {.lex_state = 242, .external_lex_state = 15}, + [1022] = {.lex_state = 242, .external_lex_state = 15}, + [1023] = {.lex_state = 242, .external_lex_state = 15}, + [1024] = {.lex_state = 242, .external_lex_state = 15}, + [1025] = {.lex_state = 242, .external_lex_state = 15}, + [1026] = {.lex_state = 241, .external_lex_state = 14}, + [1027] = {.lex_state = 242, .external_lex_state = 15}, + [1028] = {.lex_state = 247, .external_lex_state = 40}, + [1029] = {.lex_state = 247, .external_lex_state = 40}, + [1030] = {.lex_state = 247, .external_lex_state = 40}, + [1031] = {.lex_state = 241, .external_lex_state = 15}, + [1032] = {.lex_state = 247, .external_lex_state = 40}, + [1033] = {.lex_state = 247, .external_lex_state = 40}, + [1034] = {.lex_state = 247, .external_lex_state = 40}, + [1035] = {.lex_state = 241, .external_lex_state = 15}, + [1036] = {.lex_state = 247, .external_lex_state = 40}, + [1037] = {.lex_state = 241, .external_lex_state = 15}, + [1038] = {.lex_state = 247, .external_lex_state = 40}, + [1039] = {.lex_state = 247, .external_lex_state = 40}, + [1040] = {.lex_state = 241, .external_lex_state = 30}, + [1041] = {.lex_state = 241, .external_lex_state = 15}, + [1042] = {.lex_state = 241, .external_lex_state = 23}, + [1043] = {.lex_state = 241, .external_lex_state = 15}, + [1044] = {.lex_state = 241, .external_lex_state = 14}, + [1045] = {.lex_state = 241, .external_lex_state = 14}, + [1046] = {.lex_state = 241, .external_lex_state = 14}, + [1047] = {.lex_state = 241, .external_lex_state = 14}, + [1048] = {.lex_state = 241, .external_lex_state = 14}, + [1049] = {.lex_state = 241, .external_lex_state = 14}, + [1050] = {.lex_state = 241, .external_lex_state = 15}, + [1051] = {.lex_state = 241, .external_lex_state = 15}, + [1052] = {.lex_state = 241, .external_lex_state = 23}, + [1053] = {.lex_state = 241, .external_lex_state = 30}, + [1054] = {.lex_state = 241, .external_lex_state = 15}, + [1055] = {.lex_state = 241, .external_lex_state = 15}, + [1056] = {.lex_state = 241, .external_lex_state = 15}, + [1057] = {.lex_state = 242, .external_lex_state = 15}, + [1058] = {.lex_state = 241, .external_lex_state = 15}, + [1059] = {.lex_state = 241, .external_lex_state = 15}, + [1060] = {.lex_state = 241, .external_lex_state = 15}, + [1061] = {.lex_state = 241, .external_lex_state = 30}, + [1062] = {.lex_state = 241, .external_lex_state = 15}, + [1063] = {.lex_state = 241, .external_lex_state = 15}, + [1064] = {.lex_state = 241, .external_lex_state = 14}, + [1065] = {.lex_state = 241, .external_lex_state = 23}, + [1066] = {.lex_state = 241, .external_lex_state = 15}, + [1067] = {.lex_state = 241, .external_lex_state = 15}, + [1068] = {.lex_state = 241, .external_lex_state = 15}, + [1069] = {.lex_state = 241, .external_lex_state = 15}, + [1070] = {.lex_state = 241, .external_lex_state = 15}, + [1071] = {.lex_state = 241, .external_lex_state = 14}, + [1072] = {.lex_state = 241, .external_lex_state = 15}, + [1073] = {.lex_state = 241, .external_lex_state = 14}, + [1074] = {.lex_state = 241, .external_lex_state = 15}, + [1075] = {.lex_state = 241, .external_lex_state = 30}, + [1076] = {.lex_state = 241, .external_lex_state = 30}, + [1077] = {.lex_state = 241, .external_lex_state = 30}, + [1078] = {.lex_state = 241, .external_lex_state = 30}, + [1079] = {.lex_state = 241, .external_lex_state = 30}, + [1080] = {.lex_state = 241, .external_lex_state = 30}, + [1081] = {.lex_state = 241, .external_lex_state = 30}, + [1082] = {.lex_state = 241, .external_lex_state = 23}, + [1083] = {.lex_state = 241, .external_lex_state = 23}, + [1084] = {.lex_state = 241, .external_lex_state = 15}, + [1085] = {.lex_state = 241, .external_lex_state = 30}, + [1086] = {.lex_state = 241, .external_lex_state = 14}, + [1087] = {.lex_state = 241, .external_lex_state = 15}, + [1088] = {.lex_state = 241, .external_lex_state = 15}, + [1089] = {.lex_state = 241, .external_lex_state = 30}, + [1090] = {.lex_state = 241, .external_lex_state = 23}, + [1091] = {.lex_state = 241, .external_lex_state = 30}, + [1092] = {.lex_state = 206, .external_lex_state = 41}, + [1093] = {.lex_state = 241, .external_lex_state = 7}, + [1094] = {.lex_state = 241, .external_lex_state = 14}, + [1095] = {.lex_state = 241, .external_lex_state = 15}, + [1096] = {.lex_state = 241, .external_lex_state = 14}, + [1097] = {.lex_state = 241, .external_lex_state = 14}, + [1098] = {.lex_state = 241, .external_lex_state = 14}, + [1099] = {.lex_state = 241, .external_lex_state = 8}, + [1100] = {.lex_state = 205, .external_lex_state = 32}, + [1101] = {.lex_state = 242, .external_lex_state = 7}, + [1102] = {.lex_state = 241, .external_lex_state = 15}, + [1103] = {.lex_state = 241, .external_lex_state = 24}, + [1104] = {.lex_state = 241, .external_lex_state = 24}, + [1105] = {.lex_state = 206, .external_lex_state = 41}, + [1106] = {.lex_state = 241, .external_lex_state = 24}, + [1107] = {.lex_state = 241, .external_lex_state = 15}, + [1108] = {.lex_state = 241, .external_lex_state = 24}, + [1109] = {.lex_state = 206, .external_lex_state = 41}, + [1110] = {.lex_state = 241, .external_lex_state = 15}, + [1111] = {.lex_state = 241, .external_lex_state = 30}, + [1112] = {.lex_state = 241, .external_lex_state = 15}, + [1113] = {.lex_state = 241, .external_lex_state = 14}, + [1114] = {.lex_state = 241, .external_lex_state = 15}, + [1115] = {.lex_state = 241, .external_lex_state = 30}, + [1116] = {.lex_state = 241, .external_lex_state = 15}, + [1117] = {.lex_state = 241, .external_lex_state = 15}, + [1118] = {.lex_state = 241, .external_lex_state = 30}, + [1119] = {.lex_state = 241, .external_lex_state = 15}, + [1120] = {.lex_state = 241, .external_lex_state = 24}, + [1121] = {.lex_state = 241, .external_lex_state = 24}, + [1122] = {.lex_state = 241, .external_lex_state = 24}, + [1123] = {.lex_state = 241, .external_lex_state = 14}, + [1124] = {.lex_state = 241, .external_lex_state = 24}, + [1125] = {.lex_state = 241, .external_lex_state = 24}, + [1126] = {.lex_state = 126, .external_lex_state = 42}, + [1127] = {.lex_state = 241, .external_lex_state = 24}, + [1128] = {.lex_state = 206, .external_lex_state = 41}, + [1129] = {.lex_state = 241, .external_lex_state = 30}, + [1130] = {.lex_state = 241, .external_lex_state = 15}, + [1131] = {.lex_state = 241, .external_lex_state = 7}, + [1132] = {.lex_state = 241, .external_lex_state = 24}, + [1133] = {.lex_state = 241, .external_lex_state = 15}, + [1134] = {.lex_state = 241, .external_lex_state = 30}, + [1135] = {.lex_state = 241, .external_lex_state = 15}, + [1136] = {.lex_state = 241, .external_lex_state = 8}, + [1137] = {.lex_state = 241, .external_lex_state = 15}, + [1138] = {.lex_state = 241, .external_lex_state = 30}, + [1139] = {.lex_state = 206, .external_lex_state = 41}, + [1140] = {.lex_state = 241, .external_lex_state = 15}, + [1141] = {.lex_state = 241, .external_lex_state = 15}, + [1142] = {.lex_state = 242, .external_lex_state = 7}, + [1143] = {.lex_state = 241, .external_lex_state = 7}, + [1144] = {.lex_state = 241, .external_lex_state = 15}, + [1145] = {.lex_state = 241, .external_lex_state = 15}, + [1146] = {.lex_state = 241, .external_lex_state = 15}, + [1147] = {.lex_state = 241, .external_lex_state = 15}, + [1148] = {.lex_state = 242, .external_lex_state = 7}, + [1149] = {.lex_state = 241, .external_lex_state = 24}, + [1150] = {.lex_state = 241, .external_lex_state = 23}, + [1151] = {.lex_state = 241, .external_lex_state = 15}, + [1152] = {.lex_state = 241, .external_lex_state = 30}, + [1153] = {.lex_state = 241, .external_lex_state = 15}, + [1154] = {.lex_state = 241, .external_lex_state = 15}, + [1155] = {.lex_state = 241, .external_lex_state = 15}, + [1156] = {.lex_state = 241, .external_lex_state = 30}, + [1157] = {.lex_state = 242, .external_lex_state = 15}, + [1158] = {.lex_state = 241, .external_lex_state = 28}, + [1159] = {.lex_state = 241, .external_lex_state = 23}, + [1160] = {.lex_state = 241, .external_lex_state = 28}, + [1161] = {.lex_state = 241, .external_lex_state = 15}, + [1162] = {.lex_state = 241, .external_lex_state = 15}, + [1163] = {.lex_state = 241, .external_lex_state = 7}, + [1164] = {.lex_state = 241, .external_lex_state = 15}, + [1165] = {.lex_state = 241, .external_lex_state = 15}, + [1166] = {.lex_state = 242, .external_lex_state = 15}, + [1167] = {.lex_state = 206, .external_lex_state = 41}, + [1168] = {.lex_state = 241, .external_lex_state = 15}, + [1169] = {.lex_state = 241, .external_lex_state = 28}, + [1170] = {.lex_state = 242, .external_lex_state = 15}, + [1171] = {.lex_state = 241, .external_lex_state = 30}, + [1172] = {.lex_state = 241, .external_lex_state = 24}, + [1173] = {.lex_state = 241, .external_lex_state = 28}, + [1174] = {.lex_state = 241, .external_lex_state = 15}, + [1175] = {.lex_state = 241, .external_lex_state = 15}, + [1176] = {.lex_state = 242, .external_lex_state = 15}, + [1177] = {.lex_state = 241, .external_lex_state = 24}, + [1178] = {.lex_state = 242, .external_lex_state = 15}, + [1179] = {.lex_state = 242, .external_lex_state = 15}, + [1180] = {.lex_state = 241, .external_lex_state = 15}, + [1181] = {.lex_state = 242, .external_lex_state = 15}, + [1182] = {.lex_state = 242, .external_lex_state = 15}, + [1183] = {.lex_state = 206, .external_lex_state = 41}, + [1184] = {.lex_state = 242, .external_lex_state = 15}, + [1185] = {.lex_state = 241, .external_lex_state = 30}, + [1186] = {.lex_state = 241, .external_lex_state = 30}, + [1187] = {.lex_state = 242, .external_lex_state = 15}, + [1188] = {.lex_state = 241, .external_lex_state = 15}, + [1189] = {.lex_state = 241, .external_lex_state = 15}, + [1190] = {.lex_state = 242, .external_lex_state = 15}, + [1191] = {.lex_state = 241, .external_lex_state = 15}, + [1192] = {.lex_state = 205, .external_lex_state = 32}, + [1193] = {.lex_state = 205, .external_lex_state = 32}, + [1194] = {.lex_state = 241, .external_lex_state = 15}, + [1195] = {.lex_state = 241, .external_lex_state = 14}, + [1196] = {.lex_state = 242, .external_lex_state = 15}, + [1197] = {.lex_state = 242, .external_lex_state = 15}, + [1198] = {.lex_state = 241, .external_lex_state = 28}, + [1199] = {.lex_state = 241, .external_lex_state = 28}, + [1200] = {.lex_state = 241, .external_lex_state = 15}, + [1201] = {.lex_state = 242, .external_lex_state = 15}, + [1202] = {.lex_state = 241, .external_lex_state = 28}, + [1203] = {.lex_state = 242, .external_lex_state = 15}, + [1204] = {.lex_state = 242, .external_lex_state = 15}, + [1205] = {.lex_state = 242, .external_lex_state = 15}, + [1206] = {.lex_state = 242, .external_lex_state = 15}, + [1207] = {.lex_state = 242, .external_lex_state = 15}, + [1208] = {.lex_state = 241, .external_lex_state = 28}, + [1209] = {.lex_state = 241, .external_lex_state = 28}, + [1210] = {.lex_state = 242, .external_lex_state = 15}, + [1211] = {.lex_state = 242, .external_lex_state = 15}, + [1212] = {.lex_state = 241, .external_lex_state = 28}, + [1213] = {.lex_state = 242, .external_lex_state = 15}, + [1214] = {.lex_state = 242, .external_lex_state = 15}, + [1215] = {.lex_state = 241, .external_lex_state = 14}, + [1216] = {.lex_state = 241, .external_lex_state = 15}, + [1217] = {.lex_state = 242, .external_lex_state = 15}, + [1218] = {.lex_state = 241, .external_lex_state = 15}, + [1219] = {.lex_state = 241, .external_lex_state = 15}, + [1220] = {.lex_state = 242, .external_lex_state = 15}, + [1221] = {.lex_state = 241, .external_lex_state = 28}, + [1222] = {.lex_state = 242, .external_lex_state = 15}, + [1223] = {.lex_state = 241, .external_lex_state = 15}, + [1224] = {.lex_state = 242, .external_lex_state = 15}, + [1225] = {.lex_state = 242, .external_lex_state = 15}, + [1226] = {.lex_state = 242, .external_lex_state = 15}, + [1227] = {.lex_state = 241, .external_lex_state = 28}, + [1228] = {.lex_state = 242, .external_lex_state = 15}, + [1229] = {.lex_state = 242, .external_lex_state = 15}, + [1230] = {.lex_state = 242, .external_lex_state = 15}, + [1231] = {.lex_state = 242, .external_lex_state = 15}, + [1232] = {.lex_state = 242, .external_lex_state = 15}, + [1233] = {.lex_state = 242, .external_lex_state = 15}, + [1234] = {.lex_state = 241, .external_lex_state = 28}, + [1235] = {.lex_state = 241, .external_lex_state = 15}, + [1236] = {.lex_state = 242, .external_lex_state = 15}, + [1237] = {.lex_state = 241, .external_lex_state = 28}, + [1238] = {.lex_state = 242, .external_lex_state = 15}, + [1239] = {.lex_state = 241, .external_lex_state = 15}, + [1240] = {.lex_state = 242, .external_lex_state = 15}, + [1241] = {.lex_state = 242, .external_lex_state = 15}, + [1242] = {.lex_state = 241, .external_lex_state = 28}, + [1243] = {.lex_state = 241, .external_lex_state = 28}, + [1244] = {.lex_state = 242, .external_lex_state = 15}, + [1245] = {.lex_state = 206, .external_lex_state = 41}, + [1246] = {.lex_state = 241, .external_lex_state = 15}, + [1247] = {.lex_state = 205, .external_lex_state = 32}, + [1248] = {.lex_state = 206, .external_lex_state = 41}, + [1249] = {.lex_state = 241, .external_lex_state = 14}, + [1250] = {.lex_state = 241, .external_lex_state = 28}, + [1251] = {.lex_state = 241, .external_lex_state = 30}, + [1252] = {.lex_state = 242, .external_lex_state = 15}, + [1253] = {.lex_state = 242, .external_lex_state = 15}, + [1254] = {.lex_state = 242, .external_lex_state = 15}, + [1255] = {.lex_state = 242, .external_lex_state = 15}, + [1256] = {.lex_state = 241, .external_lex_state = 15}, + [1257] = {.lex_state = 206, .external_lex_state = 41}, + [1258] = {.lex_state = 242, .external_lex_state = 15}, + [1259] = {.lex_state = 242, .external_lex_state = 15}, + [1260] = {.lex_state = 242, .external_lex_state = 15}, + [1261] = {.lex_state = 242, .external_lex_state = 15}, + [1262] = {.lex_state = 242, .external_lex_state = 15}, + [1263] = {.lex_state = 242, .external_lex_state = 15}, + [1264] = {.lex_state = 241, .external_lex_state = 15}, + [1265] = {.lex_state = 241, .external_lex_state = 15}, + [1266] = {.lex_state = 241, .external_lex_state = 15}, + [1267] = {.lex_state = 205, .external_lex_state = 32}, + [1268] = {.lex_state = 242, .external_lex_state = 15}, + [1269] = {.lex_state = 241, .external_lex_state = 15}, + [1270] = {.lex_state = 241, .external_lex_state = 7}, + [1271] = {.lex_state = 205, .external_lex_state = 32}, + [1272] = {.lex_state = 206, .external_lex_state = 41}, + [1273] = {.lex_state = 242, .external_lex_state = 15}, + [1274] = {.lex_state = 242, .external_lex_state = 15}, + [1275] = {.lex_state = 242, .external_lex_state = 15}, + [1276] = {.lex_state = 206, .external_lex_state = 41}, + [1277] = {.lex_state = 242, .external_lex_state = 15}, + [1278] = {.lex_state = 242, .external_lex_state = 15}, + [1279] = {.lex_state = 242, .external_lex_state = 15}, + [1280] = {.lex_state = 242, .external_lex_state = 15}, + [1281] = {.lex_state = 206, .external_lex_state = 41}, + [1282] = {.lex_state = 242, .external_lex_state = 15}, + [1283] = {.lex_state = 242, .external_lex_state = 15}, + [1284] = {.lex_state = 206, .external_lex_state = 41}, + [1285] = {.lex_state = 241, .external_lex_state = 7}, + [1286] = {.lex_state = 205, .external_lex_state = 32}, + [1287] = {.lex_state = 241, .external_lex_state = 28}, + [1288] = {.lex_state = 206, .external_lex_state = 41}, + [1289] = {.lex_state = 241, .external_lex_state = 15}, + [1290] = {.lex_state = 205, .external_lex_state = 32}, + [1291] = {.lex_state = 242, .external_lex_state = 15}, + [1292] = {.lex_state = 206, .external_lex_state = 41}, + [1293] = {.lex_state = 206, .external_lex_state = 41}, + [1294] = {.lex_state = 206, .external_lex_state = 41}, + [1295] = {.lex_state = 206, .external_lex_state = 41}, + [1296] = {.lex_state = 206, .external_lex_state = 41}, + [1297] = {.lex_state = 242, .external_lex_state = 15}, + [1298] = {.lex_state = 242, .external_lex_state = 15}, + [1299] = {.lex_state = 207, .external_lex_state = 43}, + [1300] = {.lex_state = 207, .external_lex_state = 43}, + [1301] = {.lex_state = 241, .external_lex_state = 15}, + [1302] = {.lex_state = 242, .external_lex_state = 15}, + [1303] = {.lex_state = 241, .external_lex_state = 15}, + [1304] = {.lex_state = 241, .external_lex_state = 15}, + [1305] = {.lex_state = 241, .external_lex_state = 8}, + [1306] = {.lex_state = 207, .external_lex_state = 43}, + [1307] = {.lex_state = 241, .external_lex_state = 15}, + [1308] = {.lex_state = 207, .external_lex_state = 43}, + [1309] = {.lex_state = 241, .external_lex_state = 15}, + [1310] = {.lex_state = 242, .external_lex_state = 15}, + [1311] = {.lex_state = 241, .external_lex_state = 14}, + [1312] = {.lex_state = 207, .external_lex_state = 43}, + [1313] = {.lex_state = 207, .external_lex_state = 43}, + [1314] = {.lex_state = 241, .external_lex_state = 15}, + [1315] = {.lex_state = 241, .external_lex_state = 15}, + [1316] = {.lex_state = 241, .external_lex_state = 14}, + [1317] = {.lex_state = 241, .external_lex_state = 14}, + [1318] = {.lex_state = 205, .external_lex_state = 44}, + [1319] = {.lex_state = 205, .external_lex_state = 44}, + [1320] = {.lex_state = 241, .external_lex_state = 14}, + [1321] = {.lex_state = 241, .external_lex_state = 14}, + [1322] = {.lex_state = 241, .external_lex_state = 14}, + [1323] = {.lex_state = 118, .external_lex_state = 45}, + [1324] = {.lex_state = 241, .external_lex_state = 14}, + [1325] = {.lex_state = 241, .external_lex_state = 14}, + [1326] = {.lex_state = 241, .external_lex_state = 15}, + [1327] = {.lex_state = 205, .external_lex_state = 32}, + [1328] = {.lex_state = 241, .external_lex_state = 14}, + [1329] = {.lex_state = 241, .external_lex_state = 23}, + [1330] = {.lex_state = 241, .external_lex_state = 14}, + [1331] = {.lex_state = 241, .external_lex_state = 14}, + [1332] = {.lex_state = 241, .external_lex_state = 14}, + [1333] = {.lex_state = 241, .external_lex_state = 14}, + [1334] = {.lex_state = 241, .external_lex_state = 14}, + [1335] = {.lex_state = 241, .external_lex_state = 14}, + [1336] = {.lex_state = 205, .external_lex_state = 32}, + [1337] = {.lex_state = 241, .external_lex_state = 14}, + [1338] = {.lex_state = 205, .external_lex_state = 44}, + [1339] = {.lex_state = 241, .external_lex_state = 14}, + [1340] = {.lex_state = 241, .external_lex_state = 14}, + [1341] = {.lex_state = 205, .external_lex_state = 32}, + [1342] = {.lex_state = 241, .external_lex_state = 14}, + [1343] = {.lex_state = 205, .external_lex_state = 32}, + [1344] = {.lex_state = 241, .external_lex_state = 14}, + [1345] = {.lex_state = 241, .external_lex_state = 14}, + [1346] = {.lex_state = 241, .external_lex_state = 14}, + [1347] = {.lex_state = 241, .external_lex_state = 14}, + [1348] = {.lex_state = 241, .external_lex_state = 14}, + [1349] = {.lex_state = 241, .external_lex_state = 14}, + [1350] = {.lex_state = 205, .external_lex_state = 44}, + [1351] = {.lex_state = 241, .external_lex_state = 14}, + [1352] = {.lex_state = 241, .external_lex_state = 14}, + [1353] = {.lex_state = 241, .external_lex_state = 14}, + [1354] = {.lex_state = 205, .external_lex_state = 44}, + [1355] = {.lex_state = 241, .external_lex_state = 15}, + [1356] = {.lex_state = 241, .external_lex_state = 23}, + [1357] = {.lex_state = 241, .external_lex_state = 14}, + [1358] = {.lex_state = 241, .external_lex_state = 14}, + [1359] = {.lex_state = 241, .external_lex_state = 14}, + [1360] = {.lex_state = 205, .external_lex_state = 44}, + [1361] = {.lex_state = 127, .external_lex_state = 42}, + [1362] = {.lex_state = 241, .external_lex_state = 14}, + [1363] = {.lex_state = 241, .external_lex_state = 14}, + [1364] = {.lex_state = 241, .external_lex_state = 14}, + [1365] = {.lex_state = 205, .external_lex_state = 44}, + [1366] = {.lex_state = 241, .external_lex_state = 14}, + [1367] = {.lex_state = 241, .external_lex_state = 14}, + [1368] = {.lex_state = 241, .external_lex_state = 14}, + [1369] = {.lex_state = 241, .external_lex_state = 14}, + [1370] = {.lex_state = 241, .external_lex_state = 14}, + [1371] = {.lex_state = 241, .external_lex_state = 14}, + [1372] = {.lex_state = 205, .external_lex_state = 44}, + [1373] = {.lex_state = 118, .external_lex_state = 45}, + [1374] = {.lex_state = 241, .external_lex_state = 14}, + [1375] = {.lex_state = 205, .external_lex_state = 44}, + [1376] = {.lex_state = 241, .external_lex_state = 14}, + [1377] = {.lex_state = 241, .external_lex_state = 14}, + [1378] = {.lex_state = 241, .external_lex_state = 14}, + [1379] = {.lex_state = 118, .external_lex_state = 45}, + [1380] = {.lex_state = 241, .external_lex_state = 14}, + [1381] = {.lex_state = 205, .external_lex_state = 44}, + [1382] = {.lex_state = 205, .external_lex_state = 44}, + [1383] = {.lex_state = 241, .external_lex_state = 14}, + [1384] = {.lex_state = 241, .external_lex_state = 14}, + [1385] = {.lex_state = 241, .external_lex_state = 14}, + [1386] = {.lex_state = 241, .external_lex_state = 14}, + [1387] = {.lex_state = 241, .external_lex_state = 14}, + [1388] = {.lex_state = 241, .external_lex_state = 14}, + [1389] = {.lex_state = 241, .external_lex_state = 14}, + [1390] = {.lex_state = 241, .external_lex_state = 14}, + [1391] = {.lex_state = 241, .external_lex_state = 14}, + [1392] = {.lex_state = 241, .external_lex_state = 14}, + [1393] = {.lex_state = 205, .external_lex_state = 44}, + [1394] = {.lex_state = 241, .external_lex_state = 14}, + [1395] = {.lex_state = 241, .external_lex_state = 15}, + [1396] = {.lex_state = 205, .external_lex_state = 44}, + [1397] = {.lex_state = 241, .external_lex_state = 15}, + [1398] = {.lex_state = 241, .external_lex_state = 30}, + [1399] = {.lex_state = 241, .external_lex_state = 30}, + [1400] = {.lex_state = 217, .external_lex_state = 35}, + [1401] = {.lex_state = 241, .external_lex_state = 30}, + [1402] = {.lex_state = 118, .external_lex_state = 45}, + [1403] = {.lex_state = 241, .external_lex_state = 7}, + [1404] = {.lex_state = 241, .external_lex_state = 7}, + [1405] = {.lex_state = 217, .external_lex_state = 35}, + [1406] = {.lex_state = 241, .external_lex_state = 15}, + [1407] = {.lex_state = 241, .external_lex_state = 15}, + [1408] = {.lex_state = 241, .external_lex_state = 15}, + [1409] = {.lex_state = 241, .external_lex_state = 15}, + [1410] = {.lex_state = 217, .external_lex_state = 35}, + [1411] = {.lex_state = 241, .external_lex_state = 15}, + [1412] = {.lex_state = 217, .external_lex_state = 35}, + [1413] = {.lex_state = 217, .external_lex_state = 35}, + [1414] = {.lex_state = 217, .external_lex_state = 37}, + [1415] = {.lex_state = 241, .external_lex_state = 15}, + [1416] = {.lex_state = 217, .external_lex_state = 35}, + [1417] = {.lex_state = 217, .external_lex_state = 37}, + [1418] = {.lex_state = 217, .external_lex_state = 35}, + [1419] = {.lex_state = 217, .external_lex_state = 37}, + [1420] = {.lex_state = 241, .external_lex_state = 15}, + [1421] = {.lex_state = 217, .external_lex_state = 35}, + [1422] = {.lex_state = 217, .external_lex_state = 35}, + [1423] = {.lex_state = 217, .external_lex_state = 35}, + [1424] = {.lex_state = 217, .external_lex_state = 35}, + [1425] = {.lex_state = 217, .external_lex_state = 35}, + [1426] = {.lex_state = 217, .external_lex_state = 35}, + [1427] = {.lex_state = 217, .external_lex_state = 35}, + [1428] = {.lex_state = 198, .external_lex_state = 18}, + [1429] = {.lex_state = 198, .external_lex_state = 31}, + [1430] = {.lex_state = 217, .external_lex_state = 35}, + [1431] = {.lex_state = 241, .external_lex_state = 15}, + [1432] = {.lex_state = 198, .external_lex_state = 18}, + [1433] = {.lex_state = 198, .external_lex_state = 31}, + [1434] = {.lex_state = 198, .external_lex_state = 31}, + [1435] = {.lex_state = 198, .external_lex_state = 31}, + [1436] = {.lex_state = 217, .external_lex_state = 35}, + [1437] = {.lex_state = 217, .external_lex_state = 37}, + [1438] = {.lex_state = 217, .external_lex_state = 35}, + [1439] = {.lex_state = 241, .external_lex_state = 15}, + [1440] = {.lex_state = 198, .external_lex_state = 31}, + [1441] = {.lex_state = 217, .external_lex_state = 37}, + [1442] = {.lex_state = 198, .external_lex_state = 31}, + [1443] = {.lex_state = 198, .external_lex_state = 31}, + [1444] = {.lex_state = 198, .external_lex_state = 31}, + [1445] = {.lex_state = 198, .external_lex_state = 31}, + [1446] = {.lex_state = 241, .external_lex_state = 15}, + [1447] = {.lex_state = 198, .external_lex_state = 31}, + [1448] = {.lex_state = 198, .external_lex_state = 31}, + [1449] = {.lex_state = 241, .external_lex_state = 15}, + [1450] = {.lex_state = 217, .external_lex_state = 37}, + [1451] = {.lex_state = 217, .external_lex_state = 37}, + [1452] = {.lex_state = 217, .external_lex_state = 37}, + [1453] = {.lex_state = 198, .external_lex_state = 31}, + [1454] = {.lex_state = 217, .external_lex_state = 37}, + [1455] = {.lex_state = 217, .external_lex_state = 37}, + [1456] = {.lex_state = 198, .external_lex_state = 31}, + [1457] = {.lex_state = 217, .external_lex_state = 37}, + [1458] = {.lex_state = 198, .external_lex_state = 31}, + [1459] = {.lex_state = 217, .external_lex_state = 37}, + [1460] = {.lex_state = 217, .external_lex_state = 37}, + [1461] = {.lex_state = 217, .external_lex_state = 37}, + [1462] = {.lex_state = 217, .external_lex_state = 37}, + [1463] = {.lex_state = 217, .external_lex_state = 37}, + [1464] = {.lex_state = 217, .external_lex_state = 37}, + [1465] = {.lex_state = 217, .external_lex_state = 37}, + [1466] = {.lex_state = 212, .external_lex_state = 46}, + [1467] = {.lex_state = 212, .external_lex_state = 46}, + [1468] = {.lex_state = 241, .external_lex_state = 40}, + [1469] = {.lex_state = 213, .external_lex_state = 47}, + [1470] = {.lex_state = 213, .external_lex_state = 47}, + [1471] = {.lex_state = 212, .external_lex_state = 46}, + [1472] = {.lex_state = 124, .external_lex_state = 42}, + [1473] = {.lex_state = 245, .external_lex_state = 45}, + [1474] = {.lex_state = 241, .external_lex_state = 17}, + [1475] = {.lex_state = 245, .external_lex_state = 45}, + [1476] = {.lex_state = 212, .external_lex_state = 46}, + [1477] = {.lex_state = 212, .external_lex_state = 46}, + [1478] = {.lex_state = 212, .external_lex_state = 46}, + [1479] = {.lex_state = 213, .external_lex_state = 47}, + [1480] = {.lex_state = 241, .external_lex_state = 17}, + [1481] = {.lex_state = 212, .external_lex_state = 46}, + [1482] = {.lex_state = 212, .external_lex_state = 46}, + [1483] = {.lex_state = 212, .external_lex_state = 46}, + [1484] = {.lex_state = 245, .external_lex_state = 45}, + [1485] = {.lex_state = 212, .external_lex_state = 46}, + [1486] = {.lex_state = 241, .external_lex_state = 40}, + [1487] = {.lex_state = 213, .external_lex_state = 47}, + [1488] = {.lex_state = 212, .external_lex_state = 46}, + [1489] = {.lex_state = 241, .external_lex_state = 17}, + [1490] = {.lex_state = 213, .external_lex_state = 47}, + [1491] = {.lex_state = 245, .external_lex_state = 45}, + [1492] = {.lex_state = 212, .external_lex_state = 46}, + [1493] = {.lex_state = 241, .external_lex_state = 17}, + [1494] = {.lex_state = 212, .external_lex_state = 46}, + [1495] = {.lex_state = 212, .external_lex_state = 46}, + [1496] = {.lex_state = 213, .external_lex_state = 47}, + [1497] = {.lex_state = 212, .external_lex_state = 46}, + [1498] = {.lex_state = 213, .external_lex_state = 47}, + [1499] = {.lex_state = 212, .external_lex_state = 46}, + [1500] = {.lex_state = 212, .external_lex_state = 46}, + [1501] = {.lex_state = 212, .external_lex_state = 46}, + [1502] = {.lex_state = 212, .external_lex_state = 46}, + [1503] = {.lex_state = 198, .external_lex_state = 18}, + [1504] = {.lex_state = 212, .external_lex_state = 46}, + [1505] = {.lex_state = 212, .external_lex_state = 46}, + [1506] = {.lex_state = 212, .external_lex_state = 46}, + [1507] = {.lex_state = 213, .external_lex_state = 47}, + [1508] = {.lex_state = 212, .external_lex_state = 46}, + [1509] = {.lex_state = 212, .external_lex_state = 46}, + [1510] = {.lex_state = 213, .external_lex_state = 47}, + [1511] = {.lex_state = 205, .external_lex_state = 48}, + [1512] = {.lex_state = 198, .external_lex_state = 31}, + [1513] = {.lex_state = 212, .external_lex_state = 46}, + [1514] = {.lex_state = 198, .external_lex_state = 31}, + [1515] = {.lex_state = 212, .external_lex_state = 46}, + [1516] = {.lex_state = 212, .external_lex_state = 46}, + [1517] = {.lex_state = 212, .external_lex_state = 46}, + [1518] = {.lex_state = 212, .external_lex_state = 46}, + [1519] = {.lex_state = 212, .external_lex_state = 46}, + [1520] = {.lex_state = 212, .external_lex_state = 46}, + [1521] = {.lex_state = 212, .external_lex_state = 46}, + [1522] = {.lex_state = 212, .external_lex_state = 46}, + [1523] = {.lex_state = 212, .external_lex_state = 46}, + [1524] = {.lex_state = 212, .external_lex_state = 46}, + [1525] = {.lex_state = 212, .external_lex_state = 46}, + [1526] = {.lex_state = 212, .external_lex_state = 46}, + [1527] = {.lex_state = 212, .external_lex_state = 46}, + [1528] = {.lex_state = 212, .external_lex_state = 46}, + [1529] = {.lex_state = 212, .external_lex_state = 46}, + [1530] = {.lex_state = 212, .external_lex_state = 46}, + [1531] = {.lex_state = 213, .external_lex_state = 47}, + [1532] = {.lex_state = 245, .external_lex_state = 45}, + [1533] = {.lex_state = 241, .external_lex_state = 17}, + [1534] = {.lex_state = 212, .external_lex_state = 46}, + [1535] = {.lex_state = 212, .external_lex_state = 46}, + [1536] = {.lex_state = 205, .external_lex_state = 48}, + [1537] = {.lex_state = 212, .external_lex_state = 46}, + [1538] = {.lex_state = 212, .external_lex_state = 46}, + [1539] = {.lex_state = 212, .external_lex_state = 46}, + [1540] = {.lex_state = 212, .external_lex_state = 46}, + [1541] = {.lex_state = 213, .external_lex_state = 47}, + [1542] = {.lex_state = 212, .external_lex_state = 46}, + [1543] = {.lex_state = 212, .external_lex_state = 46}, + [1544] = {.lex_state = 198, .external_lex_state = 31}, + [1545] = {.lex_state = 212, .external_lex_state = 46}, + [1546] = {.lex_state = 212, .external_lex_state = 46}, + [1547] = {.lex_state = 212, .external_lex_state = 46}, + [1548] = {.lex_state = 212, .external_lex_state = 46}, + [1549] = {.lex_state = 212, .external_lex_state = 46}, + [1550] = {.lex_state = 212, .external_lex_state = 46}, + [1551] = {.lex_state = 213, .external_lex_state = 47}, + [1552] = {.lex_state = 212, .external_lex_state = 46}, + [1553] = {.lex_state = 212, .external_lex_state = 46}, + [1554] = {.lex_state = 212, .external_lex_state = 46}, + [1555] = {.lex_state = 212, .external_lex_state = 46}, + [1556] = {.lex_state = 212, .external_lex_state = 46}, + [1557] = {.lex_state = 212, .external_lex_state = 46}, + [1558] = {.lex_state = 245, .external_lex_state = 45}, + [1559] = {.lex_state = 205, .external_lex_state = 48}, + [1560] = {.lex_state = 212, .external_lex_state = 46}, + [1561] = {.lex_state = 212, .external_lex_state = 46}, + [1562] = {.lex_state = 212, .external_lex_state = 46}, + [1563] = {.lex_state = 212, .external_lex_state = 46}, + [1564] = {.lex_state = 212, .external_lex_state = 46}, + [1565] = {.lex_state = 212, .external_lex_state = 46}, + [1566] = {.lex_state = 213, .external_lex_state = 47}, + [1567] = {.lex_state = 241, .external_lex_state = 17}, + [1568] = {.lex_state = 212, .external_lex_state = 46}, + [1569] = {.lex_state = 241, .external_lex_state = 40}, + [1570] = {.lex_state = 212, .external_lex_state = 46}, + [1571] = {.lex_state = 241, .external_lex_state = 40}, + [1572] = {.lex_state = 212, .external_lex_state = 46}, + [1573] = {.lex_state = 212, .external_lex_state = 46}, + [1574] = {.lex_state = 212, .external_lex_state = 46}, + [1575] = {.lex_state = 213, .external_lex_state = 47}, + [1576] = {.lex_state = 212, .external_lex_state = 46}, + [1577] = {.lex_state = 245, .external_lex_state = 45}, + [1578] = {.lex_state = 198, .external_lex_state = 31}, + [1579] = {.lex_state = 198, .external_lex_state = 31}, + [1580] = {.lex_state = 121, .external_lex_state = 49}, + [1581] = {.lex_state = 205}, + [1582] = {.lex_state = 241, .external_lex_state = 40}, + [1583] = {.lex_state = 241, .external_lex_state = 40}, + [1584] = {.lex_state = 205}, + [1585] = {.lex_state = 241, .external_lex_state = 40}, + [1586] = {.lex_state = 205}, + [1587] = {.lex_state = 121, .external_lex_state = 49}, + [1588] = {.lex_state = 205}, + [1589] = {.lex_state = 241, .external_lex_state = 40}, + [1590] = {.lex_state = 205}, + [1591] = {.lex_state = 241, .external_lex_state = 40}, + [1592] = {.lex_state = 241, .external_lex_state = 40}, + [1593] = {.lex_state = 205}, + [1594] = {.lex_state = 205}, + [1595] = {.lex_state = 205}, + [1596] = {.lex_state = 241, .external_lex_state = 40}, + [1597] = {.lex_state = 241, .external_lex_state = 40}, + [1598] = {.lex_state = 205}, + [1599] = {.lex_state = 205}, + [1600] = {.lex_state = 205}, + [1601] = {.lex_state = 241, .external_lex_state = 40}, + [1602] = {.lex_state = 205}, + [1603] = {.lex_state = 205}, + [1604] = {.lex_state = 205}, + [1605] = {.lex_state = 198, .external_lex_state = 31}, + [1606] = {.lex_state = 198, .external_lex_state = 31}, + [1607] = {.lex_state = 198, .external_lex_state = 31}, + [1608] = {.lex_state = 198, .external_lex_state = 31}, + [1609] = {.lex_state = 241, .external_lex_state = 17}, + [1610] = {.lex_state = 198, .external_lex_state = 31}, + [1611] = {.lex_state = 198, .external_lex_state = 31}, + [1612] = {.lex_state = 198, .external_lex_state = 31}, + [1613] = {.lex_state = 198, .external_lex_state = 31}, + [1614] = {.lex_state = 205}, + [1615] = {.lex_state = 205}, + [1616] = {.lex_state = 198, .external_lex_state = 31}, + [1617] = {.lex_state = 198, .external_lex_state = 31}, + [1618] = {.lex_state = 198, .external_lex_state = 31}, + [1619] = {.lex_state = 198, .external_lex_state = 31}, + [1620] = {.lex_state = 198, .external_lex_state = 31}, + [1621] = {.lex_state = 198, .external_lex_state = 31}, + [1622] = {.lex_state = 198, .external_lex_state = 31}, + [1623] = {.lex_state = 198, .external_lex_state = 31}, + [1624] = {.lex_state = 198, .external_lex_state = 31}, + [1625] = {.lex_state = 198, .external_lex_state = 31}, + [1626] = {.lex_state = 198, .external_lex_state = 31}, + [1627] = {.lex_state = 198, .external_lex_state = 31}, + [1628] = {.lex_state = 198, .external_lex_state = 31}, + [1629] = {.lex_state = 198, .external_lex_state = 31}, + [1630] = {.lex_state = 198, .external_lex_state = 31}, + [1631] = {.lex_state = 198, .external_lex_state = 31}, + [1632] = {.lex_state = 198, .external_lex_state = 31}, + [1633] = {.lex_state = 198, .external_lex_state = 31}, + [1634] = {.lex_state = 198, .external_lex_state = 31}, + [1635] = {.lex_state = 198, .external_lex_state = 31}, + [1636] = {.lex_state = 198, .external_lex_state = 31}, + [1637] = {.lex_state = 198, .external_lex_state = 31}, + [1638] = {.lex_state = 205}, + [1639] = {.lex_state = 198, .external_lex_state = 31}, + [1640] = {.lex_state = 198, .external_lex_state = 31}, + [1641] = {.lex_state = 205}, + [1642] = {.lex_state = 241, .external_lex_state = 40}, + [1643] = {.lex_state = 205}, + [1644] = {.lex_state = 205}, + [1645] = {.lex_state = 198, .external_lex_state = 31}, + [1646] = {.lex_state = 241, .external_lex_state = 40}, + [1647] = {.lex_state = 198, .external_lex_state = 31}, + [1648] = {.lex_state = 198, .external_lex_state = 31}, + [1649] = {.lex_state = 198, .external_lex_state = 31}, + [1650] = {.lex_state = 205}, + [1651] = {.lex_state = 198, .external_lex_state = 31}, + [1652] = {.lex_state = 198, .external_lex_state = 31}, + [1653] = {.lex_state = 198, .external_lex_state = 31}, + [1654] = {.lex_state = 198, .external_lex_state = 31}, + [1655] = {.lex_state = 198, .external_lex_state = 31}, + [1656] = {.lex_state = 198, .external_lex_state = 31}, + [1657] = {.lex_state = 198, .external_lex_state = 31}, + [1658] = {.lex_state = 198, .external_lex_state = 31}, + [1659] = {.lex_state = 241, .external_lex_state = 40}, + [1660] = {.lex_state = 198, .external_lex_state = 31}, + [1661] = {.lex_state = 198, .external_lex_state = 31}, + [1662] = {.lex_state = 198, .external_lex_state = 31}, + [1663] = {.lex_state = 198, .external_lex_state = 31}, + [1664] = {.lex_state = 205}, + [1665] = {.lex_state = 198, .external_lex_state = 31}, + [1666] = {.lex_state = 198, .external_lex_state = 31}, + [1667] = {.lex_state = 198, .external_lex_state = 31}, + [1668] = {.lex_state = 205}, + [1669] = {.lex_state = 121, .external_lex_state = 49}, + [1670] = {.lex_state = 205}, + [1671] = {.lex_state = 241, .external_lex_state = 40}, + [1672] = {.lex_state = 241, .external_lex_state = 40}, + [1673] = {.lex_state = 205}, + [1674] = {.lex_state = 205}, + [1675] = {.lex_state = 205}, + [1676] = {.lex_state = 205}, + [1677] = {.lex_state = 205}, + [1678] = {.lex_state = 205}, + [1679] = {.lex_state = 205}, + [1680] = {.lex_state = 205}, + [1681] = {.lex_state = 205}, + [1682] = {.lex_state = 121, .external_lex_state = 49}, + [1683] = {.lex_state = 121, .external_lex_state = 49}, + [1684] = {.lex_state = 121, .external_lex_state = 49}, + [1685] = {.lex_state = 121, .external_lex_state = 49}, + [1686] = {.lex_state = 121, .external_lex_state = 49}, + [1687] = {.lex_state = 121, .external_lex_state = 49}, + [1688] = {.lex_state = 121, .external_lex_state = 49}, + [1689] = {.lex_state = 121, .external_lex_state = 49}, + [1690] = {.lex_state = 121, .external_lex_state = 49}, + [1691] = {.lex_state = 121, .external_lex_state = 49}, + [1692] = {.lex_state = 121, .external_lex_state = 49}, + [1693] = {.lex_state = 121, .external_lex_state = 49}, + [1694] = {.lex_state = 121, .external_lex_state = 49}, + [1695] = {.lex_state = 205}, + [1696] = {.lex_state = 205}, + [1697] = {.lex_state = 209, .external_lex_state = 50}, + [1698] = {.lex_state = 215, .external_lex_state = 51}, + [1699] = {.lex_state = 215, .external_lex_state = 51}, + [1700] = {.lex_state = 205}, + [1701] = {.lex_state = 121, .external_lex_state = 49}, + [1702] = {.lex_state = 197, .external_lex_state = 52}, + [1703] = {.lex_state = 197, .external_lex_state = 52}, + [1704] = {.lex_state = 197, .external_lex_state = 52}, + [1705] = {.lex_state = 197, .external_lex_state = 52}, + [1706] = {.lex_state = 197, .external_lex_state = 52}, + [1707] = {.lex_state = 197, .external_lex_state = 52}, + [1708] = {.lex_state = 197, .external_lex_state = 52}, + [1709] = {.lex_state = 197, .external_lex_state = 52}, + [1710] = {.lex_state = 197, .external_lex_state = 52}, + [1711] = {.lex_state = 197, .external_lex_state = 52}, + [1712] = {.lex_state = 197, .external_lex_state = 52}, + [1713] = {.lex_state = 197, .external_lex_state = 52}, + [1714] = {.lex_state = 197, .external_lex_state = 52}, + [1715] = {.lex_state = 197, .external_lex_state = 52}, + [1716] = {.lex_state = 197, .external_lex_state = 52}, + [1717] = {.lex_state = 197, .external_lex_state = 52}, + [1718] = {.lex_state = 197, .external_lex_state = 52}, + [1719] = {.lex_state = 197, .external_lex_state = 52}, + [1720] = {.lex_state = 197, .external_lex_state = 52}, + [1721] = {.lex_state = 197, .external_lex_state = 52}, + [1722] = {.lex_state = 197, .external_lex_state = 52}, + [1723] = {.lex_state = 197, .external_lex_state = 52}, + [1724] = {.lex_state = 197, .external_lex_state = 52}, + [1725] = {.lex_state = 197, .external_lex_state = 52}, + [1726] = {.lex_state = 241, .external_lex_state = 17}, + [1727] = {.lex_state = 197, .external_lex_state = 52}, + [1728] = {.lex_state = 197, .external_lex_state = 52}, + [1729] = {.lex_state = 197, .external_lex_state = 52}, + [1730] = {.lex_state = 241, .external_lex_state = 17}, + [1731] = {.lex_state = 197, .external_lex_state = 52}, + [1732] = {.lex_state = 197, .external_lex_state = 52}, + [1733] = {.lex_state = 197, .external_lex_state = 52}, + [1734] = {.lex_state = 197, .external_lex_state = 52}, + [1735] = {.lex_state = 197, .external_lex_state = 52}, + [1736] = {.lex_state = 197, .external_lex_state = 52}, + [1737] = {.lex_state = 197, .external_lex_state = 52}, + [1738] = {.lex_state = 197, .external_lex_state = 52}, + [1739] = {.lex_state = 197, .external_lex_state = 52}, + [1740] = {.lex_state = 197, .external_lex_state = 52}, + [1741] = {.lex_state = 197, .external_lex_state = 52}, + [1742] = {.lex_state = 197, .external_lex_state = 52}, + [1743] = {.lex_state = 197, .external_lex_state = 52}, + [1744] = {.lex_state = 200, .external_lex_state = 52}, + [1745] = {.lex_state = 197, .external_lex_state = 52}, + [1746] = {.lex_state = 197, .external_lex_state = 52}, + [1747] = {.lex_state = 197, .external_lex_state = 52}, + [1748] = {.lex_state = 197, .external_lex_state = 52}, + [1749] = {.lex_state = 197, .external_lex_state = 52}, + [1750] = {.lex_state = 197, .external_lex_state = 52}, + [1751] = {.lex_state = 197, .external_lex_state = 52}, + [1752] = {.lex_state = 197, .external_lex_state = 52}, + [1753] = {.lex_state = 197, .external_lex_state = 52}, + [1754] = {.lex_state = 197, .external_lex_state = 52}, + [1755] = {.lex_state = 197, .external_lex_state = 52}, + [1756] = {.lex_state = 197, .external_lex_state = 52}, + [1757] = {.lex_state = 197, .external_lex_state = 52}, + [1758] = {.lex_state = 197, .external_lex_state = 52}, + [1759] = {.lex_state = 197, .external_lex_state = 52}, + [1760] = {.lex_state = 197, .external_lex_state = 52}, + [1761] = {.lex_state = 197, .external_lex_state = 52}, + [1762] = {.lex_state = 197, .external_lex_state = 52}, + [1763] = {.lex_state = 197, .external_lex_state = 52}, + [1764] = {.lex_state = 197, .external_lex_state = 52}, + [1765] = {.lex_state = 197, .external_lex_state = 52}, + [1766] = {.lex_state = 197, .external_lex_state = 52}, + [1767] = {.lex_state = 197, .external_lex_state = 52}, + [1768] = {.lex_state = 197, .external_lex_state = 52}, + [1769] = {.lex_state = 202, .external_lex_state = 52}, + [1770] = {.lex_state = 202, .external_lex_state = 52}, + [1771] = {.lex_state = 202, .external_lex_state = 52}, + [1772] = {.lex_state = 202, .external_lex_state = 52}, + [1773] = {.lex_state = 202, .external_lex_state = 52}, + [1774] = {.lex_state = 202, .external_lex_state = 52}, + [1775] = {.lex_state = 202, .external_lex_state = 52}, + [1776] = {.lex_state = 202, .external_lex_state = 52}, + [1777] = {.lex_state = 202, .external_lex_state = 52}, + [1778] = {.lex_state = 202, .external_lex_state = 52}, + [1779] = {.lex_state = 202, .external_lex_state = 52}, + [1780] = {.lex_state = 202, .external_lex_state = 52}, + [1781] = {.lex_state = 247, .external_lex_state = 49}, + [1782] = {.lex_state = 202, .external_lex_state = 52}, + [1783] = {.lex_state = 202, .external_lex_state = 52}, + [1784] = {.lex_state = 202, .external_lex_state = 52}, + [1785] = {.lex_state = 202, .external_lex_state = 52}, + [1786] = {.lex_state = 202, .external_lex_state = 52}, + [1787] = {.lex_state = 210, .external_lex_state = 50}, + [1788] = {.lex_state = 247, .external_lex_state = 49}, + [1789] = {.lex_state = 202, .external_lex_state = 52}, + [1790] = {.lex_state = 202, .external_lex_state = 52}, + [1791] = {.lex_state = 201, .external_lex_state = 52}, + [1792] = {.lex_state = 202, .external_lex_state = 52}, + [1793] = {.lex_state = 202, .external_lex_state = 52}, + [1794] = {.lex_state = 202, .external_lex_state = 52}, + [1795] = {.lex_state = 202, .external_lex_state = 52}, + [1796] = {.lex_state = 202, .external_lex_state = 52}, + [1797] = {.lex_state = 202, .external_lex_state = 52}, + [1798] = {.lex_state = 202, .external_lex_state = 52}, + [1799] = {.lex_state = 202, .external_lex_state = 52}, + [1800] = {.lex_state = 202, .external_lex_state = 52}, + [1801] = {.lex_state = 202, .external_lex_state = 52}, + [1802] = {.lex_state = 202, .external_lex_state = 52}, + [1803] = {.lex_state = 202, .external_lex_state = 52}, + [1804] = {.lex_state = 202, .external_lex_state = 52}, + [1805] = {.lex_state = 202, .external_lex_state = 52}, + [1806] = {.lex_state = 214}, + [1807] = {.lex_state = 203, .external_lex_state = 52}, + [1808] = {.lex_state = 198, .external_lex_state = 53}, + [1809] = {.lex_state = 203, .external_lex_state = 52}, + [1810] = {.lex_state = 203, .external_lex_state = 52}, + [1811] = {.lex_state = 214}, + [1812] = {.lex_state = 207, .external_lex_state = 43}, + [1813] = {.lex_state = 214}, + [1814] = {.lex_state = 207, .external_lex_state = 43}, + [1815] = {.lex_state = 214}, + [1816] = {.lex_state = 207, .external_lex_state = 43}, + [1817] = {.lex_state = 214}, + [1818] = {.lex_state = 207, .external_lex_state = 43}, + [1819] = {.lex_state = 207, .external_lex_state = 43}, + [1820] = {.lex_state = 203, .external_lex_state = 52}, + [1821] = {.lex_state = 214}, + [1822] = {.lex_state = 214}, + [1823] = {.lex_state = 214}, + [1824] = {.lex_state = 203, .external_lex_state = 52}, + [1825] = {.lex_state = 214}, + [1826] = {.lex_state = 198, .external_lex_state = 53}, + [1827] = {.lex_state = 214}, + [1828] = {.lex_state = 203, .external_lex_state = 52}, + [1829] = {.lex_state = 203, .external_lex_state = 52}, + [1830] = {.lex_state = 214}, + [1831] = {.lex_state = 198, .external_lex_state = 53}, + [1832] = {.lex_state = 214}, + [1833] = {.lex_state = 214}, + [1834] = {.lex_state = 203, .external_lex_state = 52}, + [1835] = {.lex_state = 214}, + [1836] = {.lex_state = 214}, + [1837] = {.lex_state = 203, .external_lex_state = 52}, + [1838] = {.lex_state = 214}, + [1839] = {.lex_state = 214}, + [1840] = {.lex_state = 203, .external_lex_state = 52}, + [1841] = {.lex_state = 214}, + [1842] = {.lex_state = 203, .external_lex_state = 52}, + [1843] = {.lex_state = 214}, + [1844] = {.lex_state = 214}, + [1845] = {.lex_state = 214}, + [1846] = {.lex_state = 214}, + [1847] = {.lex_state = 198, .external_lex_state = 53}, + [1848] = {.lex_state = 214}, + [1849] = {.lex_state = 214}, + [1850] = {.lex_state = 214}, + [1851] = {.lex_state = 214}, + [1852] = {.lex_state = 203, .external_lex_state = 52}, + [1853] = {.lex_state = 203, .external_lex_state = 52}, + [1854] = {.lex_state = 214}, + [1855] = {.lex_state = 214}, + [1856] = {.lex_state = 207, .external_lex_state = 43}, + [1857] = {.lex_state = 214}, + [1858] = {.lex_state = 214}, + [1859] = {.lex_state = 203, .external_lex_state = 52}, + [1860] = {.lex_state = 214}, + [1861] = {.lex_state = 214}, + [1862] = {.lex_state = 214}, + [1863] = {.lex_state = 214}, + [1864] = {.lex_state = 214}, + [1865] = {.lex_state = 207, .external_lex_state = 43}, + [1866] = {.lex_state = 203, .external_lex_state = 52}, + [1867] = {.lex_state = 214}, + [1868] = {.lex_state = 214}, + [1869] = {.lex_state = 203, .external_lex_state = 52}, + [1870] = {.lex_state = 207, .external_lex_state = 43}, + [1871] = {.lex_state = 214}, + [1872] = {.lex_state = 198, .external_lex_state = 53}, + [1873] = {.lex_state = 203, .external_lex_state = 52}, + [1874] = {.lex_state = 214}, + [1875] = {.lex_state = 214}, + [1876] = {.lex_state = 207, .external_lex_state = 43}, + [1877] = {.lex_state = 198, .external_lex_state = 53}, + [1878] = {.lex_state = 214}, + [1879] = {.lex_state = 203, .external_lex_state = 52}, + [1880] = {.lex_state = 214}, + [1881] = {.lex_state = 214}, + [1882] = {.lex_state = 203, .external_lex_state = 52}, + [1883] = {.lex_state = 214}, + [1884] = {.lex_state = 214}, + [1885] = {.lex_state = 214}, + [1886] = {.lex_state = 203, .external_lex_state = 52}, + [1887] = {.lex_state = 198, .external_lex_state = 53}, + [1888] = {.lex_state = 207, .external_lex_state = 43}, + [1889] = {.lex_state = 214}, + [1890] = {.lex_state = 214}, + [1891] = {.lex_state = 207, .external_lex_state = 43}, + [1892] = {.lex_state = 203, .external_lex_state = 52}, + [1893] = {.lex_state = 214}, + [1894] = {.lex_state = 203, .external_lex_state = 52}, + [1895] = {.lex_state = 203, .external_lex_state = 52}, + [1896] = {.lex_state = 214}, + [1897] = {.lex_state = 214}, + [1898] = {.lex_state = 214}, + [1899] = {.lex_state = 207, .external_lex_state = 43}, + [1900] = {.lex_state = 214}, + [1901] = {.lex_state = 203, .external_lex_state = 52}, + [1902] = {.lex_state = 203, .external_lex_state = 52}, + [1903] = {.lex_state = 214}, + [1904] = {.lex_state = 203, .external_lex_state = 52}, + [1905] = {.lex_state = 203, .external_lex_state = 52}, + [1906] = {.lex_state = 214}, + [1907] = {.lex_state = 214}, + [1908] = {.lex_state = 214}, + [1909] = {.lex_state = 214}, + [1910] = {.lex_state = 214}, + [1911] = {.lex_state = 214}, + [1912] = {.lex_state = 203, .external_lex_state = 52}, + [1913] = {.lex_state = 214}, + [1914] = {.lex_state = 214}, + [1915] = {.lex_state = 214}, + [1916] = {.lex_state = 203, .external_lex_state = 52}, + [1917] = {.lex_state = 203, .external_lex_state = 52}, + [1918] = {.lex_state = 203, .external_lex_state = 52}, + [1919] = {.lex_state = 214}, + [1920] = {.lex_state = 207, .external_lex_state = 43}, + [1921] = {.lex_state = 214}, + [1922] = {.lex_state = 205, .external_lex_state = 44}, + [1923] = {.lex_state = 205, .external_lex_state = 44}, + [1924] = {.lex_state = 205, .external_lex_state = 44}, + [1925] = {.lex_state = 205, .external_lex_state = 44}, + [1926] = {.lex_state = 205, .external_lex_state = 44}, + [1927] = {.lex_state = 205, .external_lex_state = 44}, + [1928] = {.lex_state = 205, .external_lex_state = 44}, + [1929] = {.lex_state = 205, .external_lex_state = 44}, + [1930] = {.lex_state = 205, .external_lex_state = 44}, + [1931] = {.lex_state = 205, .external_lex_state = 44}, + [1932] = {.lex_state = 205, .external_lex_state = 44}, + [1933] = {.lex_state = 205, .external_lex_state = 44}, + [1934] = {.lex_state = 205, .external_lex_state = 44}, + [1935] = {.lex_state = 198}, + [1936] = {.lex_state = 198}, + [1937] = {.lex_state = 198}, + [1938] = {.lex_state = 198}, + [1939] = {.lex_state = 198}, + [1940] = {.lex_state = 198}, + [1941] = {.lex_state = 198}, + [1942] = {.lex_state = 254, .external_lex_state = 54}, + [1943] = {.lex_state = 198}, + [1944] = {.lex_state = 254, .external_lex_state = 54}, + [1945] = {.lex_state = 254, .external_lex_state = 54}, + [1946] = {.lex_state = 198}, + [1947] = {.lex_state = 198}, + [1948] = {.lex_state = 198}, + [1949] = {.lex_state = 198}, + [1950] = {.lex_state = 198}, + [1951] = {.lex_state = 198}, + [1952] = {.lex_state = 198}, + [1953] = {.lex_state = 245, .external_lex_state = 45}, + [1954] = {.lex_state = 67, .external_lex_state = 49}, + [1955] = {.lex_state = 208}, + [1956] = {.lex_state = 67, .external_lex_state = 49}, + [1957] = {.lex_state = 67, .external_lex_state = 49}, + [1958] = {.lex_state = 214, .external_lex_state = 55}, + [1959] = {.lex_state = 211, .external_lex_state = 56}, + [1960] = {.lex_state = 214, .external_lex_state = 55}, + [1961] = {.lex_state = 214, .external_lex_state = 55}, + [1962] = {.lex_state = 67, .external_lex_state = 49}, + [1963] = {.lex_state = 214, .external_lex_state = 55}, + [1964] = {.lex_state = 214, .external_lex_state = 55}, + [1965] = {.lex_state = 214, .external_lex_state = 55}, + [1966] = {.lex_state = 214, .external_lex_state = 55}, + [1967] = {.lex_state = 214, .external_lex_state = 55}, + [1968] = {.lex_state = 67, .external_lex_state = 49}, + [1969] = {.lex_state = 214, .external_lex_state = 55}, + [1970] = {.lex_state = 214, .external_lex_state = 55}, + [1971] = {.lex_state = 211, .external_lex_state = 56}, + [1972] = {.lex_state = 211, .external_lex_state = 56}, + [1973] = {.lex_state = 214, .external_lex_state = 55}, + [1974] = {.lex_state = 67, .external_lex_state = 49}, + [1975] = {.lex_state = 67, .external_lex_state = 49}, + [1976] = {.lex_state = 67, .external_lex_state = 49}, + [1977] = {.lex_state = 67, .external_lex_state = 49}, + [1978] = {.lex_state = 67, .external_lex_state = 49}, + [1979] = {.lex_state = 67, .external_lex_state = 49}, + [1980] = {.lex_state = 214}, + [1981] = {.lex_state = 67, .external_lex_state = 49}, + [1982] = {.lex_state = 67, .external_lex_state = 49}, + [1983] = {.lex_state = 214}, + [1984] = {.lex_state = 67, .external_lex_state = 49}, + [1985] = {.lex_state = 67, .external_lex_state = 49}, + [1986] = {.lex_state = 67, .external_lex_state = 49}, + [1987] = {.lex_state = 67, .external_lex_state = 49}, + [1988] = {.lex_state = 67, .external_lex_state = 49}, + [1989] = {.lex_state = 67, .external_lex_state = 49}, + [1990] = {.lex_state = 67, .external_lex_state = 45}, + [1991] = {.lex_state = 254}, + [1992] = {.lex_state = 217, .external_lex_state = 55}, + [1993] = {.lex_state = 67, .external_lex_state = 45}, + [1994] = {.lex_state = 254, .external_lex_state = 54}, + [1995] = {.lex_state = 217, .external_lex_state = 55}, + [1996] = {.lex_state = 67, .external_lex_state = 45}, + [1997] = {.lex_state = 254}, + [1998] = {.lex_state = 217, .external_lex_state = 55}, + [1999] = {.lex_state = 67, .external_lex_state = 45}, + [2000] = {.lex_state = 254, .external_lex_state = 54}, + [2001] = {.lex_state = 254, .external_lex_state = 54}, + [2002] = {.lex_state = 211, .external_lex_state = 56}, + [2003] = {.lex_state = 254}, + [2004] = {.lex_state = 217, .external_lex_state = 55}, + [2005] = {.lex_state = 254, .external_lex_state = 54}, + [2006] = {.lex_state = 254, .external_lex_state = 54}, + [2007] = {.lex_state = 211, .external_lex_state = 56}, + [2008] = {.lex_state = 211, .external_lex_state = 56}, + [2009] = {.lex_state = 67, .external_lex_state = 45}, + [2010] = {.lex_state = 211, .external_lex_state = 56}, + [2011] = {.lex_state = 254, .external_lex_state = 54}, + [2012] = {.lex_state = 67, .external_lex_state = 45}, + [2013] = {.lex_state = 254}, + [2014] = {.lex_state = 254}, + [2015] = {.lex_state = 254}, + [2016] = {.lex_state = 254, .external_lex_state = 54}, + [2017] = {.lex_state = 211, .external_lex_state = 56}, + [2018] = {.lex_state = 254, .external_lex_state = 57}, + [2019] = {.lex_state = 254, .external_lex_state = 57}, + [2020] = {.lex_state = 217, .external_lex_state = 55}, + [2021] = {.lex_state = 217, .external_lex_state = 55}, + [2022] = {.lex_state = 217, .external_lex_state = 55}, + [2023] = {.lex_state = 217, .external_lex_state = 55}, + [2024] = {.lex_state = 254, .external_lex_state = 57}, + [2025] = {.lex_state = 254, .external_lex_state = 57}, + [2026] = {.lex_state = 254, .external_lex_state = 57}, + [2027] = {.lex_state = 254, .external_lex_state = 57}, + [2028] = {.lex_state = 254, .external_lex_state = 57}, + [2029] = {.lex_state = 254, .external_lex_state = 57}, + [2030] = {.lex_state = 254, .external_lex_state = 57}, + [2031] = {.lex_state = 217, .external_lex_state = 55}, + [2032] = {.lex_state = 254, .external_lex_state = 57}, + [2033] = {.lex_state = 254, .external_lex_state = 57}, + [2034] = {.lex_state = 254, .external_lex_state = 57}, + [2035] = {.lex_state = 254, .external_lex_state = 57}, + [2036] = {.lex_state = 254, .external_lex_state = 57}, + [2037] = {.lex_state = 217, .external_lex_state = 55}, + [2038] = {.lex_state = 254, .external_lex_state = 57}, + [2039] = {.lex_state = 254, .external_lex_state = 57}, + [2040] = {.lex_state = 254, .external_lex_state = 57}, + [2041] = {.lex_state = 254, .external_lex_state = 57}, + [2042] = {.lex_state = 254, .external_lex_state = 57}, + [2043] = {.lex_state = 254, .external_lex_state = 57}, + [2044] = {.lex_state = 254, .external_lex_state = 57}, + [2045] = {.lex_state = 254, .external_lex_state = 57}, + [2046] = {.lex_state = 254, .external_lex_state = 57}, + [2047] = {.lex_state = 254, .external_lex_state = 57}, + [2048] = {.lex_state = 254, .external_lex_state = 57}, + [2049] = {.lex_state = 254, .external_lex_state = 57}, + [2050] = {.lex_state = 254, .external_lex_state = 57}, + [2051] = {.lex_state = 217, .external_lex_state = 55}, + [2052] = {.lex_state = 217, .external_lex_state = 55}, + [2053] = {.lex_state = 217, .external_lex_state = 55}, + [2054] = {.lex_state = 217, .external_lex_state = 55}, + [2055] = {.lex_state = 254, .external_lex_state = 57}, + [2056] = {.lex_state = 254, .external_lex_state = 57}, + [2057] = {.lex_state = 254, .external_lex_state = 57}, + [2058] = {.lex_state = 254, .external_lex_state = 57}, + [2059] = {.lex_state = 217, .external_lex_state = 55}, + [2060] = {.lex_state = 254, .external_lex_state = 57}, + [2061] = {.lex_state = 254, .external_lex_state = 57}, + [2062] = {.lex_state = 254, .external_lex_state = 57}, + [2063] = {.lex_state = 254, .external_lex_state = 57}, + [2064] = {.lex_state = 217, .external_lex_state = 55}, + [2065] = {.lex_state = 254}, + [2066] = {.lex_state = 217, .external_lex_state = 55}, + [2067] = {.lex_state = 217, .external_lex_state = 55}, + [2068] = {.lex_state = 254, .external_lex_state = 57}, + [2069] = {.lex_state = 217, .external_lex_state = 55}, + [2070] = {.lex_state = 217, .external_lex_state = 55}, + [2071] = {.lex_state = 196, .external_lex_state = 55}, + [2072] = {.lex_state = 196, .external_lex_state = 55}, + [2073] = {.lex_state = 196, .external_lex_state = 55}, + [2074] = {.lex_state = 217, .external_lex_state = 55}, + [2075] = {.lex_state = 217}, + [2076] = {.lex_state = 217, .external_lex_state = 48}, + [2077] = {.lex_state = 196, .external_lex_state = 55}, + [2078] = {.lex_state = 217}, + [2079] = {.lex_state = 217, .external_lex_state = 48}, + [2080] = {.lex_state = 217, .external_lex_state = 48}, + [2081] = {.lex_state = 217, .external_lex_state = 48}, + [2082] = {.lex_state = 217, .external_lex_state = 48}, + [2083] = {.lex_state = 217}, + [2084] = {.lex_state = 217, .external_lex_state = 48}, + [2085] = {.lex_state = 217}, + [2086] = {.lex_state = 217, .external_lex_state = 48}, + [2087] = {.lex_state = 217}, + [2088] = {.lex_state = 217}, + [2089] = {.lex_state = 217, .external_lex_state = 48}, + [2090] = {.lex_state = 196, .external_lex_state = 55}, + [2091] = {.lex_state = 217, .external_lex_state = 48}, + [2092] = {.lex_state = 217}, + [2093] = {.lex_state = 217}, + [2094] = {.lex_state = 217}, + [2095] = {.lex_state = 217}, + [2096] = {.lex_state = 217, .external_lex_state = 48}, + [2097] = {.lex_state = 217}, + [2098] = {.lex_state = 217}, + [2099] = {.lex_state = 217}, + [2100] = {.lex_state = 254, .external_lex_state = 58}, + [2101] = {.lex_state = 198}, + [2102] = {.lex_state = 217}, + [2103] = {.lex_state = 217}, + [2104] = {.lex_state = 254, .external_lex_state = 58}, + [2105] = {.lex_state = 254}, + [2106] = {.lex_state = 254}, + [2107] = {.lex_state = 254, .external_lex_state = 58}, + [2108] = {.lex_state = 254, .external_lex_state = 58}, + [2109] = {.lex_state = 254, .external_lex_state = 58}, + [2110] = {.lex_state = 254, .external_lex_state = 58}, + [2111] = {.lex_state = 254}, + [2112] = {.lex_state = 254, .external_lex_state = 58}, + [2113] = {.lex_state = 254, .external_lex_state = 58}, + [2114] = {.lex_state = 254}, + [2115] = {.lex_state = 198}, + [2116] = {.lex_state = 198}, + [2117] = {.lex_state = 198}, + [2118] = {.lex_state = 254, .external_lex_state = 58}, + [2119] = {.lex_state = 254}, + [2120] = {.lex_state = 254, .external_lex_state = 58}, + [2121] = {.lex_state = 254}, + [2122] = {.lex_state = 198}, + [2123] = {.lex_state = 198}, + [2124] = {.lex_state = 254}, + [2125] = {.lex_state = 198}, + [2126] = {.lex_state = 254, .external_lex_state = 58}, + [2127] = {.lex_state = 254, .external_lex_state = 58}, + [2128] = {.lex_state = 241, .external_lex_state = 45}, + [2129] = {.lex_state = 254}, + [2130] = {.lex_state = 241, .external_lex_state = 45}, + [2131] = {.lex_state = 254}, + [2132] = {.lex_state = 254}, + [2133] = {.lex_state = 198}, + [2134] = {.lex_state = 254, .external_lex_state = 58}, + [2135] = {.lex_state = 254, .external_lex_state = 58}, + [2136] = {.lex_state = 254, .external_lex_state = 59}, + [2137] = {.lex_state = 254, .external_lex_state = 59}, + [2138] = {.lex_state = 198}, + [2139] = {.lex_state = 254, .external_lex_state = 58}, + [2140] = {.lex_state = 196}, + [2141] = {.lex_state = 254, .external_lex_state = 58}, + [2142] = {.lex_state = 241, .external_lex_state = 45}, + [2143] = {.lex_state = 198}, + [2144] = {.lex_state = 254, .external_lex_state = 58}, + [2145] = {.lex_state = 254, .external_lex_state = 58}, + [2146] = {.lex_state = 198}, + [2147] = {.lex_state = 241, .external_lex_state = 45}, + [2148] = {.lex_state = 198}, + [2149] = {.lex_state = 198}, + [2150] = {.lex_state = 254}, + [2151] = {.lex_state = 241, .external_lex_state = 45}, + [2152] = {.lex_state = 254}, + [2153] = {.lex_state = 254, .external_lex_state = 58}, + [2154] = {.lex_state = 254}, + [2155] = {.lex_state = 241, .external_lex_state = 45}, + [2156] = {.lex_state = 241, .external_lex_state = 45}, + [2157] = {.lex_state = 254}, + [2158] = {.lex_state = 254}, + [2159] = {.lex_state = 254}, + [2160] = {.lex_state = 254}, + [2161] = {.lex_state = 241, .external_lex_state = 45}, + [2162] = {.lex_state = 254}, + [2163] = {.lex_state = 254}, + [2164] = {.lex_state = 254}, + [2165] = {.lex_state = 254, .external_lex_state = 59}, + [2166] = {.lex_state = 241, .external_lex_state = 45}, + [2167] = {.lex_state = 254, .external_lex_state = 59}, + [2168] = {.lex_state = 254}, + [2169] = {.lex_state = 254}, + [2170] = {.lex_state = 254}, + [2171] = {.lex_state = 254, .external_lex_state = 58}, + [2172] = {.lex_state = 254}, + [2173] = {.lex_state = 254, .external_lex_state = 58}, + [2174] = {.lex_state = 254, .external_lex_state = 58}, + [2175] = {.lex_state = 254, .external_lex_state = 58}, + [2176] = {.lex_state = 254}, + [2177] = {.lex_state = 254, .external_lex_state = 58}, + [2178] = {.lex_state = 241, .external_lex_state = 45}, + [2179] = {.lex_state = 241, .external_lex_state = 45}, + [2180] = {.lex_state = 254}, + [2181] = {.lex_state = 254, .external_lex_state = 58}, + [2182] = {.lex_state = 254}, + [2183] = {.lex_state = 254}, + [2184] = {.lex_state = 241, .external_lex_state = 45}, + [2185] = {.lex_state = 254}, + [2186] = {.lex_state = 198}, + [2187] = {.lex_state = 254}, + [2188] = {.lex_state = 196}, + [2189] = {.lex_state = 254}, + [2190] = {.lex_state = 254}, + [2191] = {.lex_state = 254}, + [2192] = {.lex_state = 196}, + [2193] = {.lex_state = 254}, + [2194] = {.lex_state = 254, .external_lex_state = 58}, + [2195] = {.lex_state = 254, .external_lex_state = 58}, + [2196] = {.lex_state = 254}, + [2197] = {.lex_state = 196}, + [2198] = {.lex_state = 254}, + [2199] = {.lex_state = 254}, + [2200] = {.lex_state = 254}, + [2201] = {.lex_state = 254}, + [2202] = {.lex_state = 196}, + [2203] = {.lex_state = 196}, + [2204] = {.lex_state = 254}, + [2205] = {.lex_state = 254, .external_lex_state = 60}, + [2206] = {.lex_state = 254}, + [2207] = {.lex_state = 254, .external_lex_state = 60}, + [2208] = {.lex_state = 196}, + [2209] = {.lex_state = 254}, + [2210] = {.lex_state = 196}, + [2211] = {.lex_state = 241, .external_lex_state = 45}, + [2212] = {.lex_state = 254}, + [2213] = {.lex_state = 254}, + [2214] = {.lex_state = 196}, + [2215] = {.lex_state = 254}, + [2216] = {.lex_state = 254}, + [2217] = {.lex_state = 196}, + [2218] = {.lex_state = 254, .external_lex_state = 58}, + [2219] = {.lex_state = 254, .external_lex_state = 58}, + [2220] = {.lex_state = 254}, + [2221] = {.lex_state = 196}, + [2222] = {.lex_state = 254, .external_lex_state = 58}, + [2223] = {.lex_state = 254}, + [2224] = {.lex_state = 254}, + [2225] = {.lex_state = 196}, + [2226] = {.lex_state = 196}, + [2227] = {.lex_state = 254}, + [2228] = {.lex_state = 254}, + [2229] = {.lex_state = 254}, + [2230] = {.lex_state = 254}, + [2231] = {.lex_state = 241, .external_lex_state = 45}, + [2232] = {.lex_state = 254}, + [2233] = {.lex_state = 196}, + [2234] = {.lex_state = 254}, + [2235] = {.lex_state = 254}, + [2236] = {.lex_state = 196}, + [2237] = {.lex_state = 254}, + [2238] = {.lex_state = 254}, + [2239] = {.lex_state = 254, .external_lex_state = 59}, + [2240] = {.lex_state = 196}, + [2241] = {.lex_state = 196}, + [2242] = {.lex_state = 254}, + [2243] = {.lex_state = 254, .external_lex_state = 59}, + [2244] = {.lex_state = 241, .external_lex_state = 45}, + [2245] = {.lex_state = 241, .external_lex_state = 45}, + [2246] = {.lex_state = 196}, + [2247] = {.lex_state = 196}, + [2248] = {.lex_state = 254}, + [2249] = {.lex_state = 254}, + [2250] = {.lex_state = 198}, + [2251] = {.lex_state = 198}, + [2252] = {.lex_state = 196}, + [2253] = {.lex_state = 196}, + [2254] = {.lex_state = 254, .external_lex_state = 58}, + [2255] = {.lex_state = 254, .external_lex_state = 60}, + [2256] = {.lex_state = 254}, + [2257] = {.lex_state = 254, .external_lex_state = 60}, + [2258] = {.lex_state = 254, .external_lex_state = 58}, + [2259] = {.lex_state = 254, .external_lex_state = 58}, + [2260] = {.lex_state = 254, .external_lex_state = 58}, + [2261] = {.lex_state = 196}, + [2262] = {.lex_state = 254}, + [2263] = {.lex_state = 254}, + [2264] = {.lex_state = 196}, + [2265] = {.lex_state = 196}, + [2266] = {.lex_state = 254}, + [2267] = {.lex_state = 196}, + [2268] = {.lex_state = 254}, + [2269] = {.lex_state = 254}, + [2270] = {.lex_state = 196}, + [2271] = {.lex_state = 254}, + [2272] = {.lex_state = 241, .external_lex_state = 45}, + [2273] = {.lex_state = 241, .external_lex_state = 45}, + [2274] = {.lex_state = 254}, + [2275] = {.lex_state = 254}, + [2276] = {.lex_state = 254}, + [2277] = {.lex_state = 196}, + [2278] = {.lex_state = 254}, + [2279] = {.lex_state = 254}, + [2280] = {.lex_state = 196}, + [2281] = {.lex_state = 254, .external_lex_state = 58}, + [2282] = {.lex_state = 254}, + [2283] = {.lex_state = 196}, + [2284] = {.lex_state = 254}, + [2285] = {.lex_state = 254}, + [2286] = {.lex_state = 254}, + [2287] = {.lex_state = 254, .external_lex_state = 58}, + [2288] = {.lex_state = 254}, + [2289] = {.lex_state = 196}, + [2290] = {.lex_state = 196}, + [2291] = {.lex_state = 254}, + [2292] = {.lex_state = 254}, + [2293] = {.lex_state = 254}, + [2294] = {.lex_state = 254}, + [2295] = {.lex_state = 254, .external_lex_state = 60}, + [2296] = {.lex_state = 254}, + [2297] = {.lex_state = 254}, + [2298] = {.lex_state = 196}, + [2299] = {.lex_state = 254}, + [2300] = {.lex_state = 198}, + [2301] = {.lex_state = 198}, + [2302] = {.lex_state = 196}, + [2303] = {.lex_state = 254}, + [2304] = {.lex_state = 254}, + [2305] = {.lex_state = 196}, + [2306] = {.lex_state = 198}, + [2307] = {.lex_state = 254}, + [2308] = {.lex_state = 254}, + [2309] = {.lex_state = 254}, + [2310] = {.lex_state = 254}, + [2311] = {.lex_state = 198}, + [2312] = {.lex_state = 254, .external_lex_state = 60}, + [2313] = {.lex_state = 196}, + [2314] = {.lex_state = 196}, + [2315] = {.lex_state = 254}, + [2316] = {.lex_state = 196}, + [2317] = {.lex_state = 254}, + [2318] = {.lex_state = 196}, + [2319] = {.lex_state = 254}, + [2320] = {.lex_state = 196}, + [2321] = {.lex_state = 254}, + [2322] = {.lex_state = 254}, + [2323] = {.lex_state = 196}, + [2324] = {.lex_state = 196}, + [2325] = {.lex_state = 196}, + [2326] = {.lex_state = 254}, + [2327] = {.lex_state = 254}, + [2328] = {.lex_state = 196}, + [2329] = {.lex_state = 254}, + [2330] = {.lex_state = 254}, + [2331] = {.lex_state = 254}, + [2332] = {.lex_state = 254}, + [2333] = {.lex_state = 254}, + [2334] = {.lex_state = 196}, + [2335] = {.lex_state = 254}, + [2336] = {.lex_state = 254}, + [2337] = {.lex_state = 196}, + [2338] = {.lex_state = 196}, + [2339] = {.lex_state = 198}, +}; + +static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { + [0] = { + [ts_builtin_sym_end] = ACTIONS(1), + [sym_word] = ACTIONS(1), + [anon_sym_for] = ACTIONS(1), + [anon_sym_in] = ACTIONS(1), + [anon_sym_while] = ACTIONS(1), + [anon_sym_until] = ACTIONS(1), + [anon_sym_do] = ACTIONS(1), + [anon_sym_done] = ACTIONS(1), + [anon_sym_if] = ACTIONS(1), + [anon_sym_then] = ACTIONS(1), + [anon_sym_fi] = ACTIONS(1), + [anon_sym_elif] = ACTIONS(1), + [anon_sym_else] = ACTIONS(1), + [anon_sym_case] = ACTIONS(1), + [anon_sym_esac] = ACTIONS(1), + [anon_sym_LPAREN] = ACTIONS(1), + [anon_sym_PIPE] = ACTIONS(1), + [anon_sym_RPAREN] = ACTIONS(1), + [anon_sym_SEMI_SEMI] = ACTIONS(1), + [anon_sym_LBRACE] = ACTIONS(1), + [anon_sym_RBRACE] = ACTIONS(1), + [anon_sym_AMP_AMP] = ACTIONS(1), + [anon_sym_PIPE_PIPE] = ACTIONS(1), + [anon_sym_BANG] = ACTIONS(1), + [anon_sym_EQ] = ACTIONS(1), + [anon_sym_LT] = ACTIONS(1), + [anon_sym_GT] = ACTIONS(1), + [anon_sym_GT_GT] = ACTIONS(1), + [anon_sym_AMP_GT] = ACTIONS(1), + [anon_sym_AMP_GT_GT] = ACTIONS(1), + [anon_sym_LT_AMP] = ACTIONS(1), + [anon_sym_GT_AMP] = ACTIONS(1), + [anon_sym_GT_PIPE] = ACTIONS(1), + [anon_sym_LT_AMP_DASH] = ACTIONS(1), + [anon_sym_GT_AMP_DASH] = ACTIONS(1), + [anon_sym_LT_LT] = ACTIONS(1), + [anon_sym_LT_LT_DASH] = ACTIONS(1), + [anon_sym_PIPE_AMP] = ACTIONS(1), + [anon_sym_DOLLAR_LPAREN_LPAREN] = ACTIONS(1), + [anon_sym_STAR_EQ] = ACTIONS(1), + [anon_sym_SLASH_EQ] = ACTIONS(1), + [anon_sym_PERCENT_EQ] = ACTIONS(1), + [anon_sym_LT_LT_EQ] = ACTIONS(1), + [anon_sym_GT_GT_EQ] = ACTIONS(1), + [anon_sym_AMP_EQ] = ACTIONS(1), + [anon_sym_CARET_EQ] = ACTIONS(1), + [anon_sym_PIPE_EQ] = ACTIONS(1), + [anon_sym_CARET] = ACTIONS(1), + [anon_sym_AMP] = ACTIONS(1), + [anon_sym_LT_EQ] = ACTIONS(1), + [anon_sym_GT_EQ] = ACTIONS(1), + [anon_sym_PLUS] = ACTIONS(1), + [anon_sym_DASH] = ACTIONS(1), + [anon_sym_STAR] = ACTIONS(1), + [anon_sym_SLASH] = ACTIONS(1), + [anon_sym_PERCENT] = ACTIONS(1), + [anon_sym_QMARK] = ACTIONS(1), + [anon_sym_COLON] = ACTIONS(1), + [anon_sym_DASH2] = ACTIONS(1), + [anon_sym_PLUS2] = ACTIONS(1), + [anon_sym_TILDE] = ACTIONS(1), + [aux_sym_concatenation_token1] = ACTIONS(1), + [anon_sym_DOLLAR] = ACTIONS(1), + [anon_sym_DQUOTE] = ACTIONS(1), + [sym_raw_string] = ACTIONS(1), + [sym_number] = ACTIONS(1), + [anon_sym_POUND] = ACTIONS(1), + [anon_sym_DOLLAR_LBRACE] = ACTIONS(1), + [anon_sym_DASH3] = ACTIONS(1), + [anon_sym_COLON_EQ] = ACTIONS(1), + [anon_sym_EQ2] = ACTIONS(1), + [anon_sym_COLON_QMARK] = ACTIONS(1), + [anon_sym_QMARK2] = ACTIONS(1), + [anon_sym_PLUS3] = ACTIONS(1), + [anon_sym_PERCENT_PERCENT] = ACTIONS(1), + [anon_sym_DOLLAR_LPAREN] = ACTIONS(1), + [anon_sym_BQUOTE] = ACTIONS(1), + [sym_comment] = ACTIONS(3), + [anon_sym_AT] = ACTIONS(1), + [anon_sym_0] = ACTIONS(1), + [anon_sym__] = ACTIONS(1), + [anon_sym_SEMI] = ACTIONS(1), + [sym_heredoc_start] = ACTIONS(1), + [sym_simple_heredoc_body] = ACTIONS(1), + [sym__heredoc_body_beginning] = ACTIONS(1), + [sym_heredoc_content] = ACTIONS(1), + [sym_heredoc_end] = ACTIONS(1), + [sym_file_descriptor] = ACTIONS(1), + [sym__empty_value] = ACTIONS(1), + [sym__concat] = ACTIONS(1), + [sym_variable_name] = ACTIONS(1), + [sym_regex] = ACTIONS(1), + [sym__expansion_word] = ACTIONS(1), + [sym_extglob_pattern] = ACTIONS(1), + [sym__bare_dollar] = ACTIONS(1), + [sym__immediate_double_hash] = ACTIONS(1), + [sym___error_recovery] = ACTIONS(1), + }, + [1] = { + [sym_program] = STATE(2331), + [sym__statements] = STATE(2330), + [sym__statement_not_pipeline] = STATE(2125), + [sym_redirected_statement] = STATE(1006), + [sym_for_statement] = STATE(1006), + [sym_while_statement] = STATE(1006), + [sym_if_statement] = STATE(1006), + [sym_case_statement] = STATE(1006), + [sym_function_definition] = STATE(1006), + [sym_compound_statement] = STATE(1006), + [sym_subshell] = STATE(1006), + [sym_pipeline] = STATE(1175), + [sym_list] = STATE(1006), + [sym_negated_command] = STATE(1006), + [sym_command] = STATE(1006), + [sym_command_name] = STATE(183), + [sym_variable_assignment] = STATE(236), + [sym__variable_assignments] = STATE(1006), + [sym_file_redirect] = STATE(685), + [sym_arithmetic_expansion] = STATE(291), + [sym_concatenation] = STATE(636), + [sym_string] = STATE(291), + [sym_simple_expansion] = STATE(291), + [sym_expansion] = STATE(291), + [sym_command_substitution] = STATE(291), + [aux_sym__statements_repeat1] = STATE(133), + [aux_sym_redirected_statement_repeat2] = STATE(1219), + [aux_sym_command_repeat1] = STATE(743), + [ts_builtin_sym_end] = ACTIONS(5), + [sym_word] = ACTIONS(7), + [anon_sym_for] = ACTIONS(9), + [anon_sym_while] = ACTIONS(11), + [anon_sym_until] = ACTIONS(11), + [anon_sym_if] = ACTIONS(13), + [anon_sym_case] = ACTIONS(15), + [anon_sym_LPAREN] = ACTIONS(17), + [anon_sym_LBRACE] = ACTIONS(19), + [anon_sym_BANG] = ACTIONS(21), + [anon_sym_LT] = ACTIONS(23), + [anon_sym_GT] = ACTIONS(23), + [anon_sym_GT_GT] = ACTIONS(23), + [anon_sym_AMP_GT] = ACTIONS(23), + [anon_sym_AMP_GT_GT] = ACTIONS(23), + [anon_sym_LT_AMP] = ACTIONS(23), + [anon_sym_GT_AMP] = ACTIONS(23), + [anon_sym_GT_PIPE] = ACTIONS(23), + [anon_sym_LT_AMP_DASH] = ACTIONS(25), + [anon_sym_GT_AMP_DASH] = ACTIONS(25), + [anon_sym_DOLLAR_LPAREN_LPAREN] = ACTIONS(27), + [anon_sym_DOLLAR] = ACTIONS(29), + [anon_sym_DQUOTE] = ACTIONS(31), + [sym_raw_string] = ACTIONS(33), + [sym_number] = ACTIONS(33), + [anon_sym_DOLLAR_LBRACE] = ACTIONS(35), + [anon_sym_DOLLAR_LPAREN] = ACTIONS(37), + [anon_sym_BQUOTE] = ACTIONS(39), + [sym_comment] = ACTIONS(3), + [sym_file_descriptor] = ACTIONS(41), + [sym_variable_name] = ACTIONS(43), + }, +}; + +static const uint16_t ts_small_parse_table[] = { + [0] = 36, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(47), 1, + anon_sym_fi, + ACTIONS(49), 1, + anon_sym_elif, + ACTIONS(51), 1, + anon_sym_else, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(4), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(279), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1223), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2199), 1, + sym_else_clause, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(2015), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1140), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [135] = 36, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(49), 1, + anon_sym_elif, + ACTIONS(51), 1, + anon_sym_else, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(77), 1, + anon_sym_fi, + STATE(5), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(279), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1223), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2294), 1, + sym_else_clause, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(2013), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1140), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [270] = 36, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(49), 1, + anon_sym_elif, + ACTIONS(51), 1, + anon_sym_else, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(79), 1, + anon_sym_fi, + STATE(24), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(279), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1223), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2190), 1, + sym_else_clause, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(2003), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1140), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [405] = 36, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(49), 1, + anon_sym_elif, + ACTIONS(51), 1, + anon_sym_else, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(81), 1, + anon_sym_fi, + STATE(24), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(279), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1223), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2269), 1, + sym_else_clause, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(1991), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1140), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [540] = 36, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(49), 1, + anon_sym_elif, + ACTIONS(51), 1, + anon_sym_else, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(83), 1, + anon_sym_fi, + STATE(24), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(279), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1223), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2158), 1, + sym_else_clause, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(2014), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1140), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [675] = 36, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(49), 1, + anon_sym_elif, + ACTIONS(51), 1, + anon_sym_else, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(85), 1, + anon_sym_fi, + STATE(6), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(279), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1223), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2288), 1, + sym_else_clause, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(1997), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1140), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [810] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(99), 1, + anon_sym_LF, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2118), 1, + sym__statements, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [938] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + ACTIONS(127), 1, + anon_sym_LF, + STATE(8), 1, + aux_sym__case_item_last_repeat2, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2108), 1, + sym__statements, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [1066] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(99), 1, + anon_sym_LF, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2159), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [1194] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(129), 1, + anon_sym_LF, + STATE(14), 1, + aux_sym__case_item_last_repeat2, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2162), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [1322] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(131), 1, + anon_sym_LF, + STATE(34), 1, + aux_sym__case_item_last_repeat2, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2163), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [1450] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(99), 1, + anon_sym_LF, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2164), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [1578] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(99), 1, + anon_sym_LF, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2152), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [1706] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(133), 1, + anon_sym_LF, + STATE(23), 1, + aux_sym__case_item_last_repeat2, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2168), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [1834] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(135), 1, + anon_sym_LF, + STATE(10), 1, + aux_sym__case_item_last_repeat2, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2169), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [1962] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(99), 1, + anon_sym_LF, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2170), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [2090] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(137), 1, + anon_sym_LF, + STATE(13), 1, + aux_sym__case_item_last_repeat2, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2172), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [2218] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(99), 1, + anon_sym_LF, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2122), 1, + sym__statement_not_pipeline, + STATE(2126), 1, + sym__statements, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [2346] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(139), 1, + anon_sym_LF, + STATE(17), 1, + aux_sym__case_item_last_repeat2, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2180), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [2474] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(99), 1, + anon_sym_LF, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2122), 1, + sym__statement_not_pipeline, + STATE(2127), 1, + sym__statements, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [2602] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(99), 1, + anon_sym_LF, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2120), 1, + sym__statements, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [2730] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(99), 1, + anon_sym_LF, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2157), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [2858] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(141), 1, + sym_word, + ACTIONS(144), 1, + anon_sym_for, + ACTIONS(150), 1, + anon_sym_if, + ACTIONS(155), 1, + anon_sym_case, + ACTIONS(158), 1, + anon_sym_LPAREN, + ACTIONS(161), 1, + anon_sym_LBRACE, + ACTIONS(164), 1, + anon_sym_BANG, + ACTIONS(173), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(176), 1, + anon_sym_DOLLAR, + ACTIONS(179), 1, + anon_sym_DQUOTE, + ACTIONS(185), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(188), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(191), 1, + anon_sym_BQUOTE, + ACTIONS(194), 1, + sym_file_descriptor, + ACTIONS(197), 1, + sym_variable_name, + STATE(24), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(279), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1223), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(147), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(170), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(182), 2, + sym_raw_string, + sym_number, + ACTIONS(153), 3, + anon_sym_fi, + anon_sym_elif, + anon_sym_else, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(167), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1140), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [2982] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + ACTIONS(200), 1, + anon_sym_LF, + STATE(19), 1, + aux_sym__case_item_last_repeat2, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2112), 1, + sym__statements, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [3110] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(99), 1, + anon_sym_LF, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2100), 1, + sym__statements, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [3238] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(24), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(279), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1223), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + ACTIONS(202), 3, + anon_sym_fi, + anon_sym_elif, + anon_sym_else, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1140), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [3362] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + ACTIONS(204), 1, + anon_sym_LF, + STATE(21), 1, + aux_sym__case_item_last_repeat2, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2107), 1, + sym__statements, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [3490] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + ACTIONS(206), 1, + anon_sym_LF, + STATE(22), 1, + aux_sym__case_item_last_repeat2, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2109), 1, + sym__statements, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [3618] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(99), 1, + anon_sym_LF, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2110), 1, + sym__statements, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [3746] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + ACTIONS(208), 1, + anon_sym_LF, + STATE(26), 1, + aux_sym__case_item_last_repeat2, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2113), 1, + sym__statements, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [3874] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(27), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(279), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1223), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + ACTIONS(210), 3, + anon_sym_fi, + anon_sym_elif, + anon_sym_else, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1140), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [3998] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + ACTIONS(212), 1, + anon_sym_LF, + STATE(30), 1, + aux_sym__case_item_last_repeat2, + STATE(134), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(229), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1096), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2104), 1, + sym__statements, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1086), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [4126] = 34, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(99), 1, + anon_sym_LF, + STATE(130), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(262), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1216), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + STATE(2154), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1146), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [4254] = 33, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(214), 1, + anon_sym_do, + STATE(118), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(280), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1235), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(1324), 1, + sym_do_group, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1174), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [4379] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(141), 1, + sym_word, + ACTIONS(144), 1, + anon_sym_for, + ACTIONS(150), 1, + anon_sym_if, + ACTIONS(155), 1, + anon_sym_case, + ACTIONS(158), 1, + anon_sym_LPAREN, + ACTIONS(161), 1, + anon_sym_LBRACE, + ACTIONS(164), 1, + anon_sym_BANG, + ACTIONS(173), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(176), 1, + anon_sym_DOLLAR, + ACTIONS(179), 1, + anon_sym_DQUOTE, + ACTIONS(185), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(188), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(191), 1, + anon_sym_BQUOTE, + ACTIONS(194), 1, + sym_file_descriptor, + ACTIONS(197), 1, + sym_variable_name, + STATE(36), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(147), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(153), 2, + anon_sym_done, + anon_sym_then, + ACTIONS(170), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(182), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(167), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [4502] = 33, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(216), 1, + anon_sym_do, + STATE(118), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(280), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1187), 1, + sym_do_group, + STATE(1235), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1174), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [4627] = 33, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(218), 1, + anon_sym_do, + STATE(118), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(280), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1235), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(1610), 1, + sym_do_group, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1174), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [4752] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(675), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2323), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [4874] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2223), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [4996] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(238), 1, + anon_sym_done, + STATE(93), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [5118] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2333), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [5240] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(714), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2334), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [5362] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2336), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [5484] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(240), 1, + anon_sym_then, + STATE(36), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [5606] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(242), 1, + anon_sym_fi, + STATE(72), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(256), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1289), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1135), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [5728] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(680), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2265), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [5850] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(244), 1, + anon_sym_done, + STATE(36), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [5972] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(246), 1, + anon_sym_RBRACE, + STATE(98), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(281), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1200), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1141), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [6094] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2321), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [6216] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2327), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [6338] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(745), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2320), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [6460] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2324), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [6582] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2303), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [6704] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(721), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2302), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [6826] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2285), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [6948] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(748), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2280), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [7070] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2274), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [7192] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(678), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2267), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [7314] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2262), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [7436] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(691), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2261), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [7558] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2237), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [7680] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(696), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2236), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [7802] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2185), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [7924] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2322), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [8046] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(707), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2208), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [8168] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2187), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [8290] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(699), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2188), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [8412] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2191), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [8534] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(701), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2192), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [8656] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2196), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [8778] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(248), 1, + anon_sym_fi, + STATE(79), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(256), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1289), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1135), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [8900] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(250), 1, + anon_sym_then, + STATE(36), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [9022] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(729), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2328), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [9144] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(702), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2197), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [9266] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2131), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [9388] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2201), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [9510] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(703), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2203), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [9632] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(141), 1, + sym_word, + ACTIONS(144), 1, + anon_sym_for, + ACTIONS(150), 1, + anon_sym_if, + ACTIONS(153), 1, + anon_sym_fi, + ACTIONS(155), 1, + anon_sym_case, + ACTIONS(158), 1, + anon_sym_LPAREN, + ACTIONS(161), 1, + anon_sym_LBRACE, + ACTIONS(164), 1, + anon_sym_BANG, + ACTIONS(173), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(176), 1, + anon_sym_DOLLAR, + ACTIONS(179), 1, + anon_sym_DQUOTE, + ACTIONS(185), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(188), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(191), 1, + anon_sym_BQUOTE, + ACTIONS(194), 1, + sym_file_descriptor, + ACTIONS(197), 1, + sym_variable_name, + STATE(79), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(256), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1289), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(147), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(170), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(182), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(167), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1135), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [9754] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(766), 1, + sym_file_redirect, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2313), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [9876] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(252), 1, + anon_sym_done, + STATE(36), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [9998] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2213), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [10120] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(704), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2214), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [10242] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2310), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [10364] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2216), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [10486] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(254), 1, + anon_sym_done, + STATE(81), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [10608] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(746), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2305), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [10730] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(736), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2140), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [10852] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2304), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [10974] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(668), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2298), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [11096] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(741), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2217), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [11218] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2247), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [11340] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(256), 1, + anon_sym_done, + STATE(36), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [11462] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2293), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [11584] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(677), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2289), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [11706] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(258), 1, + anon_sym_RBRACE, + STATE(98), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(281), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1200), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1141), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [11828] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2286), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [11950] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(141), 1, + sym_word, + ACTIONS(144), 1, + anon_sym_for, + ACTIONS(150), 1, + anon_sym_if, + ACTIONS(153), 1, + anon_sym_RBRACE, + ACTIONS(155), 1, + anon_sym_case, + ACTIONS(158), 1, + anon_sym_LPAREN, + ACTIONS(161), 1, + anon_sym_LBRACE, + ACTIONS(164), 1, + anon_sym_BANG, + ACTIONS(173), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(176), 1, + anon_sym_DOLLAR, + ACTIONS(179), 1, + anon_sym_DQUOTE, + ACTIONS(185), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(188), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(191), 1, + anon_sym_BQUOTE, + ACTIONS(194), 1, + sym_file_descriptor, + ACTIONS(197), 1, + sym_variable_name, + STATE(98), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(281), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1200), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(147), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(170), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(182), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(167), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1141), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [12072] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(737), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2325), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [12194] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2224), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [12316] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(749), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2283), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [12438] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(725), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2226), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [12560] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2282), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [12682] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2232), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [12804] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(260), 1, + anon_sym_then, + STATE(36), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [12926] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2235), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [13048] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2315), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [13170] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(679), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2277), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [13292] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(700), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2233), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [13414] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2238), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [13536] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2318), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [13658] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(698), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2225), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [13780] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(262), 1, + anon_sym_RBRACE, + STATE(98), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(281), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1200), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1141), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [13902] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(264), 1, + anon_sym_then, + STATE(36), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [14024] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2275), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [14146] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(681), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2270), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [14268] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(266), 1, + anon_sym_done, + STATE(48), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [14390] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(141), 1, + sym_word, + ACTIONS(144), 1, + anon_sym_for, + ACTIONS(150), 1, + anon_sym_if, + ACTIONS(153), 1, + anon_sym_do, + ACTIONS(155), 1, + anon_sym_case, + ACTIONS(158), 1, + anon_sym_LPAREN, + ACTIONS(161), 1, + anon_sym_LBRACE, + ACTIONS(164), 1, + anon_sym_BANG, + ACTIONS(173), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(176), 1, + anon_sym_DOLLAR, + ACTIONS(179), 1, + anon_sym_DQUOTE, + ACTIONS(185), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(188), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(191), 1, + anon_sym_BQUOTE, + ACTIONS(194), 1, + sym_file_descriptor, + ACTIONS(197), 1, + sym_variable_name, + STATE(118), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(280), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1235), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(147), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(170), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(182), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(167), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1174), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [14512] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(689), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2241), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [14634] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2248), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [14756] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2268), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [14878] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(710), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2253), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [15000] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(730), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2316), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [15122] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(138), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(235), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(682), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1110), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + STATE(2264), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1072), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [15244] = 32, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(129), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(244), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1176), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + STATE(2263), 1, + sym__statements, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1057), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [15366] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(49), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(281), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1200), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1141), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [15485] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(45), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [15604] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(73), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [15723] = 42, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(137), 1, + aux_sym__statements_repeat1, + STATE(189), 1, + sym_command_name, + STATE(253), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1010), 1, + sym__variable_assignments, + STATE(1012), 1, + sym_command, + STATE(1013), 1, + sym_negated_command, + STATE(1015), 1, + sym_list, + STATE(1018), 1, + sym_subshell, + STATE(1019), 1, + sym_compound_statement, + STATE(1021), 1, + sym_function_definition, + STATE(1022), 1, + sym_case_statement, + STATE(1023), 1, + sym_if_statement, + STATE(1024), 1, + sym_while_statement, + STATE(1025), 1, + sym_for_statement, + STATE(1027), 1, + sym_redirected_statement, + STATE(1166), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [15864] = 42, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(137), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(255), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1095), 1, + sym_function_definition, + STATE(1102), 1, + sym_redirected_statement, + STATE(1130), 1, + sym_for_statement, + STATE(1144), 1, + sym_while_statement, + STATE(1145), 1, + sym_if_statement, + STATE(1147), 1, + sym__variable_assignments, + STATE(1151), 1, + sym_command, + STATE(1153), 1, + sym_negated_command, + STATE(1155), 1, + sym_list, + STATE(1161), 1, + sym_compound_statement, + STATE(1165), 1, + sym_subshell, + STATE(1180), 1, + sym_case_statement, + STATE(1194), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [16005] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(105), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [16124] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(35), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(280), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1235), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1174), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [16243] = 42, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + sym_word, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(21), 1, + anon_sym_BANG, + ACTIONS(27), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(29), 1, + anon_sym_DOLLAR, + ACTIONS(31), 1, + anon_sym_DQUOTE, + ACTIONS(35), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(37), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(39), 1, + anon_sym_BQUOTE, + ACTIONS(41), 1, + sym_file_descriptor, + ACTIONS(43), 1, + sym_variable_name, + STATE(137), 1, + aux_sym__statements_repeat1, + STATE(183), 1, + sym_command_name, + STATE(238), 1, + sym_variable_assignment, + STATE(636), 1, + sym_concatenation, + STATE(685), 1, + sym_file_redirect, + STATE(743), 1, + aux_sym_command_repeat1, + STATE(1031), 1, + sym_list, + STATE(1035), 1, + sym_redirected_statement, + STATE(1037), 1, + sym_for_statement, + STATE(1041), 1, + sym_while_statement, + STATE(1043), 1, + sym_if_statement, + STATE(1051), 1, + sym_case_statement, + STATE(1059), 1, + sym_function_definition, + STATE(1066), 1, + sym_compound_statement, + STATE(1074), 1, + sym_subshell, + STATE(1084), 1, + sym_negated_command, + STATE(1087), 1, + sym__variable_assignments, + STATE(1088), 1, + sym_command, + STATE(1107), 1, + sym_pipeline, + STATE(1219), 1, + aux_sym_redirected_statement_repeat2, + STATE(2125), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(25), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(33), 2, + sym_raw_string, + sym_number, + STATE(291), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(23), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [16384] = 42, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + STATE(137), 1, + aux_sym__statements_repeat1, + STATE(184), 1, + sym_command_name, + STATE(226), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1003), 1, + sym__variable_assignments, + STATE(1008), 1, + sym_negated_command, + STATE(1026), 1, + sym_compound_statement, + STATE(1044), 1, + sym_redirected_statement, + STATE(1045), 1, + sym_for_statement, + STATE(1046), 1, + sym_while_statement, + STATE(1047), 1, + sym_if_statement, + STATE(1048), 1, + sym_case_statement, + STATE(1049), 1, + sym_function_definition, + STATE(1064), 1, + sym_subshell, + STATE(1071), 1, + sym_list, + STATE(1073), 1, + sym_command, + STATE(1113), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [16525] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(113), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(281), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1200), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1141), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [16644] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(114), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(252), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1246), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1112), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [16763] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(268), 1, + sym_word, + ACTIONS(271), 1, + anon_sym_for, + ACTIONS(277), 1, + anon_sym_if, + ACTIONS(280), 1, + anon_sym_case, + ACTIONS(283), 1, + anon_sym_LPAREN, + ACTIONS(286), 1, + anon_sym_LBRACE, + ACTIONS(289), 1, + anon_sym_BANG, + ACTIONS(298), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(301), 1, + anon_sym_DOLLAR, + ACTIONS(304), 1, + anon_sym_DQUOTE, + ACTIONS(310), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(313), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(316), 1, + anon_sym_BQUOTE, + ACTIONS(319), 1, + sym_file_descriptor, + ACTIONS(322), 1, + sym_variable_name, + STATE(137), 1, + aux_sym__statements_repeat1, + STATE(191), 1, + sym_command_name, + STATE(277), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1191), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(274), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(295), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(307), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(292), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1162), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [16882] = 42, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(137), 1, + aux_sym__statements_repeat1, + STATE(185), 1, + sym_command_name, + STATE(228), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1050), 1, + sym_case_statement, + STATE(1054), 1, + sym__variable_assignments, + STATE(1055), 1, + sym_command, + STATE(1056), 1, + sym_negated_command, + STATE(1058), 1, + sym_list, + STATE(1060), 1, + sym_subshell, + STATE(1062), 1, + sym_compound_statement, + STATE(1063), 1, + sym_function_definition, + STATE(1067), 1, + sym_if_statement, + STATE(1068), 1, + sym_while_statement, + STATE(1069), 1, + sym_for_statement, + STATE(1070), 1, + sym_redirected_statement, + STATE(1114), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [17023] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(37), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(280), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1235), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1174), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [17142] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(96), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(281), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1200), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1141), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [17261] = 31, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(38), 1, + aux_sym__terminated_statement, + STATE(191), 1, + sym_command_name, + STATE(280), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1235), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1174), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [17380] = 30, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(185), 1, + sym_command_name, + STATE(257), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1117), 1, + sym_pipeline, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(2115), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1119), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [17496] = 29, + ACTIONS(3), 1, + sym_comment, + ACTIONS(325), 1, + sym_word, + ACTIONS(327), 1, + anon_sym_for, + ACTIONS(331), 1, + anon_sym_if, + ACTIONS(333), 1, + anon_sym_case, + ACTIONS(335), 1, + anon_sym_LPAREN, + ACTIONS(337), 1, + anon_sym_LBRACE, + ACTIONS(339), 1, + anon_sym_BANG, + ACTIONS(345), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(347), 1, + anon_sym_DOLLAR, + ACTIONS(349), 1, + anon_sym_DQUOTE, + ACTIONS(353), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(355), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(357), 1, + anon_sym_BQUOTE, + ACTIONS(359), 1, + sym_file_descriptor, + ACTIONS(361), 1, + sym_variable_name, + STATE(287), 1, + sym_command_name, + STATE(732), 1, + aux_sym_command_repeat1, + STATE(767), 1, + sym_variable_assignment, + STATE(928), 1, + sym_concatenation, + STATE(961), 1, + sym_file_redirect, + STATE(1440), 1, + aux_sym_redirected_statement_repeat2, + STATE(1445), 1, + sym_pipeline, + ACTIONS(329), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(343), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(351), 2, + sym_raw_string, + sym_number, + STATE(777), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(341), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1514), 13, + sym__statement_not_pipeline, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [17610] = 30, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(189), 1, + sym_command_name, + STATE(298), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1179), 1, + sym_pipeline, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(2116), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1181), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [17726] = 30, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(363), 1, + sym_word, + ACTIONS(365), 1, + anon_sym_BANG, + ACTIONS(373), 1, + sym_file_descriptor, + ACTIONS(375), 1, + sym_variable_name, + STATE(259), 1, + sym_command_name, + STATE(618), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(713), 1, + aux_sym_command_repeat1, + STATE(726), 1, + sym_file_redirect, + STATE(1411), 1, + sym_pipeline, + STATE(1420), 1, + aux_sym_redirected_statement_repeat2, + STATE(2123), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(369), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(371), 2, + sym_raw_string, + sym_number, + STATE(734), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(367), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1395), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [17842] = 30, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(363), 1, + sym_word, + ACTIONS(365), 1, + anon_sym_BANG, + ACTIONS(373), 1, + sym_file_descriptor, + ACTIONS(375), 1, + sym_variable_name, + STATE(259), 1, + sym_command_name, + STATE(620), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(713), 1, + aux_sym_command_repeat1, + STATE(726), 1, + sym_file_redirect, + STATE(1420), 1, + aux_sym_redirected_statement_repeat2, + STATE(1431), 1, + sym_pipeline, + STATE(2123), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(369), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(371), 2, + sym_raw_string, + sym_number, + STATE(734), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(367), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1406), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [17958] = 29, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(234), 1, + sym_word, + ACTIONS(236), 1, + anon_sym_BANG, + STATE(189), 1, + sym_command_name, + STATE(301), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1207), 1, + aux_sym_redirected_statement_repeat2, + STATE(1444), 1, + sym_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1170), 13, + sym__statement_not_pipeline, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [18072] = 30, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + STATE(184), 1, + sym_command_name, + STATE(267), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1097), 1, + sym_pipeline, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(2122), 1, + sym__statement_not_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1094), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [18188] = 29, + ACTIONS(3), 1, + sym_comment, + ACTIONS(87), 1, + sym_word, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(95), 1, + anon_sym_case, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(103), 1, + anon_sym_BANG, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(125), 1, + sym_variable_name, + STATE(184), 1, + sym_command_name, + STATE(248), 1, + sym_variable_assignment, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1215), 1, + aux_sym_redirected_statement_repeat2, + STATE(1443), 1, + sym_pipeline, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 2, + sym_raw_string, + sym_number, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1317), 13, + sym__statement_not_pipeline, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [18302] = 29, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(220), 1, + sym_word, + ACTIONS(222), 1, + anon_sym_BANG, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(232), 1, + sym_variable_name, + STATE(185), 1, + sym_command_name, + STATE(254), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1188), 1, + aux_sym_redirected_statement_repeat2, + STATE(1442), 1, + sym_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 2, + sym_raw_string, + sym_number, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1170), 13, + sym__statement_not_pipeline, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [18416] = 29, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(363), 1, + sym_word, + ACTIONS(365), 1, + anon_sym_BANG, + ACTIONS(373), 1, + sym_file_descriptor, + ACTIONS(375), 1, + sym_variable_name, + STATE(259), 1, + sym_command_name, + STATE(619), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(713), 1, + aux_sym_command_repeat1, + STATE(726), 1, + sym_file_redirect, + STATE(1420), 1, + aux_sym_redirected_statement_repeat2, + STATE(1447), 1, + sym_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(369), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(371), 2, + sym_raw_string, + sym_number, + STATE(734), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(367), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1170), 13, + sym__statement_not_pipeline, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [18530] = 30, + ACTIONS(3), 1, + sym_comment, + ACTIONS(325), 1, + sym_word, + ACTIONS(327), 1, + anon_sym_for, + ACTIONS(331), 1, + anon_sym_if, + ACTIONS(333), 1, + anon_sym_case, + ACTIONS(335), 1, + anon_sym_LPAREN, + ACTIONS(337), 1, + anon_sym_LBRACE, + ACTIONS(339), 1, + anon_sym_BANG, + ACTIONS(345), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(347), 1, + anon_sym_DOLLAR, + ACTIONS(349), 1, + anon_sym_DQUOTE, + ACTIONS(353), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(355), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(357), 1, + anon_sym_BQUOTE, + ACTIONS(359), 1, + sym_file_descriptor, + ACTIONS(361), 1, + sym_variable_name, + STATE(287), 1, + sym_command_name, + STATE(708), 1, + sym_variable_assignment, + STATE(732), 1, + aux_sym_command_repeat1, + STATE(928), 1, + sym_concatenation, + STATE(961), 1, + sym_file_redirect, + STATE(1434), 1, + sym_pipeline, + STATE(1440), 1, + aux_sym_redirected_statement_repeat2, + STATE(2101), 1, + sym__statement_not_pipeline, + ACTIONS(329), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(343), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(351), 2, + sym_raw_string, + sym_number, + STATE(777), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(341), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1435), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [18646] = 30, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + sym_word, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(21), 1, + anon_sym_BANG, + ACTIONS(27), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(29), 1, + anon_sym_DOLLAR, + ACTIONS(31), 1, + anon_sym_DQUOTE, + ACTIONS(35), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(37), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(39), 1, + anon_sym_BQUOTE, + ACTIONS(41), 1, + sym_file_descriptor, + ACTIONS(43), 1, + sym_variable_name, + STATE(183), 1, + sym_command_name, + STATE(266), 1, + sym_variable_assignment, + STATE(636), 1, + sym_concatenation, + STATE(685), 1, + sym_file_redirect, + STATE(743), 1, + aux_sym_command_repeat1, + STATE(1154), 1, + sym_pipeline, + STATE(1219), 1, + aux_sym_redirected_statement_repeat2, + STATE(2125), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(25), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(33), 2, + sym_raw_string, + sym_number, + STATE(291), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(23), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1168), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [18762] = 29, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(191), 1, + sym_command_name, + STATE(295), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(1453), 1, + sym_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1170), 13, + sym__statement_not_pipeline, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [18876] = 30, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(45), 1, + sym_word, + ACTIONS(53), 1, + anon_sym_BANG, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(75), 1, + sym_variable_name, + STATE(191), 1, + sym_command_name, + STATE(296), 1, + sym_variable_assignment, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1265), 1, + sym_pipeline, + STATE(1307), 1, + aux_sym_redirected_statement_repeat2, + STATE(2117), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 2, + sym_raw_string, + sym_number, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1264), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [18992] = 29, + ACTIONS(3), 1, + sym_comment, + ACTIONS(7), 1, + sym_word, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(21), 1, + anon_sym_BANG, + ACTIONS(27), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(29), 1, + anon_sym_DOLLAR, + ACTIONS(31), 1, + anon_sym_DQUOTE, + ACTIONS(35), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(37), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(39), 1, + anon_sym_BQUOTE, + ACTIONS(41), 1, + sym_file_descriptor, + ACTIONS(43), 1, + sym_variable_name, + STATE(183), 1, + sym_command_name, + STATE(276), 1, + sym_variable_assignment, + STATE(636), 1, + sym_concatenation, + STATE(685), 1, + sym_file_redirect, + STATE(743), 1, + aux_sym_command_repeat1, + STATE(1219), 1, + aux_sym_redirected_statement_repeat2, + STATE(1456), 1, + sym_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(25), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(33), 2, + sym_raw_string, + sym_number, + STATE(291), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(23), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1170), 13, + sym__statement_not_pipeline, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [19106] = 30, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(15), 1, + anon_sym_case, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(363), 1, + sym_word, + ACTIONS(365), 1, + anon_sym_BANG, + ACTIONS(373), 1, + sym_file_descriptor, + ACTIONS(375), 1, + sym_variable_name, + STATE(259), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(626), 1, + sym_variable_assignment, + STATE(713), 1, + aux_sym_command_repeat1, + STATE(726), 1, + sym_file_redirect, + STATE(1408), 1, + sym_pipeline, + STATE(1420), 1, + aux_sym_redirected_statement_repeat2, + STATE(2123), 1, + sym__statement_not_pipeline, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(369), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(371), 2, + sym_raw_string, + sym_number, + STATE(734), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(367), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + STATE(1407), 12, + sym_redirected_statement, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_case_statement, + sym_function_definition, + sym_compound_statement, + sym_subshell, + sym_list, + sym_negated_command, + sym_command, + sym__variable_assignments, + [19222] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(377), 1, + sym_variable_name, + STATE(189), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(787), 1, + sym_file_redirect, + STATE(1192), 1, + sym_variable_assignment, + STATE(1297), 1, + aux_sym_redirected_statement_repeat2, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + STATE(1268), 7, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_compound_statement, + sym_subshell, + sym_command, + sym__variable_assignments, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [19319] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(27), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(29), 1, + anon_sym_DOLLAR, + ACTIONS(31), 1, + anon_sym_DQUOTE, + ACTIONS(35), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(37), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(39), 1, + anon_sym_BQUOTE, + ACTIONS(41), 1, + sym_file_descriptor, + ACTIONS(377), 1, + sym_variable_name, + STATE(183), 1, + sym_command_name, + STATE(636), 1, + sym_concatenation, + STATE(685), 1, + sym_file_redirect, + STATE(743), 1, + aux_sym_command_repeat1, + STATE(1266), 1, + aux_sym_redirected_statement_repeat2, + STATE(1267), 1, + sym_variable_assignment, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(25), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(33), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(291), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + STATE(1268), 7, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_compound_statement, + sym_subshell, + sym_command, + sym__variable_assignments, + ACTIONS(23), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [19416] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(73), 1, + sym_file_descriptor, + ACTIONS(377), 1, + sym_variable_name, + STATE(191), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(1286), 1, + sym_variable_assignment, + STATE(1309), 1, + aux_sym_redirected_statement_repeat2, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(57), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + STATE(1268), 7, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_compound_statement, + sym_subshell, + sym_command, + sym__variable_assignments, + ACTIONS(55), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [19513] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(327), 1, + anon_sym_for, + ACTIONS(331), 1, + anon_sym_if, + ACTIONS(335), 1, + anon_sym_LPAREN, + ACTIONS(337), 1, + anon_sym_LBRACE, + ACTIONS(345), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(347), 1, + anon_sym_DOLLAR, + ACTIONS(349), 1, + anon_sym_DQUOTE, + ACTIONS(353), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(355), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(357), 1, + anon_sym_BQUOTE, + ACTIONS(359), 1, + sym_file_descriptor, + ACTIONS(377), 1, + sym_variable_name, + STATE(287), 1, + sym_command_name, + STATE(732), 1, + aux_sym_command_repeat1, + STATE(928), 1, + sym_concatenation, + STATE(961), 1, + sym_file_redirect, + STATE(1247), 1, + sym_variable_assignment, + STATE(1458), 1, + aux_sym_redirected_statement_repeat2, + ACTIONS(329), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(343), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(351), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(777), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + STATE(1619), 7, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_compound_statement, + sym_subshell, + sym_command, + sym__variable_assignments, + ACTIONS(341), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [19610] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(230), 1, + sym_file_descriptor, + ACTIONS(377), 1, + sym_variable_name, + STATE(185), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(726), 1, + sym_file_redirect, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1239), 1, + aux_sym_redirected_statement_repeat2, + STATE(1271), 1, + sym_variable_assignment, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(226), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + STATE(1268), 7, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_compound_statement, + sym_subshell, + sym_command, + sym__variable_assignments, + ACTIONS(224), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [19707] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(89), 1, + anon_sym_for, + ACTIONS(93), 1, + anon_sym_if, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(101), 1, + anon_sym_LBRACE, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(123), 1, + sym_file_descriptor, + ACTIONS(377), 1, + sym_variable_name, + STATE(184), 1, + sym_command_name, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(744), 1, + sym_file_redirect, + STATE(1249), 1, + aux_sym_redirected_statement_repeat2, + STATE(1290), 1, + sym_variable_assignment, + ACTIONS(91), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(107), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + STATE(1384), 7, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_compound_statement, + sym_subshell, + sym_command, + sym__variable_assignments, + ACTIONS(105), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [19804] = 25, + ACTIONS(3), 1, + sym_comment, + ACTIONS(9), 1, + anon_sym_for, + ACTIONS(13), 1, + anon_sym_if, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(19), 1, + anon_sym_LBRACE, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(373), 1, + sym_file_descriptor, + ACTIONS(377), 1, + sym_variable_name, + STATE(259), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(713), 1, + aux_sym_command_repeat1, + STATE(726), 1, + sym_file_redirect, + STATE(1193), 1, + sym_variable_assignment, + STATE(1415), 1, + aux_sym_redirected_statement_repeat2, + ACTIONS(11), 2, + anon_sym_while, + anon_sym_until, + ACTIONS(369), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(371), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(734), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + STATE(1268), 7, + sym_for_statement, + sym_while_statement, + sym_if_statement, + sym_compound_statement, + sym_subshell, + sym_command, + sym__variable_assignments, + ACTIONS(367), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [19901] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(387), 1, + sym_variable_name, + ACTIONS(383), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(385), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(381), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 29, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [19958] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(393), 1, + sym_variable_name, + ACTIONS(391), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(385), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(389), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 28, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20015] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(399), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(397), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(395), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 29, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20072] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(399), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(397), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(395), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 28, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20128] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(405), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(403), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(401), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 28, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20184] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(411), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(409), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(407), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 28, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20240] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(417), 1, + sym_variable_name, + ACTIONS(415), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(385), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(413), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 27, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20296] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(423), 1, + sym_variable_name, + ACTIONS(421), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(419), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 28, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20351] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(429), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(427), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(425), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 27, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20406] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(411), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(409), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(407), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 27, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20461] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(435), 1, + sym_variable_name, + ACTIONS(433), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(431), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 28, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20516] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(441), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(439), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(437), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 27, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20571] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(447), 1, + sym_variable_name, + ACTIONS(445), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(443), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 28, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20626] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(453), 1, + sym_variable_name, + ACTIONS(451), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(449), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 28, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20681] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(461), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(463), 1, + anon_sym_DOLLAR, + ACTIONS(465), 1, + anon_sym_DQUOTE, + ACTIONS(467), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(469), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(471), 1, + anon_sym_BQUOTE, + ACTIONS(473), 1, + sym__bare_dollar, + STATE(194), 1, + aux_sym_command_repeat2, + STATE(706), 1, + sym_concatenation, + STATE(1204), 1, + sym_subshell, + ACTIONS(455), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(457), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(333), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(459), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [20755] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(455), 1, + sym_file_descriptor, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + STATE(199), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + STATE(1204), 1, + sym_subshell, + ACTIONS(475), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(334), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(459), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [20829] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(423), 1, + sym_variable_name, + ACTIONS(421), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(419), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 27, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20883] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(447), 1, + sym_variable_name, + ACTIONS(445), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(443), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 27, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [20937] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(461), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(463), 1, + anon_sym_DOLLAR, + ACTIONS(465), 1, + anon_sym_DQUOTE, + ACTIONS(467), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(469), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(471), 1, + anon_sym_BQUOTE, + ACTIONS(473), 1, + sym__bare_dollar, + STATE(202), 1, + aux_sym_command_repeat2, + STATE(706), 1, + sym_concatenation, + STATE(1263), 1, + sym_subshell, + ACTIONS(491), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(457), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(333), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(493), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [21011] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(491), 1, + sym_file_descriptor, + ACTIONS(497), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(499), 1, + anon_sym_DOLLAR, + ACTIONS(501), 1, + anon_sym_DQUOTE, + ACTIONS(503), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(505), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(507), 1, + anon_sym_BQUOTE, + ACTIONS(509), 1, + sym__bare_dollar, + STATE(200), 1, + aux_sym_command_repeat2, + STATE(684), 1, + sym_concatenation, + STATE(1330), 1, + sym_subshell, + ACTIONS(495), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(385), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(493), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [21085] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(491), 1, + sym_file_descriptor, + STATE(196), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + STATE(1263), 1, + sym_subshell, + ACTIONS(475), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(334), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(493), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [21159] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(455), 1, + sym_file_descriptor, + ACTIONS(497), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(499), 1, + anon_sym_DOLLAR, + ACTIONS(501), 1, + anon_sym_DQUOTE, + ACTIONS(503), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(505), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(507), 1, + anon_sym_BQUOTE, + ACTIONS(509), 1, + sym__bare_dollar, + STATE(201), 1, + aux_sym_command_repeat2, + STATE(684), 1, + sym_concatenation, + STATE(1332), 1, + sym_subshell, + ACTIONS(495), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(385), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(459), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [21233] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(455), 1, + sym_file_descriptor, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(489), 1, + sym__bare_dollar, + STATE(242), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + STATE(1204), 1, + sym_subshell, + ACTIONS(511), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(479), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(459), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [21304] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(399), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(397), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(395), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 25, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [21357] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(491), 1, + sym_file_descriptor, + STATE(239), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + STATE(1263), 1, + sym_subshell, + ACTIONS(511), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(479), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(493), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [21428] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(455), 1, + sym_file_descriptor, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + STATE(219), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + STATE(1204), 1, + sym_subshell, + ACTIONS(511), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(479), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(459), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [21501] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(491), 1, + sym_file_descriptor, + STATE(243), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + STATE(1263), 1, + sym_subshell, + ACTIONS(511), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(479), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(493), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [21574] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(518), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(521), 1, + anon_sym_DOLLAR, + ACTIONS(524), 1, + anon_sym_DQUOTE, + ACTIONS(527), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(530), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(533), 1, + anon_sym_BQUOTE, + ACTIONS(536), 2, + sym_file_descriptor, + sym_variable_name, + STATE(192), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(513), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(339), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [21638] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(208), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(538), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + STATE(377), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [21688] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(461), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(463), 1, + anon_sym_DOLLAR, + ACTIONS(465), 1, + anon_sym_DQUOTE, + ACTIONS(467), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(469), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(471), 1, + anon_sym_BQUOTE, + ACTIONS(473), 1, + sym__bare_dollar, + STATE(210), 1, + aux_sym_command_repeat2, + STATE(706), 1, + sym_concatenation, + ACTIONS(542), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(457), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(333), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(544), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [21756] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + STATE(192), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(339), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [21806] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(552), 1, + sym_file_descriptor, + STATE(206), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(475), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(334), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(550), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [21874] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + STATE(192), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(339), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [21924] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(559), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(562), 1, + anon_sym_DOLLAR, + ACTIONS(565), 1, + anon_sym_DQUOTE, + ACTIONS(568), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(571), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(574), 1, + anon_sym_BQUOTE, + ACTIONS(577), 1, + sym_file_descriptor, + ACTIONS(579), 1, + sym__bare_dollar, + STATE(198), 1, + aux_sym_command_repeat2, + STATE(684), 1, + sym_concatenation, + ACTIONS(554), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(385), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(557), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [21992] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(542), 1, + sym_file_descriptor, + STATE(206), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(475), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(334), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(544), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22060] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(497), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(499), 1, + anon_sym_DOLLAR, + ACTIONS(501), 1, + anon_sym_DQUOTE, + ACTIONS(503), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(505), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(507), 1, + anon_sym_BQUOTE, + ACTIONS(509), 1, + sym__bare_dollar, + ACTIONS(552), 1, + sym_file_descriptor, + STATE(198), 1, + aux_sym_command_repeat2, + STATE(684), 1, + sym_concatenation, + ACTIONS(495), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(385), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(550), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22128] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(497), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(499), 1, + anon_sym_DOLLAR, + ACTIONS(501), 1, + anon_sym_DQUOTE, + ACTIONS(503), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(505), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(507), 1, + anon_sym_BQUOTE, + ACTIONS(509), 1, + sym__bare_dollar, + ACTIONS(542), 1, + sym_file_descriptor, + STATE(198), 1, + aux_sym_command_repeat2, + STATE(684), 1, + sym_concatenation, + ACTIONS(495), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(385), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(544), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22196] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(461), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(463), 1, + anon_sym_DOLLAR, + ACTIONS(465), 1, + anon_sym_DQUOTE, + ACTIONS(467), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(469), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(471), 1, + anon_sym_BQUOTE, + ACTIONS(473), 1, + sym__bare_dollar, + STATE(210), 1, + aux_sym_command_repeat2, + STATE(706), 1, + sym_concatenation, + ACTIONS(552), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(457), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(333), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(550), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22264] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(208), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(548), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + STATE(377), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [22314] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(411), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(409), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(407), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [22366] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + STATE(211), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(361), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [22416] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(577), 1, + sym_file_descriptor, + ACTIONS(585), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(588), 1, + anon_sym_DOLLAR, + ACTIONS(591), 1, + anon_sym_DQUOTE, + ACTIONS(594), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(597), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(600), 1, + anon_sym_BQUOTE, + ACTIONS(603), 1, + sym__bare_dollar, + STATE(206), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(582), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(334), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(557), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22484] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + STATE(211), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(361), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [22534] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(609), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(612), 1, + anon_sym_DOLLAR, + ACTIONS(615), 1, + anon_sym_DQUOTE, + ACTIONS(618), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(621), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(624), 1, + anon_sym_BQUOTE, + STATE(208), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(536), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(606), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(377), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22598] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(631), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(629), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(627), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 24, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [22650] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(636), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(639), 1, + anon_sym_DOLLAR, + ACTIONS(642), 1, + anon_sym_DQUOTE, + ACTIONS(645), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(648), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(651), 1, + anon_sym_BQUOTE, + ACTIONS(654), 1, + sym__bare_dollar, + STATE(210), 1, + aux_sym_command_repeat2, + STATE(706), 1, + sym_concatenation, + ACTIONS(577), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(633), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(333), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(557), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22718] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(660), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(663), 1, + anon_sym_DOLLAR, + ACTIONS(666), 1, + anon_sym_DQUOTE, + ACTIONS(669), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(672), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(675), 1, + anon_sym_BQUOTE, + ACTIONS(536), 2, + sym_file_descriptor, + sym_variable_name, + STATE(211), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(657), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(361), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22782] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(518), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(521), 1, + anon_sym_DOLLAR, + ACTIONS(524), 1, + anon_sym_DQUOTE, + ACTIONS(527), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(530), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(533), 1, + anon_sym_BQUOTE, + ACTIONS(536), 2, + sym_file_descriptor, + sym_variable_name, + STATE(212), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(678), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(458), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22845] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(536), 1, + sym_file_descriptor, + ACTIONS(684), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(687), 1, + anon_sym_DOLLAR, + ACTIONS(690), 1, + anon_sym_DQUOTE, + ACTIONS(693), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(696), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(699), 1, + anon_sym_BQUOTE, + STATE(213), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(681), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(506), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22908] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(704), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(706), 1, + anon_sym_DOLLAR, + ACTIONS(708), 1, + anon_sym_DQUOTE, + ACTIONS(710), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(712), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(714), 1, + anon_sym_BQUOTE, + ACTIONS(548), 2, + sym_file_descriptor, + ts_builtin_sym_end, + STATE(220), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(702), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(447), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [22971] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + STATE(212), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(458), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [23020] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 1, + sym_file_descriptor, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(227), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(716), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(600), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [23083] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 1, + sym_file_descriptor, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(227), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(716), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(600), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [23146] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(577), 1, + sym_file_descriptor, + ACTIONS(585), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(588), 1, + anon_sym_DOLLAR, + ACTIONS(591), 1, + anon_sym_DQUOTE, + ACTIONS(594), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(597), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(600), 1, + anon_sym_BQUOTE, + ACTIONS(603), 1, + sym__bare_dollar, + STATE(218), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(730), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(479), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(557), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [23213] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(542), 1, + sym_file_descriptor, + STATE(218), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(511), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(479), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(544), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [23280] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(736), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(739), 1, + anon_sym_DOLLAR, + ACTIONS(742), 1, + anon_sym_DQUOTE, + ACTIONS(745), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(748), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(751), 1, + anon_sym_BQUOTE, + ACTIONS(536), 2, + sym_file_descriptor, + ts_builtin_sym_end, + STATE(220), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(733), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(447), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [23343] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(724), 1, + sym_concatenation, + ACTIONS(754), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + STATE(371), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [23392] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(676), 1, + sym_concatenation, + ACTIONS(760), 2, + sym_file_descriptor, + sym_variable_name, + STATE(341), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [23441] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(683), 1, + sym_concatenation, + ACTIONS(754), 2, + sym_file_descriptor, + sym_variable_name, + STATE(340), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [23490] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + STATE(212), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(458), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [23539] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(704), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(706), 1, + anon_sym_DOLLAR, + ACTIONS(708), 1, + anon_sym_DQUOTE, + ACTIONS(710), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(712), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(714), 1, + anon_sym_BQUOTE, + ACTIONS(538), 2, + sym_file_descriptor, + ts_builtin_sym_end, + STATE(220), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(702), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(447), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [23602] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(776), 1, + sym_variable_name, + STATE(752), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + STATE(1136), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(772), 3, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [23665] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(536), 1, + sym_file_descriptor, + ACTIONS(782), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(785), 1, + anon_sym_DOLLAR, + ACTIONS(788), 1, + anon_sym_DQUOTE, + ACTIONS(791), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(794), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(797), 1, + anon_sym_BQUOTE, + STATE(227), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(779), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(600), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [23728] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(806), 1, + sym_variable_name, + STATE(740), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + STATE(1143), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(800), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [23791] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(776), 1, + sym_variable_name, + STATE(688), 1, + sym_terminator, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(809), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + STATE(1136), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(772), 3, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [23854] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 1, + sym_file_descriptor, + ACTIONS(813), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(815), 1, + anon_sym_DOLLAR, + ACTIONS(817), 1, + anon_sym_DQUOTE, + ACTIONS(819), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(821), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(823), 1, + anon_sym_BQUOTE, + STATE(213), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(811), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(506), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [23917] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(829), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(827), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(825), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 23, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [23968] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(447), 1, + sym_variable_name, + ACTIONS(445), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(443), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [24019] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(670), 1, + sym_concatenation, + ACTIONS(760), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + STATE(342), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [24068] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 1, + sym_file_descriptor, + ACTIONS(813), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(815), 1, + anon_sym_DOLLAR, + ACTIONS(817), 1, + anon_sym_DQUOTE, + ACTIONS(819), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(821), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(823), 1, + anon_sym_BQUOTE, + STATE(213), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(811), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(506), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [24131] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(806), 1, + sym_variable_name, + ACTIONS(809), 1, + anon_sym_RPAREN, + STATE(728), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + STATE(1143), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(800), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [24194] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(831), 1, + ts_builtin_sym_end, + ACTIONS(837), 1, + sym_variable_name, + STATE(770), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1131), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(833), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [24257] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(423), 1, + sym_variable_name, + ACTIONS(421), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(419), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [24308] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(837), 1, + sym_variable_name, + ACTIONS(840), 1, + ts_builtin_sym_end, + STATE(794), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1131), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(833), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [24371] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(552), 1, + sym_file_descriptor, + STATE(218), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(511), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(479), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(550), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [24436] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(705), 1, + sym_concatenation, + ACTIONS(760), 2, + sym_file_descriptor, + sym_variable_name, + STATE(325), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [24485] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(768), 1, + sym_concatenation, + ACTIONS(754), 2, + sym_file_descriptor, + sym_variable_name, + STATE(337), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [24534] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(542), 1, + sym_file_descriptor, + STATE(218), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(511), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(479), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(544), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [24599] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(552), 1, + sym_file_descriptor, + STATE(218), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(511), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(479), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(550), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [24666] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(809), 1, + anon_sym_BQUOTE, + ACTIONS(844), 1, + sym_variable_name, + STATE(829), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1142), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(800), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 18, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [24728] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(857), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(871), 1, + sym_file_descriptor, + STATE(1558), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + STATE(2244), 1, + sym__heredoc_expression, + STATE(2245), 1, + sym__heredoc_pipeline, + ACTIONS(849), 2, + anon_sym_PIPE, + anon_sym_PIPE_AMP, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1567), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [24806] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 1, + sym_file_descriptor, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + STATE(263), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(873), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(647), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [24866] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 1, + sym_file_descriptor, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + STATE(263), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(873), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(647), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [24926] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(776), 1, + sym_variable_name, + ACTIONS(875), 1, + sym_file_descriptor, + STATE(1136), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(766), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [24978] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(760), 1, + sym_file_descriptor, + ACTIONS(879), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(881), 1, + anon_sym_DOLLAR, + ACTIONS(883), 1, + anon_sym_DQUOTE, + ACTIONS(885), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(887), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(889), 1, + anon_sym_BQUOTE, + STATE(1345), 1, + sym_concatenation, + ACTIONS(877), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1173), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [25040] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 1, + sym_file_descriptor, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(263), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(873), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(647), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [25102] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(455), 1, + sym_file_descriptor, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + STATE(391), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + STATE(1204), 1, + sym_subshell, + ACTIONS(891), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(796), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(459), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [25172] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(895), 1, + sym_variable_name, + STATE(692), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(800), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [25232] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(844), 1, + sym_variable_name, + STATE(848), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1142), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(800), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 18, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [25294] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(806), 1, + sym_variable_name, + ACTIONS(875), 1, + sym_file_descriptor, + STATE(1143), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(766), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [25346] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(895), 1, + sym_variable_name, + STATE(740), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(800), 3, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [25408] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(895), 1, + sym_variable_name, + STATE(783), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(898), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [25468] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(806), 1, + sym_variable_name, + STATE(1143), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 9, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [25522] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(754), 1, + sym_file_descriptor, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + STATE(1205), 1, + sym_concatenation, + ACTIONS(902), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1118), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [25584] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(491), 1, + sym_file_descriptor, + STATE(306), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + STATE(1263), 1, + sym_subshell, + ACTIONS(891), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(796), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(493), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [25654] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(760), 1, + sym_file_descriptor, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + STATE(1197), 1, + sym_concatenation, + ACTIONS(916), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1111), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [25716] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 1, + sym_file_descriptor, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(263), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(873), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(647), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [25778] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(809), 1, + anon_sym_SEMI_SEMI, + ACTIONS(895), 1, + sym_variable_name, + STATE(728), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(800), 3, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [25840] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(536), 1, + sym_file_descriptor, + ACTIONS(782), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(785), 1, + anon_sym_DOLLAR, + ACTIONS(788), 1, + anon_sym_DQUOTE, + ACTIONS(791), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(794), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(797), 1, + anon_sym_BQUOTE, + STATE(263), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(918), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(647), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [25902] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(768), 1, + sym_concatenation, + ACTIONS(754), 2, + sym_file_descriptor, + sym_variable_name, + STATE(460), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [25950] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(925), 1, + sym_variable_name, + ACTIONS(923), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(921), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 23, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [26000] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(837), 1, + sym_variable_name, + ACTIONS(927), 1, + ts_builtin_sym_end, + STATE(1131), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 8, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [26056] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(776), 1, + sym_variable_name, + STATE(1136), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 9, + anon_sym_esac, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [26110] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + STATE(1205), 1, + sym_concatenation, + ACTIONS(754), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(929), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1134), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [26172] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(931), 1, + aux_sym_heredoc_redirect_token1, + STATE(1473), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + STATE(2128), 1, + sym__heredoc_expression, + STATE(2184), 1, + sym__heredoc_pipeline, + ACTIONS(849), 2, + anon_sym_PIPE, + anon_sym_PIPE_AMP, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1474), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [26250] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(937), 1, + sym_variable_name, + ACTIONS(935), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(933), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 23, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [26300] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(705), 1, + sym_concatenation, + ACTIONS(760), 2, + sym_file_descriptor, + sym_variable_name, + STATE(501), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [26348] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + STATE(1197), 1, + sym_concatenation, + ACTIONS(760), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(939), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1138), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [26410] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(941), 1, + aux_sym_heredoc_redirect_token1, + STATE(1532), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + STATE(2272), 1, + sym__heredoc_expression, + STATE(2273), 1, + sym__heredoc_pipeline, + ACTIONS(849), 2, + anon_sym_PIPE, + anon_sym_PIPE_AMP, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1533), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [26488] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(943), 1, + aux_sym_heredoc_redirect_token1, + STATE(1475), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + STATE(2178), 1, + sym__heredoc_expression, + STATE(2179), 1, + sym__heredoc_pipeline, + ACTIONS(849), 2, + anon_sym_PIPE, + anon_sym_PIPE_AMP, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1480), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [26566] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(945), 1, + aux_sym_heredoc_redirect_token1, + STATE(1484), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + STATE(2142), 1, + sym__heredoc_pipeline, + STATE(2147), 1, + sym__heredoc_expression, + ACTIONS(849), 2, + anon_sym_PIPE, + anon_sym_PIPE_AMP, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1489), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [26644] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(837), 1, + sym_variable_name, + ACTIONS(875), 2, + sym_file_descriptor, + ts_builtin_sym_end, + STATE(1131), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(766), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [26696] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(895), 1, + sym_variable_name, + STATE(825), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(800), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [26756] = 20, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(947), 1, + aux_sym_heredoc_redirect_token1, + STATE(1491), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + STATE(2155), 1, + sym__heredoc_pipeline, + STATE(2156), 1, + sym__heredoc_expression, + ACTIONS(849), 2, + anon_sym_PIPE, + anon_sym_PIPE_AMP, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1493), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [26834] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(895), 1, + sym_variable_name, + STATE(615), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(949), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [26894] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(895), 1, + sym_variable_name, + STATE(773), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(951), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [26954] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(895), 1, + sym_variable_name, + STATE(798), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(953), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [27014] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(754), 1, + sym_file_descriptor, + ACTIONS(879), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(881), 1, + anon_sym_DOLLAR, + ACTIONS(883), 1, + anon_sym_DQUOTE, + ACTIONS(885), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(887), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(889), 1, + anon_sym_BQUOTE, + STATE(1359), 1, + sym_concatenation, + ACTIONS(955), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1158), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [27076] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(959), 1, + aux_sym_concatenation_token1, + ACTIONS(963), 1, + sym__concat, + STATE(293), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(957), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [27125] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(760), 1, + sym_file_descriptor, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + STATE(1197), 1, + sym_concatenation, + ACTIONS(965), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1156), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [27184] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(335), 1, + anon_sym_LPAREN, + ACTIONS(455), 1, + sym_file_descriptor, + ACTIONS(969), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(971), 1, + anon_sym_DOLLAR, + ACTIONS(973), 1, + anon_sym_DQUOTE, + ACTIONS(975), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(977), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(979), 1, + anon_sym_BQUOTE, + ACTIONS(981), 1, + sym__bare_dollar, + STATE(465), 1, + aux_sym_command_repeat2, + STATE(949), 1, + sym_concatenation, + STATE(1655), 1, + sym_subshell, + ACTIONS(967), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(830), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(459), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [27253] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(985), 1, + aux_sym_concatenation_token1, + ACTIONS(990), 1, + sym__concat, + STATE(286), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(983), 30, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [27302] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(335), 1, + anon_sym_LPAREN, + ACTIONS(491), 1, + sym_file_descriptor, + ACTIONS(969), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(971), 1, + anon_sym_DOLLAR, + ACTIONS(973), 1, + anon_sym_DQUOTE, + ACTIONS(975), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(977), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(979), 1, + anon_sym_BQUOTE, + ACTIONS(981), 1, + sym__bare_dollar, + STATE(434), 1, + aux_sym_command_repeat2, + STATE(949), 1, + sym_concatenation, + STATE(1608), 1, + sym_subshell, + ACTIONS(967), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(830), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(493), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [27371] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(995), 1, + anon_sym_LPAREN, + ACTIONS(998), 1, + aux_sym_concatenation_token1, + ACTIONS(1002), 1, + sym__concat, + STATE(297), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [27422] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(998), 1, + aux_sym_concatenation_token1, + ACTIONS(1002), 1, + sym__concat, + STATE(297), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 30, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [27471] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(754), 1, + sym_file_descriptor, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + STATE(1205), 1, + sym_concatenation, + ACTIONS(1004), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1185), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [27532] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1006), 1, + aux_sym_concatenation_token1, + ACTIONS(1008), 1, + sym__concat, + STATE(300), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(993), 29, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [27581] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1006), 1, + aux_sym_concatenation_token1, + ACTIONS(1008), 1, + sym__concat, + ACTIONS(1010), 1, + anon_sym_LPAREN, + STATE(300), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(993), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [27632] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1013), 1, + aux_sym_concatenation_token1, + ACTIONS(1016), 1, + sym__concat, + STATE(293), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(983), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [27681] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1019), 1, + aux_sym_concatenation_token1, + ACTIONS(1022), 1, + sym__concat, + STATE(294), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(983), 29, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [27730] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(875), 1, + sym_file_descriptor, + ACTIONS(895), 1, + sym_variable_name, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(766), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [27781] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(895), 1, + sym_variable_name, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 8, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [27834] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(998), 1, + aux_sym_concatenation_token1, + ACTIONS(1025), 1, + sym__concat, + STATE(286), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(957), 30, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [27883] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(844), 1, + sym_variable_name, + STATE(1142), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 8, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [27936] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(959), 1, + aux_sym_concatenation_token1, + ACTIONS(1027), 1, + sym__concat, + STATE(283), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [27985] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1006), 1, + aux_sym_concatenation_token1, + ACTIONS(1029), 1, + sym__concat, + STATE(294), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(957), 29, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28034] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(844), 1, + sym_variable_name, + ACTIONS(875), 1, + sym_file_descriptor, + STATE(1142), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 8, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + ACTIONS(766), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [28085] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(959), 1, + aux_sym_concatenation_token1, + ACTIONS(1027), 1, + sym__concat, + ACTIONS(1031), 1, + anon_sym_LPAREN, + STATE(283), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28136] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(760), 1, + sym_file_descriptor, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + STATE(1197), 1, + sym_concatenation, + ACTIONS(1034), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1186), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [28197] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(754), 1, + sym_file_descriptor, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + STATE(1205), 1, + sym_concatenation, + ACTIONS(1036), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1152), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [28256] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1038), 1, + aux_sym_concatenation_token1, + ACTIONS(1040), 1, + sym__concat, + STATE(344), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(957), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28304] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(552), 1, + sym_file_descriptor, + STATE(390), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(891), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(796), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(550), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [28368] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1042), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28410] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1046), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28452] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1050), 1, + aux_sym_concatenation_token1, + ACTIONS(1053), 1, + sym__concat, + STATE(309), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(983), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28500] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1058), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28542] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1060), 1, + aux_sym_concatenation_token1, + ACTIONS(1062), 1, + sym__concat, + STATE(319), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(957), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28590] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(97), 1, + anon_sym_LPAREN, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(125), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(184), 1, + sym_command_name, + STATE(622), 1, + sym_concatenation, + STATE(727), 1, + aux_sym_command_repeat1, + STATE(742), 1, + sym_variable_assignment, + STATE(1339), 1, + sym_command, + STATE(1340), 1, + sym_subshell, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(115), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [28668] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1042), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28710] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1046), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28752] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1072), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28794] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1042), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1044), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [28836] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1046), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1048), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [28878] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1072), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1070), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [28920] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1076), 1, + aux_sym_concatenation_token1, + ACTIONS(1079), 1, + sym__concat, + STATE(319), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(983), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [28968] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1082), 1, + aux_sym_concatenation_token1, + ACTIONS(1084), 1, + sym__concat, + STATE(327), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(957), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29016] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1086), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1088), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [29058] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(351), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1090), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29106] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1086), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29148] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1098), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1100), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [29190] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(351), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(546), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29238] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1102), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1104), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [29280] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1106), 1, + aux_sym_concatenation_token1, + ACTIONS(1109), 1, + sym__concat, + STATE(327), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(983), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29328] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1112), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1114), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [29370] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1116), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1118), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [29412] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1120), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1122), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [29454] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1116), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1118), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [29496] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1124), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1126), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [29538] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1082), 1, + aux_sym_concatenation_token1, + ACTIONS(1132), 1, + sym__concat, + STATE(320), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1128), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1130), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29586] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1038), 1, + aux_sym_concatenation_token1, + ACTIONS(1134), 1, + sym__concat, + STATE(305), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1128), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1130), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29634] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1142), 1, + anon_sym_EQ, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1148), 13, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [29700] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1060), 1, + aux_sym_concatenation_token1, + ACTIONS(1164), 1, + sym__concat, + STATE(311), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1090), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29748] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(351), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(540), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29796] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1166), 1, + aux_sym_concatenation_token1, + ACTIONS(1169), 1, + sym__concat, + STATE(338), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(983), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29844] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(351), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1174), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1172), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29892] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1060), 1, + aux_sym_concatenation_token1, + ACTIONS(1164), 1, + sym__concat, + STATE(311), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(540), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29940] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1060), 1, + aux_sym_concatenation_token1, + ACTIONS(1164), 1, + sym__concat, + STATE(311), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(546), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [29988] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1176), 1, + aux_sym_concatenation_token1, + ACTIONS(1178), 1, + sym__concat, + STATE(372), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(546), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30036] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1176), 1, + aux_sym_concatenation_token1, + ACTIONS(1178), 1, + sym__concat, + STATE(372), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1090), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30084] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1180), 1, + aux_sym_concatenation_token1, + ACTIONS(1183), 1, + sym__concat, + STATE(344), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(983), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30132] = 7, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1186), 6, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1188), 19, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [30182] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1186), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1188), 19, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [30226] = 7, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1186), 6, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1188), 19, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [30276] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(959), 1, + aux_sym_concatenation_token1, + ACTIONS(1027), 1, + sym__concat, + ACTIONS(1190), 1, + anon_sym_LPAREN, + STATE(400), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30326] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1193), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30368] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(232), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(185), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(747), 1, + sym_variable_assignment, + STATE(765), 1, + aux_sym_command_repeat1, + STATE(1283), 1, + sym_subshell, + STATE(1298), 1, + sym_command, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(228), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [30446] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1197), 1, + sym__concat, + STATE(338), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(957), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30494] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(983), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30536] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + STATE(383), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(795), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [30582] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1193), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30624] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(189), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(672), 1, + aux_sym_command_repeat1, + STATE(786), 1, + sym_variable_assignment, + STATE(1283), 1, + sym_subshell, + STATE(1298), 1, + sym_command, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [30702] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1072), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30744] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1199), 1, + aux_sym_concatenation_token1, + ACTIONS(1201), 1, + sym__concat, + STATE(379), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(957), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30792] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1207), 1, + sym_variable_name, + ACTIONS(1205), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1203), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [30840] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1086), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30882] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1209), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1211), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [30924] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1060), 1, + aux_sym_concatenation_token1, + ACTIONS(1164), 1, + sym__concat, + STATE(311), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1174), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1172), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [30972] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1098), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31014] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1124), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31056] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(375), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(259), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(713), 1, + aux_sym_command_repeat1, + STATE(747), 1, + sym_variable_assignment, + STATE(1283), 1, + sym_subshell, + STATE(1298), 1, + sym_command, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(371), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(734), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [31134] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1102), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31176] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(75), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(191), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(733), 1, + aux_sym_command_repeat1, + STATE(747), 1, + sym_variable_assignment, + STATE(1283), 1, + sym_subshell, + STATE(1298), 1, + sym_command, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(65), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [31254] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1098), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31296] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1102), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31338] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(983), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31380] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1213), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1215), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [31422] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1176), 1, + aux_sym_concatenation_token1, + ACTIONS(1178), 1, + sym__concat, + STATE(372), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(540), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31470] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1176), 1, + aux_sym_concatenation_token1, + ACTIONS(1217), 1, + sym__concat, + STATE(309), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(957), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31518] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31560] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1120), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31602] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31644] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1112), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31686] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1176), 1, + aux_sym_concatenation_token1, + ACTIONS(1178), 1, + sym__concat, + STATE(372), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1174), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1172), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31734] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + STATE(383), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(795), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [31780] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1219), 1, + aux_sym_concatenation_token1, + ACTIONS(1222), 1, + sym__concat, + STATE(379), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(983), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31828] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(983), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31870] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1102), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31912] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1098), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [31954] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(518), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(521), 1, + anon_sym_DOLLAR, + ACTIONS(524), 1, + anon_sym_DQUOTE, + ACTIONS(527), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(530), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(533), 1, + anon_sym_BQUOTE, + ACTIONS(536), 2, + sym_file_descriptor, + sym_variable_name, + STATE(383), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1225), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(795), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [32014] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1112), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32056] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1199), 1, + aux_sym_concatenation_token1, + ACTIONS(1228), 1, + sym__concat, + STATE(357), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1128), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1130), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32104] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32146] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1120), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32188] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32230] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1124), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32272] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(577), 1, + sym_file_descriptor, + ACTIONS(585), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(588), 1, + anon_sym_DOLLAR, + ACTIONS(591), 1, + anon_sym_DQUOTE, + ACTIONS(594), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(597), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(600), 1, + anon_sym_BQUOTE, + ACTIONS(603), 1, + sym__bare_dollar, + STATE(390), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(1230), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(796), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(557), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [32336] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(489), 1, + sym__bare_dollar, + ACTIONS(542), 1, + sym_file_descriptor, + STATE(390), 1, + aux_sym_command_repeat2, + STATE(712), 1, + sym_concatenation, + ACTIONS(891), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(796), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(544), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [32400] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1193), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32442] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1112), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32484] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1124), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32526] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1116), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32568] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1120), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32610] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1116), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32652] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1058), 31, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32694] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1086), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32736] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(959), 1, + aux_sym_concatenation_token1, + ACTIONS(1233), 1, + sym__concat, + STATE(293), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(957), 29, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32784] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1072), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32826] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1046), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [32868] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1235), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 19, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [32912] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 10, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1237), 19, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [32958] = 9, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 4, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1237), 17, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [33012] = 10, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 4, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1237), 15, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [33068] = 11, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 3, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_CARET, + ACTIONS(1237), 15, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [33126] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 12, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_COLON, + [33194] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 8, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1237), 19, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [33242] = 7, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 6, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1237), 19, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [33292] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1235), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 12, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_COLON, + [33360] = 14, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1235), 1, + anon_sym_EQ, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 14, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [33424] = 13, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1235), 1, + anon_sym_EQ, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 15, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [33486] = 12, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1235), 2, + anon_sym_PIPE, + anon_sym_EQ, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 15, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + anon_sym_COLON, + [33546] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1243), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1245), 21, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_RPAREN_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_COLON, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [33588] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1042), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [33630] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(17), 1, + anon_sym_LPAREN, + ACTIONS(27), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(29), 1, + anon_sym_DOLLAR, + ACTIONS(31), 1, + anon_sym_DQUOTE, + ACTIONS(35), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(37), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(39), 1, + anon_sym_BQUOTE, + ACTIONS(43), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(183), 1, + sym_command_name, + STATE(636), 1, + sym_concatenation, + STATE(693), 1, + sym_variable_assignment, + STATE(743), 1, + aux_sym_command_repeat1, + STATE(1283), 1, + sym_subshell, + STATE(1298), 1, + sym_command, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(33), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(291), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [33708] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1058), 31, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [33750] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(959), 1, + aux_sym_concatenation_token1, + ACTIONS(1027), 1, + sym__concat, + ACTIONS(1247), 1, + anon_sym_LPAREN, + STATE(400), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [33800] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(959), 1, + aux_sym_concatenation_token1, + ACTIONS(1027), 1, + sym__concat, + STATE(400), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 29, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [33848] = 21, + ACTIONS(3), 1, + sym_comment, + ACTIONS(335), 1, + anon_sym_LPAREN, + ACTIONS(345), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(347), 1, + anon_sym_DOLLAR, + ACTIONS(349), 1, + anon_sym_DQUOTE, + ACTIONS(353), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(355), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(357), 1, + anon_sym_BQUOTE, + ACTIONS(361), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(287), 1, + sym_command_name, + STATE(732), 1, + aux_sym_command_repeat1, + STATE(928), 1, + sym_concatenation, + STATE(956), 1, + sym_variable_assignment, + STATE(1343), 1, + sym_file_redirect, + STATE(1606), 1, + sym_subshell, + STATE(1607), 1, + sym_command, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(351), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(777), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [33926] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1112), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [33967] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1250), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [34036] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1072), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34077] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1042), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34118] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1046), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34159] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1072), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34200] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(961), 1, + sym_file_descriptor, + ACTIONS(1254), 1, + aux_sym_concatenation_token1, + ACTIONS(1256), 1, + sym__concat, + STATE(432), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34247] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1098), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34288] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1102), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34329] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1262), 1, + sym_variable_name, + ACTIONS(1260), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1258), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [34376] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 1, + sym_file_descriptor, + ACTIONS(1264), 1, + aux_sym_concatenation_token1, + ACTIONS(1267), 1, + sym__concat, + STATE(432), 1, + aux_sym_concatenation_repeat1, + ACTIONS(983), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34423] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1270), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [34492] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(552), 1, + sym_file_descriptor, + ACTIONS(969), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(971), 1, + anon_sym_DOLLAR, + ACTIONS(973), 1, + anon_sym_DQUOTE, + ACTIONS(975), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(977), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(979), 1, + anon_sym_BQUOTE, + ACTIONS(981), 1, + sym__bare_dollar, + STATE(487), 1, + aux_sym_command_repeat2, + STATE(949), 1, + sym_concatenation, + ACTIONS(967), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(830), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(550), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [34555] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1124), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34596] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1272), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [34665] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1276), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1274), 31, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_done, + anon_sym_if, + anon_sym_then, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [34706] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1086), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34747] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1072), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34788] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1046), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34829] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1042), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34870] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1058), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [34911] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 1, + sym_file_descriptor, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(567), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1278), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(827), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [34970] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 1, + sym_file_descriptor, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(567), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1278), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(827), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [35029] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1193), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35070] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 1, + sym_file_descriptor, + ACTIONS(1280), 1, + aux_sym_concatenation_token1, + ACTIONS(1283), 1, + sym__concat, + STATE(446), 1, + aux_sym_concatenation_repeat1, + ACTIONS(983), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35117] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1286), 1, + aux_sym_concatenation_token1, + ACTIONS(1288), 1, + sym__concat, + STATE(588), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1174), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(1172), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35164] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1098), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35205] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1290), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [35274] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1102), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35315] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1292), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [35384] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1294), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [35453] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1296), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [35522] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(983), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35563] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1112), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35604] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1116), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35645] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1120), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35686] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(500), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1174), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1172), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35733] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1116), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35774] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(500), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(540), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [35821] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1298), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [35890] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1213), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1215), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [35931] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1300), 1, + anon_sym_COLON, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [36000] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1306), 1, + sym_variable_name, + ACTIONS(1304), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1302), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [36047] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(542), 1, + sym_file_descriptor, + ACTIONS(969), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(971), 1, + anon_sym_DOLLAR, + ACTIONS(973), 1, + anon_sym_DQUOTE, + ACTIONS(975), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(977), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(979), 1, + anon_sym_BQUOTE, + ACTIONS(981), 1, + sym__bare_dollar, + STATE(487), 1, + aux_sym_command_repeat2, + STATE(949), 1, + sym_concatenation, + ACTIONS(967), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(830), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(544), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [36110] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1124), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [36151] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1308), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [36220] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1310), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [36289] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(983), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [36330] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1312), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [36399] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1314), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [36468] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1316), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [36537] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1318), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [36606] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(961), 1, + sym_file_descriptor, + ACTIONS(1320), 1, + aux_sym_concatenation_token1, + ACTIONS(1322), 1, + sym__concat, + STATE(446), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [36653] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1324), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [36722] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1326), 1, + anon_sym_PIPE, + ACTIONS(1328), 1, + anon_sym_RPAREN, + ACTIONS(1330), 1, + anon_sym_AMP_AMP, + ACTIONS(1332), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1334), 1, + anon_sym_EQ, + ACTIONS(1342), 1, + anon_sym_CARET, + ACTIONS(1344), 1, + anon_sym_AMP, + ACTIONS(1354), 1, + anon_sym_QMARK, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1346), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1340), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [36791] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(983), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [36832] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1358), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [36901] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1038), 1, + aux_sym_concatenation_token1, + ACTIONS(1134), 1, + sym__concat, + STATE(543), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1128), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1130), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [36948] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1042), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [36989] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1306), 1, + sym_variable_name, + ACTIONS(1304), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1302), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [37036] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1046), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [37077] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1116), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1118), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [37118] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1120), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1122), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [37159] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1116), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1118), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [37200] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1112), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1114), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [37241] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(577), 1, + sym_file_descriptor, + ACTIONS(1363), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1366), 1, + anon_sym_DOLLAR, + ACTIONS(1369), 1, + anon_sym_DQUOTE, + ACTIONS(1372), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1375), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1378), 1, + anon_sym_BQUOTE, + ACTIONS(1381), 1, + sym__bare_dollar, + STATE(487), 1, + aux_sym_command_repeat2, + STATE(949), 1, + sym_concatenation, + ACTIONS(1360), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(830), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(557), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [37304] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1058), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [37345] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1384), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [37414] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1086), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [37455] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1086), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [37496] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1086), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1088), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [37537] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1306), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(1304), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1302), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [37584] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1046), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1048), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [37625] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1042), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1044), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [37666] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1072), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [37707] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1098), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [37748] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1102), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [37789] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1112), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [37830] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1386), 1, + sym__concat, + STATE(338), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(957), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [37877] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(500), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(546), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [37924] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1388), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [37993] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1390), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [38062] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(500), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1090), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [38109] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1392), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [38178] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1174), 1, + sym_file_descriptor, + ACTIONS(1254), 1, + aux_sym_concatenation_token1, + ACTIONS(1394), 1, + sym__concat, + STATE(428), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1172), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [38225] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1396), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [38294] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1398), 1, + anon_sym_COLON, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [38363] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1193), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [38404] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1116), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [38445] = 7, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1186), 6, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1188), 18, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + [38494] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1186), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1188), 18, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + [38537] = 7, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1186), 6, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1188), 18, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + [38586] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1120), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [38627] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1116), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [38668] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1124), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1126), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [38709] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1102), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1104), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [38750] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1098), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1100), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [38791] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1193), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [38832] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1058), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [38873] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1098), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [38914] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1102), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [38955] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1072), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1070), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [38996] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(983), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39037] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1262), 1, + sym_variable_name, + ACTIONS(1260), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1258), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [39084] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(768), 1, + sym_concatenation, + ACTIONS(754), 2, + sym_file_descriptor, + sym_variable_name, + STATE(806), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [39129] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1209), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1211), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [39170] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1400), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [39239] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1402), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [39308] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1124), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39349] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1408), 1, + sym_variable_name, + ACTIONS(1406), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1404), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [39396] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1058), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39437] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1042), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39478] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1046), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39519] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1410), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [39588] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1072), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39629] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1124), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39670] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1412), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [39739] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39780] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1262), 1, + sym_variable_name, + ACTIONS(385), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(1260), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1258), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [39827] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1120), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39868] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39909] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1038), 1, + aux_sym_concatenation_token1, + ACTIONS(1414), 1, + sym__concat, + STATE(344), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(957), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39956] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1086), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [39997] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1416), 1, + aux_sym_concatenation_token1, + ACTIONS(1419), 1, + sym__concat, + STATE(545), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(983), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40044] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(983), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40085] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1426), 1, + sym_variable_name, + ACTIONS(1424), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1422), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [40132] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1193), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40173] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1098), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40214] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1102), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40255] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(983), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40296] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1112), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40337] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1116), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40378] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1120), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40419] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 4, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1116), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40460] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1124), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40501] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1326), 1, + anon_sym_PIPE, + ACTIONS(1330), 1, + anon_sym_AMP_AMP, + ACTIONS(1332), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1334), 1, + anon_sym_EQ, + ACTIONS(1342), 1, + anon_sym_CARET, + ACTIONS(1344), 1, + anon_sym_AMP, + ACTIONS(1354), 1, + anon_sym_QMARK, + ACTIONS(1428), 1, + anon_sym_RPAREN, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1346), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1340), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [40570] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + STATE(587), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(828), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [40615] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1430), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [40684] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1058), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40725] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1042), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40766] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1046), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40807] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1072), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40848] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1112), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40889] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40930] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1086), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [40971] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(536), 1, + sym_file_descriptor, + ACTIONS(782), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(785), 1, + anon_sym_DOLLAR, + ACTIONS(788), 1, + anon_sym_DQUOTE, + ACTIONS(791), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(794), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(797), 1, + anon_sym_BQUOTE, + STATE(567), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1432), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(827), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [41030] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1243), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1245), 20, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + [41071] = 12, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1342), 1, + anon_sym_CARET, + ACTIONS(1344), 1, + anon_sym_AMP, + ACTIONS(1235), 2, + anon_sym_PIPE, + anon_sym_EQ, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1346), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 14, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + [41130] = 13, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1235), 1, + anon_sym_EQ, + ACTIONS(1326), 1, + anon_sym_PIPE, + ACTIONS(1342), 1, + anon_sym_CARET, + ACTIONS(1344), 1, + anon_sym_AMP, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1346), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 14, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + [41191] = 14, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1235), 1, + anon_sym_EQ, + ACTIONS(1326), 1, + anon_sym_PIPE, + ACTIONS(1330), 1, + anon_sym_AMP_AMP, + ACTIONS(1342), 1, + anon_sym_CARET, + ACTIONS(1344), 1, + anon_sym_AMP, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1346), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 13, + anon_sym_RPAREN, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + [41254] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1235), 1, + anon_sym_EQ, + ACTIONS(1326), 1, + anon_sym_PIPE, + ACTIONS(1330), 1, + anon_sym_AMP_AMP, + ACTIONS(1332), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1342), 1, + anon_sym_CARET, + ACTIONS(1344), 1, + anon_sym_AMP, + ACTIONS(1354), 1, + anon_sym_QMARK, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1346), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 11, + anon_sym_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [41321] = 7, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 6, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1237), 18, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + [41370] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 8, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1237), 18, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + [41417] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1326), 1, + anon_sym_PIPE, + ACTIONS(1330), 1, + anon_sym_AMP_AMP, + ACTIONS(1332), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1334), 1, + anon_sym_EQ, + ACTIONS(1342), 1, + anon_sym_CARET, + ACTIONS(1344), 1, + anon_sym_AMP, + ACTIONS(1354), 1, + anon_sym_QMARK, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1346), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 11, + anon_sym_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [41484] = 11, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1344), 1, + anon_sym_AMP, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1346), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1235), 3, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_CARET, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 14, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + [41541] = 10, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1346), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 4, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1237), 14, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + [41596] = 9, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 4, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_CARET, + anon_sym_AMP, + ACTIONS(1237), 16, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_QMARK, + [41649] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1235), 10, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1237), 18, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + [41694] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1235), 13, + anon_sym_PIPE, + anon_sym_EQ, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_LT_LT, + anon_sym_CARET, + anon_sym_AMP, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1237), 18, + anon_sym_RPAREN, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + anon_sym_QMARK, + [41737] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1193), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [41778] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1120), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [41819] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + STATE(587), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(828), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [41864] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1435), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [41933] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1437), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [42002] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1086), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42043] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1442), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1445), 1, + anon_sym_DOLLAR, + ACTIONS(1448), 1, + anon_sym_DQUOTE, + ACTIONS(1451), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1454), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1457), 1, + anon_sym_BQUOTE, + ACTIONS(536), 2, + sym_file_descriptor, + sym_variable_name, + STATE(587), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1439), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(828), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [42102] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1286), 1, + aux_sym_concatenation_token1, + ACTIONS(1460), 1, + sym__concat, + STATE(545), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(957), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42149] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1046), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42190] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1042), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42231] = 17, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1136), 1, + anon_sym_PIPE, + ACTIONS(1138), 1, + anon_sym_AMP_AMP, + ACTIONS(1140), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1150), 1, + anon_sym_CARET, + ACTIONS(1152), 1, + anon_sym_AMP, + ACTIONS(1239), 1, + anon_sym_EQ, + ACTIONS(1241), 1, + anon_sym_QMARK, + ACTIONS(1462), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1144), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1146), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1154), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1156), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1158), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1162), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1160), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1252), 10, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + [42300] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1193), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42341] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1098), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42382] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42423] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(705), 1, + sym_concatenation, + ACTIONS(760), 2, + sym_file_descriptor, + sym_variable_name, + STATE(800), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [42468] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1102), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42509] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1124), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42550] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1116), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42591] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1112), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42632] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1174), 1, + sym_file_descriptor, + ACTIONS(1320), 1, + aux_sym_concatenation_token1, + ACTIONS(1464), 1, + sym__concat, + STATE(474), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1172), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42679] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1142), 1, + anon_sym_EQ, + ACTIONS(1326), 1, + anon_sym_PIPE, + ACTIONS(1330), 1, + anon_sym_AMP_AMP, + ACTIONS(1332), 1, + anon_sym_PIPE_PIPE, + ACTIONS(1342), 1, + anon_sym_CARET, + ACTIONS(1344), 1, + anon_sym_AMP, + ACTIONS(1336), 2, + anon_sym_LT, + anon_sym_GT, + ACTIONS(1338), 2, + anon_sym_GT_GT, + anon_sym_LT_LT, + ACTIONS(1346), 2, + anon_sym_EQ_EQ, + anon_sym_BANG_EQ, + ACTIONS(1348), 2, + anon_sym_LT_EQ, + anon_sym_GT_EQ, + ACTIONS(1350), 2, + anon_sym_PLUS, + anon_sym_DASH, + ACTIONS(1356), 2, + anon_sym_PLUS_PLUS2, + anon_sym_DASH_DASH2, + ACTIONS(1352), 3, + anon_sym_STAR, + anon_sym_SLASH, + anon_sym_PERCENT, + ACTIONS(1148), 12, + anon_sym_RPAREN, + anon_sym_PLUS_EQ, + anon_sym_DASH_EQ, + anon_sym_STAR_EQ, + anon_sym_SLASH_EQ, + anon_sym_PERCENT_EQ, + anon_sym_LT_LT_EQ, + anon_sym_GT_GT_EQ, + anon_sym_AMP_EQ, + anon_sym_CARET_EQ, + anon_sym_PIPE_EQ, + anon_sym_QMARK, + [42744] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1058), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42785] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1116), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42826] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1120), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42867] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1058), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42907] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1086), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42947] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(983), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [42987] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1102), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43027] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1058), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43067] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1112), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43107] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1098), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43147] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1072), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43187] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1098), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43227] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1116), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43267] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1468), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1466), 30, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_fi, + anon_sym_elif, + anon_sym_else, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [43307] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1046), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43347] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1042), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43387] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(1472), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(1474), 1, + sym_variable_name, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(1470), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1404), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [43441] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(875), 1, + sym_file_descriptor, + ACTIONS(1474), 1, + sym_variable_name, + STATE(1404), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(766), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [43489] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(1474), 1, + sym_variable_name, + ACTIONS(1477), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(1470), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1404), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [43543] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1112), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43583] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 30, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43623] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1120), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43663] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 30, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43703] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(983), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43743] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(1474), 1, + sym_variable_name, + STATE(1404), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 5, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [43793] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1086), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43833] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(961), 1, + sym_file_descriptor, + ACTIONS(1320), 1, + aux_sym_concatenation_token1, + ACTIONS(1479), 1, + sym__concat, + STATE(446), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43879] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1046), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43919] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1042), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43959] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1102), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [43999] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1072), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44039] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1116), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44079] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1120), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44119] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1116), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44159] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1000), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(993), 29, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44199] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1262), 1, + sym_variable_name, + ACTIONS(1260), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1258), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [44245] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(987), 1, + sym_concatenation, + ACTIONS(760), 2, + sym_file_descriptor, + sym_variable_name, + STATE(845), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [44289] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(988), 1, + sym_concatenation, + ACTIONS(754), 2, + sym_file_descriptor, + sym_variable_name, + STATE(844), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [44333] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1116), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44373] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1120), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44413] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1124), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44453] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1116), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44493] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1112), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44533] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1086), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44573] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1116), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44613] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1174), 1, + sym_file_descriptor, + ACTIONS(1320), 1, + aux_sym_concatenation_token1, + ACTIONS(1464), 1, + sym__concat, + STATE(628), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1172), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44659] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1124), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44699] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1193), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44739] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1042), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44779] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 1, + sym_file_descriptor, + ACTIONS(1483), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1485), 1, + anon_sym_DOLLAR, + ACTIONS(1487), 1, + anon_sym_DQUOTE, + ACTIONS(1489), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1491), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1493), 1, + anon_sym_BQUOTE, + STATE(653), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1481), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(856), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [44837] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1058), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44877] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(536), 1, + sym_file_descriptor, + ACTIONS(1498), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1501), 1, + anon_sym_DOLLAR, + ACTIONS(1504), 1, + anon_sym_DQUOTE, + ACTIONS(1507), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1510), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1513), 1, + anon_sym_BQUOTE, + STATE(653), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1495), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(856), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [44935] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1193), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [44975] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1046), 30, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [45015] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1124), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [45055] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1102), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [45095] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(760), 1, + sym_file_descriptor, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + STATE(1197), 1, + sym_concatenation, + ACTIONS(1516), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1398), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [45153] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1193), 30, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [45193] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1072), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [45233] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(1098), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [45273] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + ACTIONS(983), 29, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [45313] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1306), 1, + sym_variable_name, + ACTIONS(1304), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1302), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [45359] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1276), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1274), 30, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_fi, + anon_sym_elif, + anon_sym_else, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [45399] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(754), 1, + sym_file_descriptor, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + STATE(1205), 1, + sym_concatenation, + ACTIONS(1518), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1399), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [45457] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 1, + sym_file_descriptor, + ACTIONS(1483), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1485), 1, + anon_sym_DOLLAR, + ACTIONS(1487), 1, + anon_sym_DQUOTE, + ACTIONS(1489), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1491), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1493), 1, + anon_sym_BQUOTE, + STATE(653), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1481), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(856), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [45515] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [45556] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1530), 1, + anon_sym_RPAREN, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [45603] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1094), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1090), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [45642] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(546), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [45681] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [45722] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(377), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(187), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1100), 2, + sym_variable_assignment, + aux_sym_command_repeat1, + ACTIONS(65), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [45789] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [45830] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [45871] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1541), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [45918] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(546), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [45957] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1544), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46004] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1547), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46051] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1550), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46098] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1553), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46145] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1556), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46192] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1559), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46239] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(540), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [46278] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1128), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1130), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [46317] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1562), 1, + ts_builtin_sym_end, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46364] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(754), 1, + sym_file_descriptor, + ACTIONS(1566), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1568), 1, + anon_sym_DOLLAR, + ACTIONS(1570), 1, + anon_sym_DQUOTE, + ACTIONS(1572), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1574), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1576), 1, + anon_sym_BQUOTE, + STATE(1639), 1, + sym_concatenation, + ACTIONS(1564), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1437), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [46421] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1580), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1578), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [46460] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1582), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [46501] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1584), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46548] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(760), 1, + sym_file_descriptor, + ACTIONS(1566), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1568), 1, + anon_sym_DOLLAR, + ACTIONS(1570), 1, + anon_sym_DQUOTE, + ACTIONS(1572), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1574), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1576), 1, + anon_sym_BQUOTE, + STATE(1605), 1, + sym_concatenation, + ACTIONS(1587), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1417), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [46605] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1589), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46652] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1468), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1466), 29, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_done, + anon_sym_if, + anon_sym_then, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [46691] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_variable_name, + ACTIONS(1592), 2, + sym_file_descriptor, + ts_builtin_sym_end, + ACTIONS(762), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1594), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [46734] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(959), 1, + aux_sym_concatenation_token1, + ACTIONS(1596), 1, + sym__concat, + STATE(293), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(957), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [46779] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1094), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1090), 29, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [46818] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1598), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46865] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1094), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1090), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [46904] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1601), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46951] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1604), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [46998] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1607), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [47045] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1610), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [47092] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1613), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [47139] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1616), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [47186] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1619), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [47233] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(546), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [47272] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1128), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1130), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [47311] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1622), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [47358] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(1625), 1, + sym_variable_name, + STATE(1432), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1433), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 4, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [47407] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1630), 1, + anon_sym_LF, + STATE(709), 1, + aux_sym__case_item_last_repeat2, + ACTIONS(1633), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1628), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [47450] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1635), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [47497] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [47538] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1128), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1130), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [47577] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(377), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(251), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1100), 2, + sym_variable_assignment, + aux_sym_command_repeat1, + ACTIONS(371), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(734), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [47644] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1638), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [47691] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1580), 3, + sym_file_descriptor, + sym__bare_dollar, + ts_builtin_sym_end, + ACTIONS(1578), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [47730] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1276), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1274), 29, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_SEMI_SEMI, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [47769] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1580), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1578), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [47808] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [47849] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [47890] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(959), 1, + aux_sym_concatenation_token1, + ACTIONS(1027), 1, + sym__concat, + ACTIONS(1641), 1, + anon_sym_LPAREN, + STATE(694), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [47937] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1644), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [47984] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [48025] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [48066] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(540), 28, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [48105] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1647), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [48152] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 10, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [48197] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(377), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(186), 1, + sym_command_name, + STATE(622), 1, + sym_concatenation, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1100), 2, + sym_variable_assignment, + aux_sym_command_repeat1, + ACTIONS(115), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(289), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [48264] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1582), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [48305] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1650), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [48352] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1653), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [48399] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [48440] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(345), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(347), 1, + anon_sym_DOLLAR, + ACTIONS(349), 1, + anon_sym_DQUOTE, + ACTIONS(353), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(355), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(357), 1, + anon_sym_BQUOTE, + ACTIONS(377), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(285), 1, + sym_command_name, + STATE(928), 1, + sym_concatenation, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1100), 2, + sym_variable_assignment, + aux_sym_command_repeat1, + ACTIONS(351), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(777), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [48507] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(377), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(190), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1100), 2, + sym_variable_assignment, + aux_sym_command_repeat1, + ACTIONS(65), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(420), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [48574] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(959), 1, + aux_sym_concatenation_token1, + ACTIONS(1027), 1, + sym__concat, + STATE(694), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [48619] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1660), 1, + sym_variable_name, + ACTIONS(1658), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1656), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 18, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [48664] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1662), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [48711] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1665), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [48758] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [48799] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [48840] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [48881] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1668), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [48928] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_variable_name, + ACTIONS(1592), 1, + sym_file_descriptor, + ACTIONS(762), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1594), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [48971] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(27), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(29), 1, + anon_sym_DOLLAR, + ACTIONS(31), 1, + anon_sym_DQUOTE, + ACTIONS(35), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(37), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(39), 1, + anon_sym_BQUOTE, + ACTIONS(377), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(179), 1, + sym_command_name, + STATE(636), 1, + sym_concatenation, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1100), 2, + sym_variable_assignment, + aux_sym_command_repeat1, + ACTIONS(33), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(291), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [49038] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 10, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [49083] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1671), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [49130] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1674), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [49177] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_variable_name, + ACTIONS(1592), 1, + sym_file_descriptor, + ACTIONS(762), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1594), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + [49220] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1677), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [49267] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1680), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [49314] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49355] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49396] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49437] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49478] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49519] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49560] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49601] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49642] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49683] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49724] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49765] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49806] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49847] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49888] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [49929] = 17, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(377), 1, + sym_variable_name, + ACTIONS(1068), 1, + sym_file_descriptor, + STATE(180), 1, + sym_command_name, + STATE(624), 1, + sym_concatenation, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(1066), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1100), 2, + sym_variable_assignment, + aux_sym_command_repeat1, + ACTIONS(228), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(299), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(1064), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [49996] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1683), 1, + anon_sym_RPAREN, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [50043] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(875), 1, + sym_file_descriptor, + ACTIONS(1625), 1, + sym_variable_name, + STATE(1432), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + STATE(1433), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(762), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(766), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [50090] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(540), 29, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [50129] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1686), 1, + sym__concat, + STATE(338), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(957), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50173] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1688), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50213] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1690), 1, + anon_sym_LPAREN, + ACTIONS(1693), 1, + aux_sym_concatenation_token1, + ACTIONS(1695), 1, + sym__concat, + STATE(802), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50259] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50299] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1468), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1466), 28, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_do, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50337] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50377] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50417] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1276), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1274), 28, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50455] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1693), 1, + aux_sym_concatenation_token1, + ACTIONS(1695), 1, + sym__concat, + STATE(802), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 25, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50499] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50539] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50579] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1038), 1, + aux_sym_concatenation_token1, + ACTIONS(1699), 1, + sym__concat, + STATE(344), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(957), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50623] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1276), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1274), 28, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_fi, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50661] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1276), 3, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + ACTIONS(1274), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50699] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1468), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1466), 28, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_fi, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50737] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50777] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50817] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_variable_name, + ACTIONS(1592), 1, + sym_file_descriptor, + ACTIONS(762), 8, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + ACTIONS(1594), 20, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [50859] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1526), 8, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + ACTIONS(1528), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1533), 11, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_BQUOTE, + [50903] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50943] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [50983] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51023] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51063] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51103] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1701), 1, + aux_sym_concatenation_token1, + ACTIONS(1704), 1, + sym__concat, + STATE(793), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(983), 25, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51147] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51187] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(769), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1174), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1172), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51231] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1038), 1, + aux_sym_concatenation_token1, + ACTIONS(1134), 1, + sym__concat, + STATE(780), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1128), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1130), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51275] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1697), 1, + ts_builtin_sym_end, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51315] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1468), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1466), 28, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_RBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51353] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(769), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1090), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51397] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(769), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(546), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51441] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 1, + sym_file_descriptor, + ACTIONS(1709), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1711), 1, + anon_sym_DOLLAR, + ACTIONS(1713), 1, + anon_sym_DQUOTE, + ACTIONS(1715), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1717), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1719), 1, + anon_sym_BQUOTE, + STATE(804), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1707), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(950), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + [51497] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1693), 1, + aux_sym_concatenation_token1, + ACTIONS(1721), 1, + sym__concat, + STATE(793), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(957), 25, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51541] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 1, + sym_file_descriptor, + ACTIONS(1709), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1711), 1, + anon_sym_DOLLAR, + ACTIONS(1713), 1, + anon_sym_DQUOTE, + ACTIONS(1715), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1717), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1719), 1, + anon_sym_BQUOTE, + STATE(804), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1707), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(950), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + [51597] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(536), 1, + sym_file_descriptor, + ACTIONS(1726), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1729), 1, + anon_sym_DOLLAR, + ACTIONS(1732), 1, + anon_sym_DQUOTE, + ACTIONS(1735), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1738), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1741), 1, + anon_sym_BQUOTE, + STATE(804), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1723), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(950), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + [51653] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1276), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1274), 28, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_do, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51691] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1092), 1, + aux_sym_concatenation_token1, + ACTIONS(1096), 1, + sym__concat, + STATE(769), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(540), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51735] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1046), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51772] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [51811] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1072), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51848] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1744), 1, + aux_sym_concatenation_token1, + ACTIONS(1746), 1, + sym__concat, + STATE(815), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(957), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51891] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1086), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51928] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1098), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [51965] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1102), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52002] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1193), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52039] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1748), 1, + aux_sym_concatenation_token1, + ACTIONS(1751), 1, + sym__concat, + STATE(815), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(983), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52082] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1112), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52119] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52156] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1058), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52193] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1120), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52230] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52267] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1124), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52304] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1754), 1, + aux_sym_concatenation_token1, + ACTIONS(1756), 1, + sym__concat, + STATE(824), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(957), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52347] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(983), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52384] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1758), 1, + aux_sym_concatenation_token1, + ACTIONS(1761), 1, + sym__concat, + STATE(824), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(983), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52427] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 27, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52464] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1042), 26, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52501] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1174), 1, + sym_file_descriptor, + ACTIONS(1320), 1, + aux_sym_concatenation_token1, + ACTIONS(1464), 1, + sym__concat, + STATE(835), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1172), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52544] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1744), 1, + aux_sym_concatenation_token1, + ACTIONS(1764), 1, + sym__concat, + STATE(810), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1174), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1172), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52587] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1582), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [52626] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1754), 1, + aux_sym_concatenation_token1, + ACTIONS(1766), 1, + sym__concat, + STATE(822), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1128), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1130), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52669] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [52708] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [52747] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [52786] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [52825] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(961), 1, + sym_file_descriptor, + ACTIONS(1320), 1, + aux_sym_concatenation_token1, + ACTIONS(1768), 1, + sym__concat, + STATE(446), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [52868] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [52907] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [52946] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [52985] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [53024] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [53063] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1262), 1, + sym_variable_name, + ACTIONS(1260), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1258), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [53106] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1744), 1, + aux_sym_concatenation_token1, + ACTIONS(1764), 1, + sym__concat, + STATE(810), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1090), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53149] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1306), 1, + sym_variable_name, + ACTIONS(1304), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1302), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 16, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + aux_sym_heredoc_redirect_token1, + [53192] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1744), 1, + aux_sym_concatenation_token1, + ACTIONS(1764), 1, + sym__concat, + STATE(810), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(540), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53235] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1744), 1, + aux_sym_concatenation_token1, + ACTIONS(1764), 1, + sym__concat, + STATE(810), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(546), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53278] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(754), 1, + sym_file_descriptor, + ACTIONS(1772), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1774), 1, + anon_sym_DOLLAR, + ACTIONS(1776), 1, + anon_sym_DQUOTE, + ACTIONS(1778), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1780), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1782), 1, + anon_sym_BQUOTE, + STATE(1730), 1, + sym_concatenation, + ACTIONS(1770), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1486), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + [53333] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [53372] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [53411] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [53450] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(760), 1, + sym_file_descriptor, + ACTIONS(1772), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1774), 1, + anon_sym_DOLLAR, + ACTIONS(1776), 1, + anon_sym_DQUOTE, + ACTIONS(1778), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1780), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1782), 1, + anon_sym_BQUOTE, + STATE(1726), 1, + sym_concatenation, + ACTIONS(1784), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1468), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + [53505] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1522), 1, + anon_sym_BQUOTE, + ACTIONS(1524), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1520), 26, + anon_sym_for, + anon_sym_while, + anon_sym_until, + anon_sym_if, + anon_sym_case, + anon_sym_LPAREN, + anon_sym_LBRACE, + anon_sym_BANG, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + sym_word, + [53544] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1098), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53580] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1790), 1, + sym_variable_name, + ACTIONS(1788), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1786), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [53622] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1124), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53658] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1120), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53694] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1174), 1, + sym_file_descriptor, + ACTIONS(1792), 1, + aux_sym_concatenation_token1, + ACTIONS(1794), 1, + sym__concat, + STATE(884), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1172), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53736] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53772] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1112), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53808] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + STATE(883), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(1109), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(540), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53848] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1102), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53884] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1098), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53920] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1086), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53956] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1072), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [53992] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1124), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54028] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1116), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54064] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1120), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54100] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + STATE(883), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + STATE(1109), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(546), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54140] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1116), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54176] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(983), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54212] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1046), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54248] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1116), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54284] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(983), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54320] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1042), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54356] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1058), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54392] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 1, + sym_file_descriptor, + ACTIONS(1796), 1, + aux_sym_concatenation_token1, + ACTIONS(1799), 1, + sym__concat, + STATE(875), 1, + aux_sym_concatenation_repeat1, + ACTIONS(983), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54434] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1806), 1, + sym_variable_name, + ACTIONS(1804), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1802), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [54476] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1058), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54512] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1112), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54548] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1046), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54584] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1193), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54620] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + sym__bare_dollar, + ACTIONS(1193), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54656] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1072), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54692] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1811), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1814), 1, + anon_sym_DOLLAR, + ACTIONS(1817), 1, + anon_sym_DQUOTE, + ACTIONS(1820), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1823), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1826), 1, + anon_sym_BQUOTE, + ACTIONS(536), 2, + sym_file_descriptor, + sym_variable_name, + STATE(883), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1808), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1109), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(516), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [54746] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(961), 1, + sym_file_descriptor, + ACTIONS(1792), 1, + aux_sym_concatenation_token1, + ACTIONS(1829), 1, + sym__concat, + STATE(875), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54788] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1086), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54824] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1042), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54860] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1102), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [54896] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1835), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(503), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [54957] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1857), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(461), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [55018] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1859), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(468), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [55079] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1861), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(433), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [55140] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1863), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(471), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [55201] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1865), 1, + aux_sym_concatenation_token1, + ACTIONS(1868), 1, + sym__concat, + STATE(893), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 4, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [55242] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1871), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(467), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [55303] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1873), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(423), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [55364] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1877), 1, + anon_sym_esac, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1299), 1, + sym_terminator, + STATE(1360), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2141), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + ACTIONS(1881), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [55429] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1897), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(451), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [55490] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1042), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [55525] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1046), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [55560] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1072), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [55595] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1098), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [55630] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1899), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(475), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [55691] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1102), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [55726] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + ACTIONS(1901), 1, + anon_sym_esac, + STATE(1313), 1, + sym_terminator, + STATE(1381), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2139), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + ACTIONS(1881), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [55791] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + ACTIONS(1903), 1, + anon_sym_esac, + STATE(1300), 1, + sym_terminator, + STATE(1393), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2195), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + ACTIONS(1881), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [55856] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1124), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [55891] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1905), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(559), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [55952] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1086), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [55987] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1907), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(591), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56048] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1909), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(453), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56109] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1911), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(507), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56170] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1112), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [56205] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1913), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(502), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56266] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1915), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(472), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56327] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1917), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(538), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56388] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1919), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(470), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56449] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1116), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [56484] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1921), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(529), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56545] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1923), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(505), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56606] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1925), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(535), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56667] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1120), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [56702] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1927), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(489), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56763] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(983), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [56798] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1116), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [56833] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + ACTIONS(1929), 1, + anon_sym_esac, + STATE(1308), 1, + sym_terminator, + STATE(1338), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2287), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + ACTIONS(1881), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [56898] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1931), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(473), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [56959] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(1336), 1, + sym_concatenation, + ACTIONS(754), 2, + sym_file_descriptor, + sym_variable_name, + STATE(1128), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(756), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [56998] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1000), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(993), 25, + anon_sym_LPAREN, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [57033] = 5, + ACTIONS(3), 1, + sym_comment, + STATE(1327), 1, + sym_concatenation, + ACTIONS(760), 2, + sym_file_descriptor, + sym_variable_name, + STATE(1105), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + ACTIONS(758), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [57072] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1933), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(452), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57133] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1935), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(585), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57194] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1937), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(528), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57255] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1939), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(449), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57316] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + ACTIONS(1941), 1, + anon_sym_esac, + STATE(1312), 1, + sym_terminator, + STATE(1372), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2281), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + ACTIONS(1881), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [57381] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1943), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(436), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57442] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1193), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [57477] = 18, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + ACTIONS(1945), 1, + anon_sym_esac, + STATE(1306), 1, + sym_terminator, + STATE(1318), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2258), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + ACTIONS(1881), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [57542] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1058), 25, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [57577] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1947), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(478), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57638] = 16, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1949), 1, + anon_sym_RPAREN_RPAREN, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(584), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57699] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1098), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [57733] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(513), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57791] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(570), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57849] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(571), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57907] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(572), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [57965] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1102), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [57999] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 1, + sym_file_descriptor, + ACTIONS(1975), 1, + aux_sym_concatenation_token1, + ACTIONS(1978), 1, + sym__concat, + STATE(947), 1, + aux_sym_concatenation_repeat1, + ACTIONS(983), 22, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [58039] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1981), 1, + aux_sym_concatenation_token1, + ACTIONS(1984), 1, + sym__concat, + STATE(948), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [58079] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1128), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1130), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [58113] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1174), 1, + sym_file_descriptor, + ACTIONS(1987), 1, + aux_sym_concatenation_token1, + ACTIONS(1989), 1, + sym__concat, + STATE(1001), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1172), 22, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [58153] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(573), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [58211] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(574), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [58269] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1072), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [58303] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1580), 2, + sym_file_descriptor, + sym__bare_dollar, + ACTIONS(1578), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [58337] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(575), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [58395] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_variable_name, + ACTIONS(1592), 1, + sym_file_descriptor, + ACTIONS(762), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1594), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [58433] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(576), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [58491] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(577), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [58549] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(476), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [58607] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(463), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [58665] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1536), 1, + sym_file_descriptor, + ACTIONS(1539), 1, + sym_variable_name, + ACTIONS(1528), 5, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(1526), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(1533), 10, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [58705] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(578), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [58763] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1046), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [58797] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(569), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [58855] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1112), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [58889] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [58923] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(579), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [58981] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1042), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [59015] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(413), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59073] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(412), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59131] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(411), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59189] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1086), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [59223] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(410), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59281] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(580), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59339] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1120), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [59373] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(512), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59431] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(409), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59489] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(408), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59547] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(407), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59605] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(406), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59663] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [59697] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(405), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59755] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(404), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59813] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(403), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59871] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(385), 1, + sym_file_descriptor, + ACTIONS(1995), 1, + sym_variable_name, + ACTIONS(1993), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1991), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + [59911] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(511), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [59969] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(546), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [60003] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(540), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [60037] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1094), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1090), 24, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [60071] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(335), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [60129] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(508), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [60187] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [60221] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(601), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [60279] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1058), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [60313] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1193), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [60347] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(347), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [60405] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(346), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [60463] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(345), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [60521] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1951), 1, + anon_sym_LPAREN, + ACTIONS(1953), 1, + anon_sym_BANG, + ACTIONS(1959), 1, + anon_sym_TILDE, + ACTIONS(1961), 1, + anon_sym_DOLLAR, + ACTIONS(1963), 1, + anon_sym_DQUOTE, + ACTIONS(1967), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1969), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1971), 1, + anon_sym_BQUOTE, + ACTIONS(1973), 1, + sym_variable_name, + ACTIONS(1955), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1957), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1965), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(462), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(557), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [60579] = 15, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1831), 1, + anon_sym_LPAREN, + ACTIONS(1833), 1, + anon_sym_BANG, + ACTIONS(1841), 1, + anon_sym_TILDE, + ACTIONS(1843), 1, + anon_sym_DOLLAR, + ACTIONS(1845), 1, + anon_sym_DQUOTE, + ACTIONS(1849), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1851), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1853), 1, + anon_sym_BQUOTE, + ACTIONS(1855), 1, + sym_variable_name, + ACTIONS(1837), 2, + anon_sym_PLUS_PLUS, + anon_sym_DASH_DASH, + ACTIONS(1839), 2, + anon_sym_DASH2, + anon_sym_PLUS2, + ACTIONS(1847), 2, + sym_number, + aux_sym__simple_variable_name_token1, + STATE(370), 3, + sym_string, + sym_simple_expansion, + sym_expansion, + STATE(414), 8, + sym__arithmetic_expression, + sym_arithmetic_literal, + sym_arithmetic_binary_expression, + sym_arithmetic_ternary_expression, + sym_arithmetic_unary_expression, + sym_arithmetic_postfix_expression, + sym_arithmetic_parenthesized_expression, + sym_command_substitution, + [60637] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(961), 1, + sym_file_descriptor, + ACTIONS(1987), 1, + aux_sym_concatenation_token1, + ACTIONS(1997), 1, + sym__concat, + STATE(947), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 22, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [60677] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 5, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1124), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [60711] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(751), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [60762] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1046), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [60795] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2007), 1, + aux_sym_concatenation_token1, + ACTIONS(2010), 1, + sym__concat, + STATE(1005), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [60834] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(831), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(770), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [60885] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2021), 1, + aux_sym_concatenation_token1, + ACTIONS(2023), 1, + sym__concat, + STATE(1009), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1090), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [60924] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(754), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [60975] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2021), 1, + aux_sym_concatenation_token1, + ACTIONS(2025), 1, + sym__concat, + STATE(1005), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [61014] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(847), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61065] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1042), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [61098] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(849), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61149] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(851), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61200] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1193), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [61233] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(808), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61284] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1046), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [61317] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(983), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [61350] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(832), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61401] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(833), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61452] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1058), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [61485] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(834), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61536] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(836), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61587] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(837), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61638] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(838), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61689] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(839), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61740] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(758), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61791] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(840), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61842] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1072), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [61875] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1086), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [61908] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1098), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [61941] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(790), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [61992] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1102), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [62025] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1112), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [62058] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1116), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [62091] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(789), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62142] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1120), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [62175] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(775), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62226] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1116), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [62259] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 2, + sym_file_descriptor, + sym__concat, + ACTIONS(1124), 23, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [62292] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [62325] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(788), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62376] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 1, + aux_sym_concatenation_token1, + ACTIONS(2037), 1, + sym__concat, + STATE(893), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 19, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [62415] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(772), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62466] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(764), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62517] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(763), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62568] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(762), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62619] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(761), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62670] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(760), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62721] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(759), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62772] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(711), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62823] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(774), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62874] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 1, + aux_sym_concatenation_token1, + ACTIONS(2045), 1, + sym__concat, + STATE(893), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [62913] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1058), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [62946] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(750), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [62997] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(739), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63048] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(738), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63099] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(809), 1, + anon_sym_BQUOTE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(829), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63150] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(731), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63201] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(779), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63252] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(722), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63303] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1193), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [63336] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(719), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63387] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(718), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63438] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(757), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63489] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 1, + aux_sym_concatenation_token1, + ACTIONS(2047), 1, + sym__concat, + STATE(893), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 4, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [63528] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(784), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63579] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(671), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63630] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(667), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63681] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(673), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63732] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(674), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63783] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(755), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63834] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(809), 1, + anon_sym_RPAREN, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(728), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63885] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(753), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63936] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(785), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [63987] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64020] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1072), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64053] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1120), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64086] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64119] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1112), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64152] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1098), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64185] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1102), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64218] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 1, + aux_sym_concatenation_token1, + ACTIONS(2049), 1, + sym__concat, + STATE(1042), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1090), 19, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [64257] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 1, + aux_sym_concatenation_token1, + ACTIONS(2049), 1, + sym__concat, + STATE(1065), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 4, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1090), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [64296] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(791), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [64347] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1086), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64380] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(688), 1, + sym_terminator, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(809), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [64431] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(797), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [64482] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(792), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [64533] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1124), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64566] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 1, + aux_sym_concatenation_token1, + ACTIONS(2049), 1, + sym__concat, + STATE(1052), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1090), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64605] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 4, + sym_file_descriptor, + sym__concat, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1042), 21, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_BQUOTE, + anon_sym_SEMI, + [64638] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + aux_sym_concatenation_token1, + ACTIONS(2053), 1, + sym__concat, + STATE(1139), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1090), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [64676] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2059), 1, + sym_variable_name, + ACTIONS(2057), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1093), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2055), 19, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [64712] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(927), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 18, + anon_sym_esac, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [64748] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(718), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [64798] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(688), 1, + sym_terminator, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(809), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [64846] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(927), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [64880] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2079), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2081), 1, + sym_file_descriptor, + ACTIONS(2073), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2076), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + STATE(1098), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2068), 7, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2070), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [64922] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2084), 1, + sym_variable_name, + ACTIONS(2057), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1099), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2055), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [64958] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2095), 1, + sym_file_descriptor, + ACTIONS(2098), 1, + sym_variable_name, + STATE(1343), 1, + sym_file_redirect, + ACTIONS(2092), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1100), 2, + sym_variable_assignment, + aux_sym_command_repeat1, + ACTIONS(2089), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2087), 9, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [65000] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1094), 4, + sym_file_descriptor, + sym_variable_name, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1090), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [65032] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(674), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [65082] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [65114] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1120), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [65146] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + aux_sym_concatenation_token1, + ACTIONS(2053), 1, + sym__concat, + STATE(1139), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(546), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [65184] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [65216] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(840), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(778), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [65264] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1112), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [65296] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + aux_sym_concatenation_token1, + ACTIONS(2053), 1, + sym__concat, + STATE(1139), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1174), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1172), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [65334] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(809), 1, + anon_sym_RPAREN, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(728), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [65382] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2103), 1, + sym__concat, + STATE(1171), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(546), 19, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [65420] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(692), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [65468] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2003), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2005), 1, + sym_file_descriptor, + STATE(756), 1, + sym_terminator, + ACTIONS(764), 2, + anon_sym_esac, + anon_sym_SEMI_SEMI, + ACTIONS(768), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(772), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [65516] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_RPAREN, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2043), 1, + sym_file_descriptor, + STATE(723), 1, + sym_terminator, + ACTIONS(802), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [65564] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2105), 1, + sym__concat, + STATE(948), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [65602] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2079), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2116), 1, + sym_file_descriptor, + ACTIONS(2110), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2113), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + STATE(1116), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2068), 7, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2107), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [65644] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(927), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 19, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [65678] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2103), 1, + sym__concat, + STATE(1171), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(540), 19, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [65716] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(927), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 18, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [65752] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1086), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [65784] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1124), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [65816] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1102), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [65848] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2005), 1, + sym_file_descriptor, + ACTIONS(2121), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(770), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1098), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2119), 7, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [65890] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1098), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [65922] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1072), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [65954] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2127), 1, + sym_variable_name, + ACTIONS(2125), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(2123), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + ACTIONS(379), 12, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [65990] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1046), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [66022] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + aux_sym_concatenation_token1, + ACTIONS(2053), 1, + sym__concat, + STATE(1139), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(540), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [66060] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2129), 1, + sym__concat, + STATE(948), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [66098] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(673), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [66148] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2135), 1, + sym_variable_name, + STATE(1163), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2131), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2133), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [66184] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1042), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [66216] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2019), 1, + sym_file_descriptor, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2121), 2, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + STATE(1164), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2119), 6, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [66258] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2103), 1, + sym__concat, + STATE(1129), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(540), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [66296] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2066), 1, + sym_file_descriptor, + ACTIONS(2137), 1, + aux_sym_heredoc_redirect_token1, + STATE(783), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(898), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [66344] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2139), 1, + sym_variable_name, + ACTIONS(2131), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1099), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2133), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [66380] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2043), 1, + sym_file_descriptor, + ACTIONS(2121), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1116), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2119), 7, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [66422] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2103), 1, + sym__concat, + STATE(1129), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(546), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [66460] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2051), 1, + aux_sym_concatenation_token1, + ACTIONS(2141), 1, + sym__concat, + STATE(1167), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(957), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [66498] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2066), 1, + sym_file_descriptor, + ACTIONS(2143), 1, + aux_sym_heredoc_redirect_token1, + STATE(615), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(949), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [66546] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2066), 1, + sym_file_descriptor, + ACTIONS(2145), 1, + aux_sym_heredoc_redirect_token1, + STATE(798), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(953), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [66594] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2147), 1, + sym_variable_name, + ACTIONS(2131), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1148), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2133), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [66630] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2149), 1, + sym_variable_name, + ACTIONS(2131), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1093), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2133), 19, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [66666] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(667), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [66716] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(671), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [66766] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(809), 1, + anon_sym_SEMI_SEMI, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(728), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [66816] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(750), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [66866] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2151), 1, + sym_variable_name, + ACTIONS(2057), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1148), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2055), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [66902] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1193), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [66934] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 1, + aux_sym_concatenation_token1, + ACTIONS(2154), 1, + sym__concat, + STATE(893), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [66972] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(739), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [67022] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2103), 1, + sym__concat, + STATE(1115), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(540), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [67060] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(738), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [67110] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(927), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [67144] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(731), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [67194] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2103), 1, + sym__concat, + STATE(1115), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(546), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [67232] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2033), 1, + sym_file_descriptor, + ACTIONS(2121), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1178), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2119), 7, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [67274] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2156), 1, + aux_sym_concatenation_token1, + ACTIONS(2158), 1, + sym__concat, + STATE(1160), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(540), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [67312] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 1, + aux_sym_concatenation_token1, + ACTIONS(2049), 1, + sym__concat, + STATE(1150), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1090), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [67350] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2156), 1, + aux_sym_concatenation_token1, + ACTIONS(2160), 1, + sym__concat, + STATE(1169), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [67388] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(719), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [67438] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(825), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [67486] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2162), 1, + sym_variable_name, + STATE(1163), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2057), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2055), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [67522] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2171), 1, + sym_file_descriptor, + ACTIONS(2079), 2, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2113), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2168), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1164), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2068), 6, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2165), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [67564] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(722), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [67614] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_BQUOTE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(831), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [67662] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2174), 1, + aux_sym_concatenation_token1, + ACTIONS(2177), 1, + sym__concat, + STATE(1167), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(983), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [67700] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(927), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 17, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [67736] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2180), 1, + aux_sym_concatenation_token1, + ACTIONS(2183), 1, + sym__concat, + STATE(1169), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [67774] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2188), 1, + anon_sym_PIPE, + STATE(1512), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2186), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2191), 19, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [67810] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2193), 1, + sym__concat, + STATE(948), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 19, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [67848] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1058), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [67880] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2156), 1, + aux_sym_concatenation_token1, + ACTIONS(2158), 1, + sym__concat, + STATE(1160), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(546), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [67918] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2066), 1, + sym_file_descriptor, + ACTIONS(2195), 1, + aux_sym_heredoc_redirect_token1, + STATE(773), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(951), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [67966] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(831), 1, + ts_builtin_sym_end, + ACTIONS(2017), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2019), 1, + sym_file_descriptor, + STATE(770), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(835), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(833), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [68014] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(809), 1, + anon_sym_BQUOTE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2033), 1, + sym_file_descriptor, + STATE(829), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(842), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [68062] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 4, + sym_file_descriptor, + sym__concat, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [68094] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2079), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2203), 1, + sym_file_descriptor, + ACTIONS(2113), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2200), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1178), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2068), 7, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + ACTIONS(2197), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [68136] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(927), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 19, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [68170] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(711), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [68220] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(927), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 18, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [68256] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2206), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2208), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [68287] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(983), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [68318] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2218), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2220), 1, + sym_file_descriptor, + ACTIONS(2215), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1184), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2212), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2210), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [68357] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2103), 1, + sym__concat, + STATE(1251), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(540), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [68394] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2103), 1, + sym__concat, + STATE(1251), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(546), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [68431] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2223), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2225), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [68462] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2229), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2231), 1, + sym_file_descriptor, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1218), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2227), 9, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [68501] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2239), 1, + sym_file_descriptor, + ACTIONS(2218), 2, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2236), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1189), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2210), 8, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2233), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [68540] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2242), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2244), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [68571] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(825), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [68616] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(844), 1, + sym_variable_name, + STATE(1142), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [68651] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(1474), 1, + sym_variable_name, + STATE(1404), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [68686] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(764), 1, + anon_sym_SEMI_SEMI, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(723), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [68733] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2218), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2252), 1, + sym_file_descriptor, + ACTIONS(2249), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1195), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2246), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2210), 9, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [68772] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2255), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2257), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [68803] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(546), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [68834] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [68865] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1120), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [68896] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2066), 1, + sym_file_descriptor, + ACTIONS(2145), 1, + aux_sym_heredoc_redirect_token1, + STATE(798), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(953), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [68941] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2259), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2261), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [68972] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [69003] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2263), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2265), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69034] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2267), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2269), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69065] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(540), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69096] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2271), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2273), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69127] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2229), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2275), 1, + sym_file_descriptor, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1184), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2227), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69166] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1112), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [69197] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1086), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [69228] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2277), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2279), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69259] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2281), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2283), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69290] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1124), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [69321] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2285), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2287), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69352] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2289), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2291), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69383] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2229), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2293), 1, + sym_file_descriptor, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1195), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2227), 9, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [69422] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(809), 1, + anon_sym_SEMI_SEMI, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(728), 1, + sym_terminator, + ACTIONS(800), 2, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [69469] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2285), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2287), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69500] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2218), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2301), 1, + sym_file_descriptor, + ACTIONS(2298), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1218), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2295), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2210), 9, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [69539] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2304), 1, + sym_file_descriptor, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2229), 2, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + STATE(1189), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2227), 8, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [69578] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2306), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2308), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69609] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1102), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [69640] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2310), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2312), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69671] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2066), 1, + sym_file_descriptor, + ACTIONS(2143), 1, + aux_sym_heredoc_redirect_token1, + STATE(615), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(949), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [69716] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2314), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2316), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69747] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2318), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2320), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69778] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2322), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2324), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69809] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [69840] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2326), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2328), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69871] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2330), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2332), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69902] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2334), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2336), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69933] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2334), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2336), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69964] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2338), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2340), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [69995] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2338), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2340), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70026] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1098), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [70057] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2066), 1, + sym_file_descriptor, + ACTIONS(2195), 1, + aux_sym_heredoc_redirect_token1, + STATE(773), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(951), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [70102] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2342), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2344), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70133] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1072), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [70164] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2346), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2348), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70195] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2231), 1, + sym_file_descriptor, + ACTIONS(2352), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2041), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1218), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2039), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2350), 9, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [70234] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2354), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2356), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70265] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2358), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2360), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70296] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1046), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [70327] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1042), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [70358] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2354), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2356), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70389] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1102), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [70420] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2031), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2066), 1, + sym_file_descriptor, + STATE(692), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(800), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [70465] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(1625), 1, + sym_variable_name, + STATE(1432), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [70500] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1098), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [70531] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2293), 1, + sym_file_descriptor, + ACTIONS(2352), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2001), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1195), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(1999), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2350), 9, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [70570] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1058), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [70601] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2362), 1, + sym__concat, + STATE(948), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [70638] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2364), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2366), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70669] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2368), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2370), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70700] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2372), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2374), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70731] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2376), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2378), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70762] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2066), 1, + sym_file_descriptor, + ACTIONS(2121), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1269), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2119), 6, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [70803] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1042), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [70834] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2380), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2382), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70865] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2384), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2386), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70896] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2388), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2390), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70927] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2392), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2394), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70958] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2376), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2378), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [70989] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2396), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2398), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71020] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(927), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 17, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [71055] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(927), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [71088] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2304), 1, + sym_file_descriptor, + ACTIONS(2015), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2352), 2, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + STATE(1189), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2013), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2350), 8, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [71127] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(837), 1, + sym_variable_name, + STATE(1131), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [71162] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2352), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2350), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71193] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2079), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2406), 1, + sym_file_descriptor, + ACTIONS(2113), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2403), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1269), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2068), 6, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2400), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [71234] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2409), 1, + sym_variable_name, + ACTIONS(2131), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1285), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2133), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [71269] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(806), 1, + sym_variable_name, + STATE(1143), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [71304] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1046), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [71335] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2411), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2413), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71366] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2411), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2413), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71397] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2415), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2417), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71428] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1058), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [71459] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2419), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2421), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71490] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2419), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2421), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71521] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2423), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2425), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71552] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2423), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2425), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71583] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1086), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [71614] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2427), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2429), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71645] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1592), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1594), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71676] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1072), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [71707] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2431), 1, + sym_variable_name, + ACTIONS(2057), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1285), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2055), 18, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [71742] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(895), 1, + sym_variable_name, + STATE(1270), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [71777] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1193), 20, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [71808] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1124), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [71839] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2066), 1, + sym_file_descriptor, + ACTIONS(2137), 1, + aux_sym_heredoc_redirect_token1, + STATE(783), 1, + sym_terminator, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(893), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(898), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [71884] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(774), 1, + sym_file_descriptor, + ACTIONS(776), 1, + sym_variable_name, + STATE(1136), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(762), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [71919] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2434), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2436), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [71950] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1116), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [71981] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1193), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [72012] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1120), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [72043] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1116), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [72074] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + sym_variable_name, + ACTIONS(1112), 20, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [72105] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2275), 1, + sym_file_descriptor, + ACTIONS(2352), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2029), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1184), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2027), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2350), 9, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [72144] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1592), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(1594), 20, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [72175] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + ACTIONS(2438), 1, + anon_sym_esac, + STATE(1350), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2174), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [72231] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + ACTIONS(1901), 1, + anon_sym_esac, + STATE(1382), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2181), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [72287] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2442), 1, + anon_sym_PIPE, + STATE(1304), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2440), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2444), 17, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [72321] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2446), 1, + anon_sym_PIPE, + STATE(1310), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2440), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2444), 18, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [72355] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2218), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2454), 1, + sym_file_descriptor, + ACTIONS(2451), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1303), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2210), 8, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2448), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [72393] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2457), 1, + anon_sym_PIPE, + STATE(1304), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2186), 3, + sym_file_descriptor, + ts_builtin_sym_end, + aux_sym_heredoc_redirect_token1, + ACTIONS(2191), 17, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [72427] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1094), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1090), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [72457] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + ACTIONS(2460), 1, + anon_sym_esac, + STATE(1354), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2219), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [72513] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2229), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2462), 1, + sym_file_descriptor, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1303), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2227), 8, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [72551] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + ACTIONS(1945), 1, + anon_sym_esac, + STATE(1319), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2260), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [72607] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2352), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2462), 1, + sym_file_descriptor, + ACTIONS(2064), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1303), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2062), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + ACTIONS(2350), 8, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [72645] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2464), 1, + anon_sym_PIPE, + STATE(1310), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2186), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2191), 18, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_BQUOTE, + anon_sym_SEMI, + [72679] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2467), 1, + anon_sym_PIPE, + STATE(1311), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2186), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2191), 18, + anon_sym_esac, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [72713] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1877), 1, + anon_sym_esac, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1365), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2145), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [72769] = 16, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + ACTIONS(2470), 1, + anon_sym_esac, + STATE(1375), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2134), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [72825] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2472), 1, + anon_sym_PIPE, + STATE(1315), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2440), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2444), 18, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [72859] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2474), 1, + anon_sym_PIPE, + STATE(1315), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2186), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2191), 18, + anon_sym_RPAREN, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [72893] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2477), 1, + anon_sym_PIPE, + STATE(1311), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2440), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2444), 18, + anon_sym_esac, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [72927] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2188), 1, + anon_sym_PIPE, + STATE(1512), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2186), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2191), 18, + anon_sym_esac, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [72961] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2218), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [73014] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2222), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [73067] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2271), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2273), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73096] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2263), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2265), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73125] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2259), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2261), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73154] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + STATE(2124), 1, + sym_terminator, + STATE(1402), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(2479), 3, + sym_raw_string, + sym_number, + sym_word, + ACTIONS(2481), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1669), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [73201] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2223), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2225), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73230] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2289), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2291), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73259] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2483), 1, + anon_sym_PIPE, + STATE(1326), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2186), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2191), 17, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73292] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(546), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [73321] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2281), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2283), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73350] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 1, + aux_sym_concatenation_token1, + ACTIONS(2049), 1, + sym__concat, + STATE(1356), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1094), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(1090), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [73385] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2396), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2398), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73414] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2427), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2429), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73443] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2267), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2269), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73472] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2285), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2287), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73501] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2419), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2421), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73530] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2285), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2287), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73559] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(540), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [73588] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2306), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2308), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73617] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2259), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [73670] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1592), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(1594), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73699] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1592), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(1594), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73728] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1094), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1090), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [73757] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2242), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2244), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73786] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1539), 2, + sym_file_descriptor, + sym_variable_name, + ACTIONS(1526), 19, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [73815] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2314), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2316), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73844] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(546), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73873] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2423), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2425), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73902] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2423), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2425), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73931] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2434), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2436), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73960] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2322), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2324), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [73989] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2153), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [74042] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2419), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2421), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74071] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2415), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2417), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74100] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2411), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2413), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74129] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2194), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [74182] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2486), 1, + anon_sym_PIPE, + STATE(1326), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2440), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2444), 17, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74215] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2035), 1, + aux_sym_concatenation_token1, + ACTIONS(2488), 1, + sym__concat, + STATE(893), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 3, + sym_file_descriptor, + sym_variable_name, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [74250] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2326), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2328), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74279] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2330), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2332), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74308] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(540), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74337] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2173), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [74390] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2127), 1, + sym_variable_name, + ACTIONS(2125), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(379), 9, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + ACTIONS(2123), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [74423] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2334), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2336), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74452] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2334), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2336), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74481] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2338), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2340), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74510] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2175), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [74563] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2364), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2366), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74592] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2411), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2413), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74621] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2338), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2340), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74650] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2342), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2344), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74679] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2346), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2348), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74708] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2368), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2370), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74737] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2144), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [74790] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + STATE(2119), 1, + sym_terminator, + STATE(1402), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(2479), 3, + sym_raw_string, + sym_number, + sym_word, + ACTIONS(2481), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1669), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [74837] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2354), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2356), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74866] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2254), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [74919] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2380), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2382), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74948] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2206), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2208), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [74977] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2388), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2390), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75006] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + STATE(2105), 1, + sym_terminator, + STATE(1402), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(2479), 3, + sym_raw_string, + sym_number, + sym_word, + ACTIONS(2481), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1669), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [75053] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2392), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2394), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75082] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2135), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [75135] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2171), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [75188] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2358), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2360), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75217] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2352), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2350), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75246] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2376), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2378), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75275] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2354), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2356), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75304] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2318), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2320), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75333] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2310), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2312), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75362] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2255), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2257), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75391] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2277), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2279), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75420] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2384), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2386), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75449] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2376), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2378), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75478] = 15, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1879), 1, + anon_sym_LPAREN, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2177), 1, + sym__case_item_last, + STATE(2078), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(1875), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2004), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [75531] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2372), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2374), 19, + anon_sym_esac, + anon_sym_PIPE, + anon_sym_SEMI_SEMI, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + anon_sym_AMP, + anon_sym_SEMI, + [75560] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2494), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2496), 1, + sym_file_descriptor, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(1470), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2492), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2490), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [75600] = 14, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2501), 1, + anon_sym_LPAREN, + ACTIONS(2504), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2507), 1, + anon_sym_DOLLAR, + ACTIONS(2510), 1, + anon_sym_DQUOTE, + ACTIONS(2513), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2516), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2519), 1, + anon_sym_BQUOTE, + ACTIONS(2522), 1, + sym_extglob_pattern, + STATE(1396), 1, + aux_sym_case_statement_repeat1, + STATE(1923), 1, + sym_case_item, + STATE(2093), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(2498), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1995), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [75650] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2121), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2496), 1, + sym_file_descriptor, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2492), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2119), 3, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1409), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2490), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [75688] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2103), 1, + sym__concat, + STATE(1401), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(546), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [75722] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2103), 1, + sym__concat, + STATE(1401), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(540), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [75756] = 5, + ACTIONS(1074), 1, + sym_comment, + STATE(1400), 1, + aux_sym_concatenation_repeat1, + ACTIONS(2525), 2, + sym__concat, + aux_sym_concatenation_token1, + ACTIONS(983), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(988), 10, + sym_file_descriptor, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [75788] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2101), 1, + aux_sym_concatenation_token1, + ACTIONS(2528), 1, + sym__concat, + STATE(948), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [75822] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2533), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2536), 1, + anon_sym_DOLLAR, + ACTIONS(2539), 1, + anon_sym_DQUOTE, + ACTIONS(2542), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2545), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2548), 1, + anon_sym_BQUOTE, + STATE(1402), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(2530), 3, + sym_raw_string, + sym_number, + sym_word, + ACTIONS(516), 4, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + STATE(1669), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [75866] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2551), 1, + sym_variable_name, + ACTIONS(2057), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1403), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2055), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [75898] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2554), 1, + sym_variable_name, + ACTIONS(2131), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1403), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2133), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [75930] = 5, + ACTIONS(1074), 1, + sym_comment, + STATE(1410), 1, + aux_sym_concatenation_repeat1, + ACTIONS(2556), 2, + sym__concat, + aux_sym_concatenation_token1, + ACTIONS(1090), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1094), 10, + sym_file_descriptor, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [75962] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(2496), 1, + sym_file_descriptor, + ACTIONS(2558), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(1470), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2492), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2490), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [76002] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(927), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 14, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [76034] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(927), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 15, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [76064] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2079), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2566), 1, + sym_file_descriptor, + ACTIONS(2113), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2563), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2068), 3, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + STATE(1409), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2560), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [76102] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2556), 1, + aux_sym_concatenation_token1, + ACTIONS(2569), 1, + sym__concat, + STATE(1400), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(961), 10, + sym_file_descriptor, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [76136] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2494), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2496), 1, + sym_file_descriptor, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(1470), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2492), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2490), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [76173] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1120), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1122), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76200] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1102), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1104), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76227] = 5, + ACTIONS(1074), 1, + sym_comment, + STATE(1414), 1, + aux_sym_concatenation_repeat1, + ACTIONS(2571), 2, + sym__concat, + aux_sym_concatenation_token1, + ACTIONS(983), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(988), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [76258] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2352), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2574), 1, + sym_file_descriptor, + ACTIONS(2492), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1439), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2350), 5, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2490), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [76293] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1124), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1126), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76320] = 5, + ACTIONS(1074), 1, + sym_comment, + STATE(1419), 1, + aux_sym_concatenation_repeat1, + ACTIONS(2576), 2, + sym__concat, + aux_sym_concatenation_token1, + ACTIONS(546), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(548), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [76351] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1193), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1195), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76378] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2576), 1, + aux_sym_concatenation_token1, + ACTIONS(2578), 1, + sym__concat, + STATE(1414), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(961), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [76411] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2229), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2574), 1, + sym_file_descriptor, + ACTIONS(2492), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1439), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2227), 5, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2490), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [76446] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1086), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1088), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76473] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1072), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1070), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76500] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1046), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1048), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76527] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1112), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1114), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76554] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1116), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1118), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76581] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1098), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1100), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76608] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1116), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1118), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76635] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2580), 1, + sym_variable_name, + STATE(1428), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2055), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2057), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [76666] = 10, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2068), 1, + anon_sym_PIPE, + ACTIONS(2592), 1, + anon_sym_LT_LT, + ACTIONS(2595), 1, + anon_sym_LT_LT_DASH, + ACTIONS(2598), 1, + sym_file_descriptor, + ACTIONS(2079), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2589), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2586), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + STATE(1429), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2583), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [76707] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1042), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1044), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76734] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2496), 1, + sym_file_descriptor, + ACTIONS(2558), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(804), 2, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(1470), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2492), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2490), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [76771] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2601), 1, + sym_variable_name, + STATE(1428), 2, + sym_variable_assignment, + aux_sym__variable_assignments_repeat1, + ACTIONS(2133), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2131), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [76802] = 10, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2119), 1, + anon_sym_PIPE, + ACTIONS(2609), 1, + anon_sym_LT_LT, + ACTIONS(2611), 1, + anon_sym_LT_LT_DASH, + ACTIONS(2613), 1, + sym_file_descriptor, + ACTIONS(2121), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2607), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2605), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + STATE(1429), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2603), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [76843] = 4, + ACTIONS(1074), 1, + sym_comment, + STATE(1433), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(927), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [76872] = 5, + ACTIONS(766), 1, + anon_sym_PIPE, + ACTIONS(1074), 1, + sym_comment, + STATE(1433), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(900), 6, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(927), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [76903] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(983), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(988), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76930] = 5, + ACTIONS(1074), 1, + sym_comment, + STATE(1419), 1, + aux_sym_concatenation_repeat1, + ACTIONS(2576), 2, + sym__concat, + aux_sym_concatenation_token1, + ACTIONS(540), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(538), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [76961] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1058), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1056), 12, + sym_file_descriptor, + sym__concat, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [76988] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2218), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(2621), 1, + sym_file_descriptor, + ACTIONS(2618), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1439), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2210), 5, + anon_sym_PIPE, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + ACTIONS(2615), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [77023] = 8, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2624), 1, + sym_file_descriptor, + ACTIONS(2227), 2, + anon_sym_PIPE, + anon_sym_LT_LT, + ACTIONS(2607), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1448), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2229), 3, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT_DASH, + ACTIONS(2605), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(2603), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [77059] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1086), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1088), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77085] = 9, + ACTIONS(804), 1, + anon_sym_LT_LT, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2043), 1, + sym_file_descriptor, + ACTIONS(2632), 1, + anon_sym_LT_LT_DASH, + ACTIONS(2626), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2630), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2628), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + STATE(1137), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2039), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [77123] = 9, + ACTIONS(770), 1, + anon_sym_LT_LT, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2005), 1, + sym_file_descriptor, + ACTIONS(2640), 1, + anon_sym_LT_LT_DASH, + ACTIONS(2634), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2638), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2636), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + STATE(1123), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(1999), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [77161] = 9, + ACTIONS(804), 1, + anon_sym_LT_LT, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2033), 1, + sym_file_descriptor, + ACTIONS(2632), 1, + anon_sym_LT_LT_DASH, + ACTIONS(2642), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2646), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2644), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + STATE(1157), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2027), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [77199] = 9, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2609), 1, + anon_sym_LT_LT, + ACTIONS(2611), 1, + anon_sym_LT_LT_DASH, + ACTIONS(2613), 1, + sym_file_descriptor, + ACTIONS(2607), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2648), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2605), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + STATE(1433), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2603), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [77237] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2650), 1, + anon_sym_PIPE, + STATE(1449), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2440), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2444), 14, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [77267] = 9, + ACTIONS(804), 1, + anon_sym_LT_LT, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2496), 1, + sym_file_descriptor, + ACTIONS(2632), 1, + anon_sym_LT_LT_DASH, + ACTIONS(2652), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2656), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2654), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + STATE(1397), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2490), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [77305] = 8, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2667), 1, + sym_file_descriptor, + ACTIONS(2210), 2, + anon_sym_PIPE, + anon_sym_LT_LT, + ACTIONS(2664), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1448), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2218), 3, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT_DASH, + ACTIONS(2661), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(2658), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [77341] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2670), 1, + anon_sym_PIPE, + STATE(1449), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2186), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(2191), 14, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT, + anon_sym_LT_LT_DASH, + [77371] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(983), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(988), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77397] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1058), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1056), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77423] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1193), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1195), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77449] = 9, + ACTIONS(804), 1, + anon_sym_LT_LT, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2066), 1, + sym_file_descriptor, + ACTIONS(2632), 1, + anon_sym_LT_LT_DASH, + ACTIONS(2673), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2677), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2675), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + STATE(1256), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2062), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [77487] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1042), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1044), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77513] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1116), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1118), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77539] = 9, + ACTIONS(804), 1, + anon_sym_LT_LT, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2019), 1, + sym_file_descriptor, + ACTIONS(2632), 1, + anon_sym_LT_LT_DASH, + ACTIONS(2679), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(2683), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(2681), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + STATE(1133), 3, + sym_file_redirect, + sym_heredoc_redirect, + aux_sym_redirected_statement_repeat1, + ACTIONS(2013), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [77577] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1120), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1122), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77603] = 8, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2624), 1, + sym_file_descriptor, + ACTIONS(2350), 2, + anon_sym_PIPE, + anon_sym_LT_LT, + ACTIONS(2607), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1448), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(2352), 3, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT_LT_DASH, + ACTIONS(2605), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(2603), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [77639] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1072), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1070), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77665] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1116), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1118), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77691] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1112), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1114), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77717] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1102), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1104), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77743] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1124), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1126), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77769] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1046), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1048), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77795] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1098), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1100), 11, + sym_file_descriptor, + sym__concat, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + aux_sym_concatenation_token1, + [77821] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(345), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(347), 1, + anon_sym_DOLLAR, + ACTIONS(349), 1, + anon_sym_DQUOTE, + ACTIONS(353), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(355), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(357), 1, + anon_sym_BQUOTE, + ACTIONS(2687), 1, + sym__bare_dollar, + ACTIONS(2685), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(823), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [77860] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(2691), 1, + anon_sym_DOLLAR, + ACTIONS(2693), 1, + sym__bare_dollar, + ACTIONS(2689), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(551), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [77899] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2695), 1, + aux_sym_concatenation_token1, + ACTIONS(2697), 1, + sym__concat, + STATE(1569), 1, + aux_sym_concatenation_repeat1, + ACTIONS(548), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(546), 12, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [77930] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2701), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2703), 1, + anon_sym_DOLLAR, + ACTIONS(2705), 1, + anon_sym_DQUOTE, + ACTIONS(2707), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2709), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2711), 1, + anon_sym_BQUOTE, + ACTIONS(2713), 1, + sym__comment_word, + ACTIONS(2715), 1, + sym__empty_value, + STATE(1503), 1, + sym_concatenation, + ACTIONS(2699), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1405), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [77973] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2721), 1, + anon_sym_DOLLAR, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + ACTIONS(2731), 1, + sym__comment_word, + ACTIONS(2733), 1, + sym__empty_value, + STATE(697), 1, + sym_concatenation, + ACTIONS(2717), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(504), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78016] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2737), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2739), 1, + anon_sym_DOLLAR, + ACTIONS(2741), 1, + anon_sym_DQUOTE, + ACTIONS(2743), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2745), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2747), 1, + anon_sym_BQUOTE, + ACTIONS(2749), 1, + sym__bare_dollar, + ACTIONS(2735), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1177), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78055] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2755), 1, + sym_variable_name, + ACTIONS(2753), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(379), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_AMP, + anon_sym_SEMI, + ACTIONS(2751), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [78084] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(2757), 1, + aux_sym_heredoc_redirect_token1, + STATE(1577), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78127] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(2759), 1, + aux_sym_heredoc_redirect_token1, + STATE(2151), 1, + sym__heredoc_expression, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1609), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [78162] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(2761), 1, + aux_sym_heredoc_redirect_token1, + STATE(1577), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78205] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2721), 1, + anon_sym_DOLLAR, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + ACTIONS(2765), 1, + sym__bare_dollar, + ACTIONS(2763), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(524), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78244] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(61), 1, + anon_sym_DOLLAR, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(2769), 1, + sym__bare_dollar, + ACTIONS(2767), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(380), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78283] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2773), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2775), 1, + anon_sym_DOLLAR, + ACTIONS(2777), 1, + anon_sym_DQUOTE, + ACTIONS(2779), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2781), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2783), 1, + anon_sym_BQUOTE, + ACTIONS(2785), 1, + sym__bare_dollar, + ACTIONS(2771), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1183), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78322] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2789), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2791), 1, + anon_sym_DOLLAR, + ACTIONS(2793), 1, + anon_sym_DQUOTE, + ACTIONS(2795), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2797), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2799), 1, + anon_sym_BQUOTE, + ACTIONS(2801), 1, + sym__comment_word, + ACTIONS(2803), 1, + sym__empty_value, + STATE(695), 1, + sym_concatenation, + ACTIONS(2787), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(336), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78365] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(2805), 1, + aux_sym_heredoc_redirect_token1, + STATE(2130), 1, + sym__heredoc_expression, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1609), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [78400] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2811), 1, + anon_sym_DOLLAR, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2821), 1, + sym__bare_dollar, + ACTIONS(2807), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(992), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78439] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + ACTIONS(2825), 1, + anon_sym_DOLLAR, + ACTIONS(2827), 1, + sym__bare_dollar, + ACTIONS(2823), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1040), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78478] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2701), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2705), 1, + anon_sym_DQUOTE, + ACTIONS(2707), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2709), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2711), 1, + anon_sym_BQUOTE, + ACTIONS(2831), 1, + anon_sym_DOLLAR, + ACTIONS(2833), 1, + sym__bare_dollar, + ACTIONS(2829), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1436), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78517] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(2835), 1, + aux_sym_heredoc_redirect_token1, + STATE(1577), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78560] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2737), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2741), 1, + anon_sym_DQUOTE, + ACTIONS(2743), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2745), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2747), 1, + anon_sym_BQUOTE, + ACTIONS(2749), 1, + sym__bare_dollar, + ACTIONS(2837), 1, + anon_sym_DOLLAR, + ACTIONS(2735), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1177), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78599] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2695), 1, + aux_sym_concatenation_token1, + ACTIONS(2697), 1, + sym__concat, + STATE(1569), 1, + aux_sym_concatenation_repeat1, + ACTIONS(538), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(540), 12, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [78630] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2841), 1, + anon_sym_DOLLAR, + ACTIONS(2843), 1, + sym__comment_word, + ACTIONS(2845), 1, + sym__empty_value, + STATE(1101), 1, + sym_concatenation, + ACTIONS(2839), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1329), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78673] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(461), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(463), 1, + anon_sym_DOLLAR, + ACTIONS(465), 1, + anon_sym_DQUOTE, + ACTIONS(467), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(469), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(471), 1, + anon_sym_BQUOTE, + ACTIONS(2849), 1, + sym__bare_dollar, + ACTIONS(2847), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(477), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78712] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(2851), 1, + aux_sym_heredoc_redirect_token1, + STATE(2161), 1, + sym__heredoc_expression, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1609), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [78747] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2841), 1, + anon_sym_DOLLAR, + ACTIONS(2843), 1, + sym__comment_word, + ACTIONS(2845), 1, + sym__empty_value, + STATE(1101), 1, + sym_concatenation, + ACTIONS(2853), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1090), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78790] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(2855), 1, + aux_sym_heredoc_redirect_token1, + STATE(1577), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78833] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(879), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(883), 1, + anon_sym_DQUOTE, + ACTIONS(885), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(887), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(889), 1, + anon_sym_BQUOTE, + ACTIONS(2859), 1, + anon_sym_DOLLAR, + ACTIONS(2861), 1, + sym__bare_dollar, + ACTIONS(2857), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1227), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78872] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(2863), 1, + aux_sym_heredoc_redirect_token1, + STATE(2166), 1, + sym__heredoc_expression, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1609), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [78907] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(27), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(31), 1, + anon_sym_DQUOTE, + ACTIONS(35), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(37), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(39), 1, + anon_sym_BQUOTE, + ACTIONS(2867), 1, + anon_sym_DOLLAR, + ACTIONS(2869), 1, + sym__bare_dollar, + ACTIONS(2865), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(369), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78946] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(27), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(29), 1, + anon_sym_DOLLAR, + ACTIONS(31), 1, + anon_sym_DQUOTE, + ACTIONS(35), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(37), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(39), 1, + anon_sym_BQUOTE, + ACTIONS(2869), 1, + sym__bare_dollar, + ACTIONS(2865), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(369), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [78985] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2841), 1, + anon_sym_DOLLAR, + ACTIONS(2843), 1, + sym__comment_word, + ACTIONS(2845), 1, + sym__empty_value, + STATE(1101), 1, + sym_concatenation, + ACTIONS(2871), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1082), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79028] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(813), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(817), 1, + anon_sym_DQUOTE, + ACTIONS(819), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(821), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(823), 1, + anon_sym_BQUOTE, + ACTIONS(2875), 1, + anon_sym_DOLLAR, + ACTIONS(2877), 1, + sym__bare_dollar, + ACTIONS(2873), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(607), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79067] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2881), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2883), 1, + anon_sym_DOLLAR, + ACTIONS(2885), 1, + anon_sym_DQUOTE, + ACTIONS(2887), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2889), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2891), 1, + anon_sym_BQUOTE, + ACTIONS(2893), 1, + sym__comment_word, + ACTIONS(2895), 1, + sym__empty_value, + STATE(989), 1, + sym_concatenation, + ACTIONS(2879), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(842), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79110] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(704), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(708), 1, + anon_sym_DQUOTE, + ACTIONS(710), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(712), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(714), 1, + anon_sym_BQUOTE, + ACTIONS(2899), 1, + anon_sym_DOLLAR, + ACTIONS(2901), 1, + sym__bare_dollar, + ACTIONS(2897), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(662), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79149] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2773), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2777), 1, + anon_sym_DQUOTE, + ACTIONS(2779), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2781), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2783), 1, + anon_sym_BQUOTE, + ACTIONS(2785), 1, + sym__bare_dollar, + ACTIONS(2903), 1, + anon_sym_DOLLAR, + ACTIONS(2771), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1183), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79188] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2821), 1, + sym__bare_dollar, + ACTIONS(2905), 1, + anon_sym_DOLLAR, + ACTIONS(2807), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(992), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79227] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + ACTIONS(2827), 1, + sym__bare_dollar, + ACTIONS(2907), 1, + anon_sym_DOLLAR, + ACTIONS(2823), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1040), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79266] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1090), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1094), 10, + sym_file_descriptor, + sym_variable_name, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [79291] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2911), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2913), 1, + anon_sym_DOLLAR, + ACTIONS(2915), 1, + anon_sym_DQUOTE, + ACTIONS(2917), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2919), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2921), 1, + anon_sym_BQUOTE, + ACTIONS(2923), 1, + sym__bare_dollar, + ACTIONS(2909), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(454), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79330] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + ACTIONS(2765), 1, + sym__bare_dollar, + ACTIONS(2925), 1, + anon_sym_DOLLAR, + ACTIONS(2763), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(524), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79369] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1566), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1570), 1, + anon_sym_DQUOTE, + ACTIONS(1572), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1574), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1576), 1, + anon_sym_BQUOTE, + ACTIONS(2929), 1, + anon_sym_DOLLAR, + ACTIONS(2931), 1, + sym__bare_dollar, + ACTIONS(2927), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1450), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79408] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2721), 1, + anon_sym_DOLLAR, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + ACTIONS(2731), 1, + sym__comment_word, + ACTIONS(2733), 1, + sym__empty_value, + STATE(697), 1, + sym_concatenation, + ACTIONS(2933), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(799), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79451] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(479), 1, + anon_sym_DOLLAR, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(2693), 1, + sym__bare_dollar, + ACTIONS(2689), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(551), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79490] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(461), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(465), 1, + anon_sym_DQUOTE, + ACTIONS(467), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(469), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(471), 1, + anon_sym_BQUOTE, + ACTIONS(2849), 1, + sym__bare_dollar, + ACTIONS(2935), 1, + anon_sym_DOLLAR, + ACTIONS(2847), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(477), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79529] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2773), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2777), 1, + anon_sym_DQUOTE, + ACTIONS(2779), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2781), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2783), 1, + anon_sym_BQUOTE, + ACTIONS(2903), 1, + anon_sym_DOLLAR, + ACTIONS(2939), 1, + sym__comment_word, + ACTIONS(2941), 1, + sym__empty_value, + STATE(1341), 1, + sym_concatenation, + ACTIONS(2937), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1092), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79572] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(2075), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(2943), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1998), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79613] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2945), 1, + anon_sym_PIPE, + STATE(1544), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2444), 6, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2440), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [79642] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2821), 1, + sym__bare_dollar, + ACTIONS(2947), 1, + anon_sym_DOLLAR, + ACTIONS(2807), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(992), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79681] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2188), 1, + anon_sym_PIPE, + STATE(1512), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2191), 6, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2186), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [79710] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + ACTIONS(2827), 1, + sym__bare_dollar, + ACTIONS(2949), 1, + anon_sym_DOLLAR, + ACTIONS(2823), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1040), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79749] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(2693), 1, + sym__bare_dollar, + ACTIONS(2951), 1, + anon_sym_DOLLAR, + ACTIONS(2689), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(551), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79788] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + ACTIONS(2765), 1, + sym__bare_dollar, + ACTIONS(2953), 1, + anon_sym_DOLLAR, + ACTIONS(2763), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(524), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79827] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(2769), 1, + sym__bare_dollar, + ACTIONS(2955), 1, + anon_sym_DOLLAR, + ACTIONS(2767), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(380), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79866] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(2769), 1, + sym__bare_dollar, + ACTIONS(2957), 1, + anon_sym_DOLLAR, + ACTIONS(2767), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(380), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79905] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1483), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1487), 1, + anon_sym_DQUOTE, + ACTIONS(1489), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1491), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1493), 1, + anon_sym_BQUOTE, + ACTIONS(2961), 1, + anon_sym_DOLLAR, + ACTIONS(2963), 1, + sym__bare_dollar, + ACTIONS(2959), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(923), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79944] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(813), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(815), 1, + anon_sym_DOLLAR, + ACTIONS(817), 1, + anon_sym_DQUOTE, + ACTIONS(819), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(821), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(823), 1, + anon_sym_BQUOTE, + ACTIONS(2877), 1, + sym__bare_dollar, + ACTIONS(2873), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(607), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [79983] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + ACTIONS(2827), 1, + sym__bare_dollar, + ACTIONS(2965), 1, + anon_sym_DOLLAR, + ACTIONS(2823), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1040), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80022] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(2969), 1, + anon_sym_DOLLAR, + ACTIONS(2971), 1, + sym__bare_dollar, + ACTIONS(2967), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1693), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80061] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1566), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1568), 1, + anon_sym_DOLLAR, + ACTIONS(1570), 1, + anon_sym_DQUOTE, + ACTIONS(1572), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1574), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1576), 1, + anon_sym_BQUOTE, + ACTIONS(2931), 1, + sym__bare_dollar, + ACTIONS(2927), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1450), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80100] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + ACTIONS(2975), 1, + anon_sym_DOLLAR, + ACTIONS(2977), 1, + sym__bare_dollar, + ACTIONS(2973), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(625), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80139] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(497), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(501), 1, + anon_sym_DQUOTE, + ACTIONS(503), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(505), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(507), 1, + anon_sym_BQUOTE, + ACTIONS(2981), 1, + anon_sym_DOLLAR, + ACTIONS(2983), 1, + sym__bare_dollar, + ACTIONS(2979), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(546), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80178] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1483), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1485), 1, + anon_sym_DOLLAR, + ACTIONS(1487), 1, + anon_sym_DQUOTE, + ACTIONS(1489), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1491), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1493), 1, + anon_sym_BQUOTE, + ACTIONS(2963), 1, + sym__bare_dollar, + ACTIONS(2959), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(923), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80217] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(2987), 1, + anon_sym_DOLLAR, + ACTIONS(2989), 1, + sym__bare_dollar, + ACTIONS(2985), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(2074), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80256] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(497), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(499), 1, + anon_sym_DOLLAR, + ACTIONS(501), 1, + anon_sym_DQUOTE, + ACTIONS(503), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(505), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(507), 1, + anon_sym_BQUOTE, + ACTIONS(2983), 1, + sym__bare_dollar, + ACTIONS(2979), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(546), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80295] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(704), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(706), 1, + anon_sym_DOLLAR, + ACTIONS(708), 1, + anon_sym_DQUOTE, + ACTIONS(710), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(712), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(714), 1, + anon_sym_BQUOTE, + ACTIONS(2901), 1, + sym__bare_dollar, + ACTIONS(2897), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(662), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80334] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2737), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2741), 1, + anon_sym_DQUOTE, + ACTIONS(2743), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2745), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2747), 1, + anon_sym_BQUOTE, + ACTIONS(2837), 1, + anon_sym_DOLLAR, + ACTIONS(2993), 1, + sym__comment_word, + ACTIONS(2995), 1, + sym__empty_value, + STATE(1305), 1, + sym_concatenation, + ACTIONS(2991), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1007), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80377] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(2997), 1, + aux_sym_heredoc_redirect_token1, + STATE(1577), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80420] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(2999), 1, + aux_sym_heredoc_redirect_token1, + STATE(2231), 1, + sym__heredoc_expression, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1609), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [80455] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2789), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2793), 1, + anon_sym_DQUOTE, + ACTIONS(2795), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2797), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2799), 1, + anon_sym_BQUOTE, + ACTIONS(3003), 1, + anon_sym_DOLLAR, + ACTIONS(3005), 1, + sym__bare_dollar, + ACTIONS(3001), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(469), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80494] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2701), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2703), 1, + anon_sym_DOLLAR, + ACTIONS(2705), 1, + anon_sym_DQUOTE, + ACTIONS(2707), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2709), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2711), 1, + anon_sym_BQUOTE, + ACTIONS(2833), 1, + sym__bare_dollar, + ACTIONS(2829), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1436), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80533] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(2103), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(3007), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(2037), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80574] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(906), 1, + anon_sym_DOLLAR, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + ACTIONS(2827), 1, + sym__bare_dollar, + ACTIONS(2823), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1040), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80613] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2789), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2791), 1, + anon_sym_DOLLAR, + ACTIONS(2793), 1, + anon_sym_DQUOTE, + ACTIONS(2795), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2797), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2799), 1, + anon_sym_BQUOTE, + ACTIONS(3005), 1, + sym__bare_dollar, + ACTIONS(3001), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(469), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80652] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(969), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(973), 1, + anon_sym_DQUOTE, + ACTIONS(975), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(977), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(979), 1, + anon_sym_BQUOTE, + ACTIONS(3011), 1, + anon_sym_DOLLAR, + ACTIONS(3013), 1, + sym__bare_dollar, + ACTIONS(3009), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(869), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80691] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(2971), 1, + sym__bare_dollar, + ACTIONS(2967), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1693), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80730] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2841), 1, + anon_sym_DOLLAR, + ACTIONS(2843), 1, + sym__comment_word, + ACTIONS(2845), 1, + sym__empty_value, + STATE(1101), 1, + sym_concatenation, + ACTIONS(3015), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1159), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80773] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(59), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(63), 1, + anon_sym_DQUOTE, + ACTIONS(67), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(69), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(71), 1, + anon_sym_BQUOTE, + ACTIONS(2769), 1, + sym__bare_dollar, + ACTIONS(3017), 1, + anon_sym_DOLLAR, + ACTIONS(2767), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(380), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80812] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + ACTIONS(2977), 1, + sym__bare_dollar, + ACTIONS(3019), 1, + anon_sym_DOLLAR, + ACTIONS(2973), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(625), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80851] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3021), 1, + anon_sym_PIPE, + STATE(1544), 1, + aux_sym_pipeline_repeat1, + ACTIONS(2191), 6, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2186), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [80880] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(969), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(971), 1, + anon_sym_DOLLAR, + ACTIONS(973), 1, + anon_sym_DQUOTE, + ACTIONS(975), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(977), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(979), 1, + anon_sym_BQUOTE, + ACTIONS(3013), 1, + sym__bare_dollar, + ACTIONS(3009), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(869), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80919] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + ACTIONS(2765), 1, + sym__bare_dollar, + ACTIONS(3024), 1, + anon_sym_DOLLAR, + ACTIONS(2763), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(524), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80958] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(477), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(481), 1, + anon_sym_DQUOTE, + ACTIONS(483), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(485), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(487), 1, + anon_sym_BQUOTE, + ACTIONS(2693), 1, + sym__bare_dollar, + ACTIONS(3026), 1, + anon_sym_DOLLAR, + ACTIONS(2689), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(551), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [80997] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2881), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2885), 1, + anon_sym_DQUOTE, + ACTIONS(2887), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2889), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2891), 1, + anon_sym_BQUOTE, + ACTIONS(3030), 1, + anon_sym_DOLLAR, + ACTIONS(3032), 1, + sym__bare_dollar, + ACTIONS(3028), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(872), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81036] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(904), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(908), 1, + anon_sym_DQUOTE, + ACTIONS(910), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(912), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(914), 1, + anon_sym_BQUOTE, + ACTIONS(2827), 1, + sym__bare_dollar, + ACTIONS(3034), 1, + anon_sym_DOLLAR, + ACTIONS(2823), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1040), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81075] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(2971), 1, + sym__bare_dollar, + ACTIONS(3036), 1, + anon_sym_DOLLAR, + ACTIONS(2967), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1693), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81114] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2911), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2913), 1, + anon_sym_DOLLAR, + ACTIONS(2915), 1, + anon_sym_DQUOTE, + ACTIONS(2917), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2919), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2921), 1, + anon_sym_BQUOTE, + ACTIONS(3040), 1, + sym__comment_word, + ACTIONS(3042), 1, + sym__empty_value, + STATE(669), 1, + sym_concatenation, + ACTIONS(3038), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(343), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81157] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + ACTIONS(2977), 1, + sym__bare_dollar, + ACTIONS(3044), 1, + anon_sym_DOLLAR, + ACTIONS(2973), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(625), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81196] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2821), 1, + sym__bare_dollar, + ACTIONS(3046), 1, + anon_sym_DOLLAR, + ACTIONS(2807), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(992), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81235] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2881), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2883), 1, + anon_sym_DOLLAR, + ACTIONS(2885), 1, + anon_sym_DQUOTE, + ACTIONS(2887), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2889), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2891), 1, + anon_sym_BQUOTE, + ACTIONS(3032), 1, + sym__bare_dollar, + ACTIONS(3028), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(872), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81274] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2821), 1, + sym__bare_dollar, + ACTIONS(3048), 1, + anon_sym_DOLLAR, + ACTIONS(2807), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(992), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81313] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + ACTIONS(2977), 1, + sym__bare_dollar, + ACTIONS(2973), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(625), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81352] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(879), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(881), 1, + anon_sym_DOLLAR, + ACTIONS(883), 1, + anon_sym_DQUOTE, + ACTIONS(885), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(887), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(889), 1, + anon_sym_BQUOTE, + ACTIONS(2861), 1, + sym__bare_dollar, + ACTIONS(2857), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1227), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81391] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + ACTIONS(3050), 1, + aux_sym_heredoc_redirect_token1, + STATE(1577), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + ACTIONS(847), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81434] = 11, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(1895), 1, + sym_extglob_pattern, + STATE(2095), 2, + sym_concatenation, + sym__extglob_blob, + ACTIONS(3052), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1992), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81475] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(111), 1, + anon_sym_DOLLAR, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(3056), 1, + sym__bare_dollar, + ACTIONS(3054), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(352), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81514] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3060), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3062), 1, + anon_sym_DOLLAR, + ACTIONS(3064), 1, + anon_sym_DQUOTE, + ACTIONS(3066), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3068), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3070), 1, + anon_sym_BQUOTE, + ACTIONS(3072), 1, + sym__bare_dollar, + ACTIONS(3058), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1982), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81553] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(109), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(113), 1, + anon_sym_DQUOTE, + ACTIONS(117), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(119), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(121), 1, + anon_sym_BQUOTE, + ACTIONS(3056), 1, + sym__bare_dollar, + ACTIONS(3074), 1, + anon_sym_DOLLAR, + ACTIONS(3054), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(352), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81592] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2911), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2915), 1, + anon_sym_DQUOTE, + ACTIONS(2917), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2919), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2921), 1, + anon_sym_BQUOTE, + ACTIONS(2923), 1, + sym__bare_dollar, + ACTIONS(3076), 1, + anon_sym_DOLLAR, + ACTIONS(2909), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(454), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81631] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1772), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1774), 1, + anon_sym_DOLLAR, + ACTIONS(1776), 1, + anon_sym_DQUOTE, + ACTIONS(1778), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1780), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1782), 1, + anon_sym_BQUOTE, + ACTIONS(3080), 1, + sym__bare_dollar, + ACTIONS(3078), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1596), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81670] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(345), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(349), 1, + anon_sym_DQUOTE, + ACTIONS(353), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(355), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(357), 1, + anon_sym_BQUOTE, + ACTIONS(2687), 1, + sym__bare_dollar, + ACTIONS(3082), 1, + anon_sym_DOLLAR, + ACTIONS(2685), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(823), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81709] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2841), 1, + anon_sym_DOLLAR, + ACTIONS(2843), 1, + sym__comment_word, + ACTIONS(2845), 1, + sym__empty_value, + STATE(1101), 1, + sym_concatenation, + ACTIONS(3084), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1083), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81752] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(871), 1, + sym_file_descriptor, + ACTIONS(3086), 1, + aux_sym_heredoc_redirect_token1, + STATE(2211), 1, + sym__heredoc_expression, + ACTIONS(851), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(855), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1609), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(853), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [81787] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1709), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1711), 1, + anon_sym_DOLLAR, + ACTIONS(1713), 1, + anon_sym_DQUOTE, + ACTIONS(1715), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1717), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1719), 1, + anon_sym_BQUOTE, + ACTIONS(3090), 1, + sym__bare_dollar, + ACTIONS(3088), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1017), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81826] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2695), 1, + aux_sym_concatenation_token1, + ACTIONS(3092), 1, + sym__concat, + STATE(1571), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(957), 12, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [81857] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1709), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1713), 1, + anon_sym_DQUOTE, + ACTIONS(1715), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1717), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1719), 1, + anon_sym_BQUOTE, + ACTIONS(3090), 1, + sym__bare_dollar, + ACTIONS(3094), 1, + anon_sym_DOLLAR, + ACTIONS(3088), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1017), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81896] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3096), 1, + aux_sym_concatenation_token1, + ACTIONS(3099), 1, + sym__concat, + STATE(1571), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 12, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [81927] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1883), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(2989), 1, + sym__bare_dollar, + ACTIONS(2985), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(2074), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [81966] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1772), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1776), 1, + anon_sym_DQUOTE, + ACTIONS(1778), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1780), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1782), 1, + anon_sym_BQUOTE, + ACTIONS(3080), 1, + sym__bare_dollar, + ACTIONS(3102), 1, + anon_sym_DOLLAR, + ACTIONS(3078), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1596), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82005] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3060), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3064), 1, + anon_sym_DQUOTE, + ACTIONS(3066), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3068), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3070), 1, + anon_sym_BQUOTE, + ACTIONS(3072), 1, + sym__bare_dollar, + ACTIONS(3104), 1, + anon_sym_DOLLAR, + ACTIONS(3058), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(1982), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82044] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2721), 1, + anon_sym_DOLLAR, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + ACTIONS(2731), 1, + sym__comment_word, + ACTIONS(2733), 1, + sym__empty_value, + STATE(697), 1, + sym_concatenation, + ACTIONS(3106), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(322), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82087] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2809), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2813), 1, + anon_sym_DQUOTE, + ACTIONS(2815), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2817), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2819), 1, + anon_sym_BQUOTE, + ACTIONS(2821), 1, + sym__bare_dollar, + ACTIONS(2841), 1, + anon_sym_DOLLAR, + ACTIONS(2807), 5, + aux_sym_concatenation_token1, + sym_raw_string, + sym_number, + sym__comment_word, + sym_word, + STATE(992), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82126] = 12, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3111), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3113), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3116), 1, + anon_sym_DOLLAR, + ACTIONS(3119), 1, + anon_sym_DQUOTE, + ACTIONS(3122), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3125), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3128), 1, + anon_sym_BQUOTE, + STATE(1577), 1, + aux_sym__heredoc_command, + STATE(1953), 1, + sym_concatenation, + ACTIONS(3108), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1788), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82169] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2394), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2392), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [82193] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2336), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2334), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [82217] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3131), 1, + aux_sym_concatenation_token1, + ACTIONS(3134), 1, + sym__concat, + STATE(1580), 1, + aux_sym_concatenation_repeat1, + ACTIONS(983), 13, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [82245] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2911), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2913), 1, + anon_sym_DOLLAR, + ACTIONS(2915), 1, + anon_sym_DQUOTE, + ACTIONS(2917), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2919), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2921), 1, + anon_sym_BQUOTE, + STATE(193), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3137), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(377), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82283] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1193), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [82307] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1042), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [82331] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2911), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2913), 1, + anon_sym_DOLLAR, + ACTIONS(2915), 1, + anon_sym_DQUOTE, + ACTIONS(2917), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2919), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2921), 1, + anon_sym_BQUOTE, + STATE(203), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3137), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(377), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82369] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1046), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [82393] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2721), 1, + anon_sym_DOLLAR, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + STATE(215), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3139), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(458), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82431] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3141), 1, + aux_sym_concatenation_token1, + ACTIONS(3143), 1, + sym__concat, + STATE(1580), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 13, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [82459] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + STATE(1323), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(2479), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1669), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82497] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1072), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [82521] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2773), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2777), 1, + anon_sym_DQUOTE, + ACTIONS(2779), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2781), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2783), 1, + anon_sym_BQUOTE, + ACTIONS(2903), 1, + anon_sym_DOLLAR, + STATE(867), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3145), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1109), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82559] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1058), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [82583] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1086), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [82607] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1709), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1711), 1, + anon_sym_DOLLAR, + ACTIONS(1713), 1, + anon_sym_DQUOTE, + ACTIONS(1715), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1717), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1719), 1, + anon_sym_BQUOTE, + STATE(803), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1707), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(950), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82645] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2721), 1, + anon_sym_DOLLAR, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + STATE(378), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3147), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(795), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82683] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2721), 1, + anon_sym_DOLLAR, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + STATE(353), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3147), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(795), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82721] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [82745] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1098), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [82769] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2773), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2777), 1, + anon_sym_DQUOTE, + ACTIONS(2779), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2781), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2783), 1, + anon_sym_BQUOTE, + ACTIONS(2903), 1, + anon_sym_DOLLAR, + STATE(859), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3145), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1109), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82807] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + STATE(1373), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(2479), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1669), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82845] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1709), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1711), 1, + anon_sym_DOLLAR, + ACTIONS(1713), 1, + anon_sym_DQUOTE, + ACTIONS(1715), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1717), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1719), 1, + anon_sym_BQUOTE, + STATE(801), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1707), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(950), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82883] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1102), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [82907] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2721), 1, + anon_sym_DOLLAR, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + STATE(195), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3149), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(339), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82945] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2721), 1, + anon_sym_DOLLAR, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + STATE(197), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3149), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(339), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [82983] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(859), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(861), 1, + anon_sym_DOLLAR, + ACTIONS(863), 1, + anon_sym_DQUOTE, + ACTIONS(865), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(867), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(869), 1, + anon_sym_BQUOTE, + STATE(1379), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(2479), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1669), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [83021] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(546), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(548), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83045] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1594), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1592), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83069] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1594), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(1592), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83093] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2398), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2396), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83117] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2218), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3157), 1, + sym_file_descriptor, + ACTIONS(2210), 2, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + ACTIONS(3154), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + STATE(1609), 2, + sym_file_redirect, + aux_sym_redirected_statement_repeat2, + ACTIONS(3151), 8, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + [83149] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2225), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2223), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83173] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2257), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2255), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83197] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2283), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2281), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83221] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2386), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2384), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83245] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(443), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1278), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(827), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [83283] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(444), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1278), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(827), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [83321] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2279), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2277), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83345] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2312), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2310), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83369] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2320), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2318), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83393] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2350), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2352), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83417] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2390), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2388), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83441] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2208), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2206), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83465] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2382), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2380), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83489] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2370), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2368), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83513] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2366), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2364), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83537] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2244), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2242), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83561] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2429), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2427), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83585] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2261), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2259), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83609] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2265), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2263), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83633] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2273), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2271), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83657] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2287), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2285), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83681] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2291), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2289), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83705] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2287), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2285), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83729] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2308), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2306), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83753] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2316), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2314), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83777] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2324), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2322), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83801] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2328), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2326), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83825] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2332), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2330), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83849] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(704), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(706), 1, + anon_sym_DOLLAR, + ACTIONS(708), 1, + anon_sym_DQUOTE, + ACTIONS(710), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(712), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(714), 1, + anon_sym_BQUOTE, + STATE(225), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(702), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(447), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [83887] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(540), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(538), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83911] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2336), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2334), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [83935] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(216), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(716), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(600), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [83973] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1112), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [83997] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(217), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(716), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(600), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84035] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(704), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(706), 1, + anon_sym_DOLLAR, + ACTIONS(708), 1, + anon_sym_DQUOTE, + ACTIONS(710), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(712), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(714), 1, + anon_sym_BQUOTE, + STATE(214), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(702), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(447), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84073] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2340), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2338), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84097] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [84121] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2340), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2338), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84145] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2344), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2342), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84169] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2348), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2346), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84193] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(813), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(815), 1, + anon_sym_DOLLAR, + ACTIONS(817), 1, + anon_sym_DQUOTE, + ACTIONS(819), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(821), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(823), 1, + anon_sym_BQUOTE, + STATE(230), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(811), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(506), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84231] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2356), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2354), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84255] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2360), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2358), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84279] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2356), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2354), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84303] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2374), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2372), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84327] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2269), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2267), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84351] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2378), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2376), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84375] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2413), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2411), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84399] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2413), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2411), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84423] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1120), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [84447] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2417), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2415), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84471] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2421), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2419), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84495] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2421), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2419), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84519] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2436), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2434), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84543] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(261), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(873), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(647), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84581] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2425), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2423), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84605] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2425), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2423), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84629] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(2378), 7, + anon_sym_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_LT_LT, + ACTIONS(2376), 9, + sym_file_descriptor, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + anon_sym_LT_LT_DASH, + [84653] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(813), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(815), 1, + anon_sym_DOLLAR, + ACTIONS(817), 1, + anon_sym_DQUOTE, + ACTIONS(819), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(821), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(823), 1, + anon_sym_BQUOTE, + STATE(234), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(811), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(506), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84691] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3141), 1, + aux_sym_concatenation_token1, + ACTIONS(3160), 1, + sym__concat, + STATE(1587), 1, + aux_sym_concatenation_repeat1, + ACTIONS(1172), 13, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [84719] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(250), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(873), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(647), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84757] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [84781] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 3, + sym_file_descriptor, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1124), 13, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + aux_sym_concatenation_token1, + [84805] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1483), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1485), 1, + anon_sym_DOLLAR, + ACTIONS(1487), 1, + anon_sym_DQUOTE, + ACTIONS(1489), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1491), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1493), 1, + anon_sym_BQUOTE, + STATE(651), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1481), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(856), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84843] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1483), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(1485), 1, + anon_sym_DOLLAR, + ACTIONS(1487), 1, + anon_sym_DQUOTE, + ACTIONS(1489), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1491), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1493), 1, + anon_sym_BQUOTE, + STATE(666), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(1481), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(856), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84881] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(246), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(873), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(647), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84919] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2881), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2883), 1, + anon_sym_DOLLAR, + ACTIONS(2885), 1, + anon_sym_DQUOTE, + ACTIONS(2887), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2889), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2891), 1, + anon_sym_BQUOTE, + STATE(558), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3162), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(828), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84957] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(718), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(720), 1, + anon_sym_DOLLAR, + ACTIONS(722), 1, + anon_sym_DQUOTE, + ACTIONS(724), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(726), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(728), 1, + anon_sym_BQUOTE, + STATE(247), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(873), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(647), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [84995] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2881), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2883), 1, + anon_sym_DOLLAR, + ACTIONS(2885), 1, + anon_sym_DQUOTE, + ACTIONS(2887), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2889), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2891), 1, + anon_sym_BQUOTE, + STATE(583), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3162), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(828), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [85033] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2789), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2791), 1, + anon_sym_DOLLAR, + ACTIONS(2793), 1, + anon_sym_DQUOTE, + ACTIONS(2795), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2797), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2799), 1, + anon_sym_BQUOTE, + STATE(205), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3164), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(361), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [85071] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2719), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2721), 1, + anon_sym_DOLLAR, + ACTIONS(2723), 1, + anon_sym_DQUOTE, + ACTIONS(2725), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2727), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2729), 1, + anon_sym_BQUOTE, + STATE(224), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3139), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(458), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [85109] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2789), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(2791), 1, + anon_sym_DOLLAR, + ACTIONS(2793), 1, + anon_sym_DQUOTE, + ACTIONS(2795), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(2797), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(2799), 1, + anon_sym_BQUOTE, + STATE(207), 2, + sym_concatenation, + aux_sym_for_statement_repeat1, + ACTIONS(3164), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(361), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [85147] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 1, + sym__concat, + ACTIONS(1046), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85170] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 1, + sym__concat, + ACTIONS(1042), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85193] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 1, + sym__concat, + ACTIONS(1124), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85216] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 1, + sym__concat, + ACTIONS(1102), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85239] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 1, + sym__concat, + ACTIONS(1086), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85262] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 1, + sym__concat, + ACTIONS(1112), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85285] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 1, + sym__concat, + ACTIONS(1098), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85308] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 1, + sym__concat, + ACTIONS(1116), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85331] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 1, + sym__concat, + ACTIONS(1072), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85354] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 1, + sym__concat, + ACTIONS(1120), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85377] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 1, + sym__concat, + ACTIONS(1116), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85400] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 1, + sym__concat, + ACTIONS(983), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85423] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 1, + sym__concat, + ACTIONS(1193), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85446] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3060), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3064), 1, + anon_sym_DQUOTE, + ACTIONS(3066), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3068), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3070), 1, + anon_sym_BQUOTE, + ACTIONS(3104), 1, + anon_sym_DOLLAR, + STATE(2009), 1, + sym_concatenation, + ACTIONS(3166), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1954), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [85483] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3060), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3064), 1, + anon_sym_DQUOTE, + ACTIONS(3066), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3068), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3070), 1, + anon_sym_BQUOTE, + ACTIONS(3104), 1, + anon_sym_DOLLAR, + STATE(2012), 1, + sym_concatenation, + ACTIONS(3168), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1956), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [85520] = 13, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(3172), 1, + anon_sym_RBRACE, + ACTIONS(3174), 1, + sym_variable_name, + ACTIONS(3176), 1, + sym__expansion_word, + STATE(2276), 1, + sym__concatenation_in_expansion, + ACTIONS(3170), 2, + sym_raw_string, + sym_word, + STATE(2073), 2, + sym_string, + sym_expansion, + STATE(2077), 2, + sym_simple_expansion, + sym_command_substitution, + [85563] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3178), 1, + anon_sym_RBRACE, + ACTIONS(3180), 1, + anon_sym_PERCENT, + STATE(2296), 2, + sym_expansion_expression, + sym_expansion_regex, + ACTIONS(3182), 3, + sym__immediate_double_hash, + anon_sym_POUND, + anon_sym_PERCENT_PERCENT, + ACTIONS(3184), 8, + anon_sym_COLON_DASH, + anon_sym_DASH3, + anon_sym_COLON_EQ, + anon_sym_EQ2, + anon_sym_COLON_QMARK, + anon_sym_QMARK2, + anon_sym_COLON_PLUS, + anon_sym_PLUS3, + [85592] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3180), 1, + anon_sym_PERCENT, + ACTIONS(3186), 1, + anon_sym_RBRACE, + STATE(2297), 2, + sym_expansion_expression, + sym_expansion_regex, + ACTIONS(3182), 3, + sym__immediate_double_hash, + anon_sym_POUND, + anon_sym_PERCENT_PERCENT, + ACTIONS(3184), 8, + anon_sym_COLON_DASH, + anon_sym_DASH3, + anon_sym_COLON_EQ, + anon_sym_EQ2, + anon_sym_COLON_QMARK, + anon_sym_QMARK2, + anon_sym_COLON_PLUS, + anon_sym_PLUS3, + [85621] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3060), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3064), 1, + anon_sym_DQUOTE, + ACTIONS(3066), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3068), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3070), 1, + anon_sym_BQUOTE, + ACTIONS(3104), 1, + anon_sym_DOLLAR, + STATE(1999), 1, + sym_concatenation, + ACTIONS(3188), 3, + sym_raw_string, + sym_number, + sym_word, + STATE(1957), 5, + sym_arithmetic_expansion, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [85658] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 1, + sym__concat, + ACTIONS(1058), 14, + anon_sym_SEMI_SEMI, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + anon_sym_SEMI, + [85681] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3192), 1, + anon_sym_DQUOTE, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85709] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3200), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85737] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3202), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85765] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3204), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85793] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3206), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85821] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3208), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85849] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3210), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85877] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3212), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85905] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3214), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85933] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3216), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85961] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3218), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [85989] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3220), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86017] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3222), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86045] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3224), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86073] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3226), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86101] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3228), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86129] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3230), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86157] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3232), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86185] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3234), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86213] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3236), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86241] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3238), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86269] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3240), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86297] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3242), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86325] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3244), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86353] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(548), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(546), 12, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [86375] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3246), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86403] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3248), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86431] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3250), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86459] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(538), 2, + sym_file_descriptor, + aux_sym_heredoc_redirect_token1, + ACTIONS(540), 12, + anon_sym_AMP_AMP, + anon_sym_PIPE_PIPE, + anon_sym_LT, + anon_sym_GT, + anon_sym_GT_GT, + anon_sym_AMP_GT, + anon_sym_AMP_GT_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + anon_sym_GT_PIPE, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + [86481] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3252), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86509] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3254), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86537] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3256), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86565] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3258), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86593] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3260), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86621] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3262), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86649] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3264), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86677] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3266), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86705] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3268), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86733] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3270), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86761] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3272), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86789] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3274), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86817] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3276), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86845] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3282), 1, + sym_variable_name, + ACTIONS(379), 2, + anon_sym_PIPE, + anon_sym_RPAREN, + ACTIONS(3280), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3278), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86871] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3284), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86899] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3286), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86927] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3288), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86955] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3290), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [86983] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3292), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87011] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3294), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87039] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3296), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87067] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3298), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87095] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3300), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87123] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3302), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87151] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3304), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87179] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3306), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87207] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3308), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87235] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3310), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87263] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3312), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87291] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3314), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87319] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3316), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87347] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3318), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87375] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3320), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87403] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3322), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87431] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3324), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87459] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3326), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87487] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3328), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87515] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3330), 1, + anon_sym_DQUOTE, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [87543] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3332), 1, + anon_sym_RBRACE, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + STATE(2299), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87572] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3342), 1, + anon_sym_RBRACE, + STATE(2193), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87601] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3344), 1, + anon_sym_RBRACE, + STATE(2291), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87630] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3346), 1, + anon_sym_RBRACE, + STATE(2189), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87659] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3348), 1, + anon_sym_RBRACE, + STATE(2200), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87688] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3350), 1, + anon_sym_RBRACE, + STATE(2292), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87717] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3352), 1, + anon_sym_RBRACE, + STATE(2307), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87746] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3354), 1, + anon_sym_RBRACE, + STATE(2309), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87775] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3356), 1, + anon_sym_RBRACE, + STATE(2284), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87804] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3358), 1, + anon_sym_RBRACE, + STATE(2326), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87833] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3360), 1, + anon_sym_RBRACE, + STATE(2198), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87862] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3362), 1, + anon_sym_RBRACE, + STATE(2278), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87891] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3141), 1, + aux_sym_concatenation_token1, + ACTIONS(3364), 1, + sym__concat, + STATE(1580), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 10, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [87916] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3366), 1, + anon_sym_RBRACE, + STATE(2206), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87945] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3368), 1, + anon_sym_RBRACE, + STATE(2279), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [87974] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3370), 1, + anon_sym_RBRACE, + STATE(2150), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88003] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3372), 1, + anon_sym_RBRACE, + STATE(2319), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88032] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3374), 1, + anon_sym_RBRACE, + STATE(2215), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88061] = 9, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1885), 1, + anon_sym_DOLLAR, + ACTIONS(1887), 1, + anon_sym_DQUOTE, + ACTIONS(1889), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(1891), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(1893), 1, + anon_sym_BQUOTE, + ACTIONS(3378), 1, + sym_raw_string, + ACTIONS(3376), 3, + sym_variable_name, + sym__expansion_word, + sym_word, + STATE(2090), 4, + sym_string, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [88094] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3141), 1, + aux_sym_concatenation_token1, + ACTIONS(3160), 1, + sym__concat, + STATE(1781), 1, + aux_sym_concatenation_repeat1, + ACTIONS(3380), 10, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [88119] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3382), 1, + anon_sym_RBRACE, + STATE(2271), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88148] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3384), 1, + anon_sym_RBRACE, + STATE(2183), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88177] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3194), 1, + sym_string_content, + ACTIONS(3198), 1, + sym_variable_name, + ACTIONS(3196), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3190), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [88202] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3386), 1, + anon_sym_RBRACE, + STATE(2209), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88231] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3388), 1, + anon_sym_RBRACE, + STATE(2332), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88260] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3390), 1, + anon_sym_RBRACE, + STATE(2266), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88289] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3392), 1, + anon_sym_RBRACE, + STATE(2220), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88318] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3394), 1, + anon_sym_RBRACE, + STATE(2317), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88347] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3396), 1, + anon_sym_RBRACE, + STATE(2256), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88376] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3398), 1, + anon_sym_RBRACE, + STATE(2329), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88405] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3400), 1, + anon_sym_RBRACE, + STATE(2228), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88434] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3402), 1, + anon_sym_RBRACE, + STATE(2234), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88463] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3404), 1, + anon_sym_RBRACE, + STATE(2227), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88492] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3406), 1, + anon_sym_RBRACE, + STATE(2249), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88521] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3408), 1, + anon_sym_RBRACE, + STATE(2335), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88550] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3410), 1, + anon_sym_RBRACE, + STATE(2242), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88579] = 7, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3336), 1, + aux_sym__simple_variable_name_token1, + ACTIONS(3340), 1, + sym_variable_name, + ACTIONS(3412), 1, + anon_sym_RBRACE, + STATE(2229), 1, + sym__expansion_body, + ACTIONS(3338), 2, + anon_sym_0, + anon_sym__, + ACTIONS(3334), 7, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + [88608] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3416), 1, + anon_sym_DOLLAR, + ACTIONS(3418), 1, + anon_sym_DQUOTE, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + STATE(1874), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [88642] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3432), 1, + sym_variable_name, + ACTIONS(3430), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3428), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [88664] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3440), 1, + anon_sym_LT_LT, + ACTIONS(3442), 1, + anon_sym_LT_LT_DASH, + ACTIONS(3438), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3436), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3434), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [88690] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(393), 1, + sym_variable_name, + ACTIONS(391), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(389), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [88712] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2127), 1, + sym_variable_name, + ACTIONS(2125), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(2123), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [88734] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3444), 1, + anon_sym_DOLLAR, + ACTIONS(3446), 1, + anon_sym_DQUOTE, + STATE(1813), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [88768] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3450), 1, + anon_sym_esac, + ACTIONS(3452), 1, + sym_extglob_pattern, + ACTIONS(3448), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [88790] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3454), 1, + anon_sym_DOLLAR, + ACTIONS(3456), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [88824] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3450), 1, + anon_sym_esac, + ACTIONS(3452), 1, + sym_extglob_pattern, + ACTIONS(3448), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [88846] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3458), 1, + anon_sym_DOLLAR, + ACTIONS(3460), 1, + anon_sym_DQUOTE, + STATE(1843), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [88880] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3464), 1, + anon_sym_esac, + ACTIONS(3466), 1, + sym_extglob_pattern, + ACTIONS(3462), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [88902] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3468), 1, + anon_sym_DOLLAR, + ACTIONS(3470), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [88936] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3474), 1, + anon_sym_esac, + ACTIONS(3476), 1, + sym_extglob_pattern, + ACTIONS(3472), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [88958] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3474), 1, + anon_sym_esac, + ACTIONS(3476), 1, + sym_extglob_pattern, + ACTIONS(3472), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [88980] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(423), 1, + sym_variable_name, + ACTIONS(421), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(419), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [89002] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3478), 1, + anon_sym_DOLLAR, + ACTIONS(3480), 1, + anon_sym_DQUOTE, + STATE(1823), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89036] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3482), 1, + anon_sym_DOLLAR, + ACTIONS(3484), 1, + anon_sym_DQUOTE, + STATE(1817), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89070] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3486), 1, + anon_sym_DOLLAR, + ACTIONS(3488), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89104] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1790), 1, + sym_variable_name, + ACTIONS(1788), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1786), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [89126] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3490), 1, + anon_sym_DOLLAR, + ACTIONS(3492), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89160] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3500), 1, + anon_sym_LT_LT, + ACTIONS(3502), 1, + anon_sym_LT_LT_DASH, + ACTIONS(3498), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3496), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3494), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [89186] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3504), 1, + anon_sym_DOLLAR, + ACTIONS(3506), 1, + anon_sym_DQUOTE, + STATE(1825), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89220] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1426), 1, + sym_variable_name, + ACTIONS(1424), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1422), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [89242] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3282), 1, + sym_variable_name, + ACTIONS(3280), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3278), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [89264] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3508), 1, + anon_sym_DOLLAR, + ACTIONS(3510), 1, + anon_sym_DQUOTE, + STATE(1832), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89298] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3440), 1, + anon_sym_LT_LT, + ACTIONS(3442), 1, + anon_sym_LT_LT_DASH, + ACTIONS(3516), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3514), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3512), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [89324] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3518), 1, + anon_sym_DOLLAR, + ACTIONS(3520), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89358] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3522), 1, + anon_sym_DOLLAR, + ACTIONS(3524), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89392] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(417), 1, + sym_variable_name, + ACTIONS(415), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(413), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [89414] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3526), 1, + anon_sym_DOLLAR, + ACTIONS(3528), 1, + anon_sym_DQUOTE, + STATE(1850), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89448] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3530), 1, + anon_sym_DOLLAR, + ACTIONS(3532), 1, + anon_sym_DQUOTE, + STATE(1833), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89482] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(435), 1, + sym_variable_name, + ACTIONS(433), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(431), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [89504] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3534), 1, + anon_sym_DOLLAR, + ACTIONS(3536), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89538] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3538), 1, + anon_sym_DOLLAR, + ACTIONS(3540), 1, + anon_sym_DQUOTE, + STATE(1838), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89572] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1306), 1, + sym_variable_name, + ACTIONS(1304), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1302), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [89594] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3542), 1, + anon_sym_DOLLAR, + ACTIONS(3544), 1, + anon_sym_DQUOTE, + STATE(1845), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89628] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1262), 1, + sym_variable_name, + ACTIONS(1260), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1258), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [89650] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3546), 1, + anon_sym_DOLLAR, + ACTIONS(3548), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89684] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3550), 1, + anon_sym_DOLLAR, + ACTIONS(3552), 1, + anon_sym_DQUOTE, + STATE(1848), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89718] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3554), 1, + anon_sym_DOLLAR, + ACTIONS(3556), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89752] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3558), 1, + anon_sym_DOLLAR, + ACTIONS(3560), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89786] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3440), 1, + anon_sym_LT_LT, + ACTIONS(3442), 1, + anon_sym_LT_LT_DASH, + ACTIONS(3566), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3564), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3562), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [89812] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3568), 1, + anon_sym_DOLLAR, + ACTIONS(3570), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89846] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3572), 1, + anon_sym_DOLLAR, + ACTIONS(3574), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89880] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3576), 1, + anon_sym_DOLLAR, + ACTIONS(3578), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89914] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3580), 1, + anon_sym_DOLLAR, + ACTIONS(3582), 1, + anon_sym_DQUOTE, + STATE(1849), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [89948] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1806), 1, + sym_variable_name, + ACTIONS(1804), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1802), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [89970] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(631), 1, + sym_variable_name, + ACTIONS(629), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(627), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [89992] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3584), 1, + anon_sym_DOLLAR, + ACTIONS(3586), 1, + anon_sym_DQUOTE, + STATE(1858), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90026] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3588), 1, + anon_sym_DOLLAR, + ACTIONS(3590), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90060] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1276), 1, + sym_extglob_pattern, + ACTIONS(1274), 11, + anon_sym_esac, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [90080] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3592), 1, + anon_sym_DOLLAR, + ACTIONS(3594), 1, + anon_sym_DQUOTE, + STATE(1855), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90114] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3596), 1, + anon_sym_DOLLAR, + ACTIONS(3598), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90148] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(429), 1, + sym_variable_name, + ACTIONS(427), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(425), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [90170] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3600), 1, + anon_sym_DOLLAR, + ACTIONS(3602), 1, + anon_sym_DQUOTE, + STATE(1862), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90204] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3604), 1, + anon_sym_DOLLAR, + ACTIONS(3606), 1, + anon_sym_DQUOTE, + STATE(1878), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90238] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3608), 1, + anon_sym_DOLLAR, + ACTIONS(3610), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90272] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3612), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3615), 1, + anon_sym_DOLLAR, + ACTIONS(3618), 1, + anon_sym_DQUOTE, + ACTIONS(3620), 1, + sym_string_content, + ACTIONS(3623), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3626), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3629), 1, + anon_sym_BQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90306] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3632), 1, + anon_sym_DOLLAR, + ACTIONS(3634), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90340] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3638), 1, + anon_sym_esac, + ACTIONS(3640), 1, + sym_extglob_pattern, + ACTIONS(3636), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [90362] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1207), 1, + sym_variable_name, + ACTIONS(1205), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1203), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [90384] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3642), 1, + anon_sym_DOLLAR, + ACTIONS(3644), 1, + anon_sym_DQUOTE, + STATE(1871), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90418] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3646), 1, + anon_sym_DOLLAR, + ACTIONS(3648), 1, + anon_sym_DQUOTE, + STATE(1864), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90452] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(925), 1, + sym_variable_name, + ACTIONS(923), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(921), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [90474] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3652), 1, + anon_sym_esac, + ACTIONS(3654), 1, + sym_extglob_pattern, + ACTIONS(3650), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [90496] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3656), 1, + anon_sym_DOLLAR, + ACTIONS(3658), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90530] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3440), 1, + anon_sym_LT_LT, + ACTIONS(3442), 1, + anon_sym_LT_LT_DASH, + ACTIONS(3664), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3662), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3660), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [90556] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(2755), 1, + sym_variable_name, + ACTIONS(2753), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(2751), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [90578] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3666), 1, + anon_sym_DOLLAR, + ACTIONS(3668), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90612] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3670), 1, + anon_sym_DOLLAR, + ACTIONS(3672), 1, + anon_sym_DQUOTE, + STATE(1889), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90646] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3676), 1, + anon_sym_esac, + ACTIONS(3678), 1, + sym_extglob_pattern, + ACTIONS(3674), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [90668] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3440), 1, + anon_sym_LT_LT, + ACTIONS(3442), 1, + anon_sym_LT_LT_DASH, + ACTIONS(3684), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3682), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3680), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [90694] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3686), 1, + anon_sym_DOLLAR, + ACTIONS(3688), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90728] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1995), 1, + sym_variable_name, + ACTIONS(1993), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1991), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [90750] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3690), 1, + anon_sym_DOLLAR, + ACTIONS(3692), 1, + anon_sym_DQUOTE, + STATE(1884), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90784] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3694), 1, + anon_sym_DOLLAR, + ACTIONS(3696), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90818] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(441), 1, + sym_variable_name, + ACTIONS(439), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(437), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [90840] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3698), 1, + anon_sym_DOLLAR, + ACTIONS(3700), 1, + anon_sym_DQUOTE, + STATE(1885), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90874] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3702), 1, + anon_sym_DOLLAR, + ACTIONS(3704), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90908] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3706), 1, + anon_sym_DOLLAR, + ACTIONS(3708), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [90942] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(405), 1, + sym_variable_name, + ACTIONS(403), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(401), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [90964] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3716), 1, + anon_sym_LT_LT, + ACTIONS(3718), 1, + anon_sym_LT_LT_DASH, + ACTIONS(3714), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3712), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3710), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [90990] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3722), 1, + anon_sym_esac, + ACTIONS(3724), 1, + sym_extglob_pattern, + ACTIONS(3720), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [91012] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3726), 1, + anon_sym_DOLLAR, + ACTIONS(3728), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91046] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3730), 1, + anon_sym_DOLLAR, + ACTIONS(3732), 1, + anon_sym_DQUOTE, + STATE(1881), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91080] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3722), 1, + anon_sym_esac, + ACTIONS(3724), 1, + sym_extglob_pattern, + ACTIONS(3720), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [91102] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(387), 1, + sym_variable_name, + ACTIONS(383), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(381), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91124] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3734), 1, + anon_sym_DOLLAR, + ACTIONS(3736), 1, + anon_sym_DQUOTE, + STATE(1897), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91158] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3742), 1, + sym_variable_name, + ACTIONS(3740), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3738), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91180] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(447), 1, + sym_variable_name, + ACTIONS(445), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(443), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91202] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3744), 1, + anon_sym_DOLLAR, + ACTIONS(3746), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91236] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3748), 1, + anon_sym_DOLLAR, + ACTIONS(3750), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91270] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3752), 1, + anon_sym_DOLLAR, + ACTIONS(3754), 1, + anon_sym_DQUOTE, + STATE(1915), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91304] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3758), 1, + anon_sym_esac, + ACTIONS(3760), 1, + sym_extglob_pattern, + ACTIONS(3756), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [91326] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3762), 1, + anon_sym_DOLLAR, + ACTIONS(3764), 1, + anon_sym_DQUOTE, + STATE(1896), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91360] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(453), 1, + sym_variable_name, + ACTIONS(451), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(449), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91382] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(411), 1, + sym_variable_name, + ACTIONS(409), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(407), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91404] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3766), 1, + anon_sym_DOLLAR, + ACTIONS(3768), 1, + anon_sym_DQUOTE, + STATE(1908), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91438] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(399), 1, + sym_variable_name, + ACTIONS(397), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(395), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91460] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(937), 1, + sym_variable_name, + ACTIONS(935), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(933), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91482] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3770), 1, + anon_sym_DOLLAR, + ACTIONS(3772), 1, + anon_sym_DQUOTE, + STATE(1910), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91516] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3774), 1, + anon_sym_DOLLAR, + ACTIONS(3776), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91550] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3778), 1, + anon_sym_DOLLAR, + ACTIONS(3780), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91584] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3782), 1, + anon_sym_DOLLAR, + ACTIONS(3784), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91618] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3786), 1, + anon_sym_DOLLAR, + ACTIONS(3788), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91652] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3790), 1, + anon_sym_DOLLAR, + ACTIONS(3792), 1, + anon_sym_DQUOTE, + STATE(1907), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91686] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1408), 1, + sym_variable_name, + ACTIONS(1406), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1404), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91708] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3794), 1, + anon_sym_DOLLAR, + ACTIONS(3796), 1, + anon_sym_DQUOTE, + STATE(1846), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91742] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3798), 1, + anon_sym_DOLLAR, + ACTIONS(3800), 1, + anon_sym_DQUOTE, + STATE(1909), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91776] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3802), 1, + anon_sym_DOLLAR, + ACTIONS(3804), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91810] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1660), 1, + sym_variable_name, + ACTIONS(1658), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(1656), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91832] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3810), 1, + sym_variable_name, + ACTIONS(3808), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(3806), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91854] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(829), 1, + sym_variable_name, + ACTIONS(827), 2, + aux_sym__simple_variable_name_token1, + aux_sym__multiline_variable_name_token1, + ACTIONS(825), 9, + anon_sym_BANG, + anon_sym_DASH, + anon_sym_STAR, + anon_sym_QMARK, + anon_sym_DOLLAR, + anon_sym_POUND, + anon_sym_AT, + anon_sym_0, + anon_sym__, + [91876] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3812), 1, + anon_sym_DOLLAR, + ACTIONS(3814), 1, + anon_sym_DQUOTE, + STATE(1921), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91910] = 4, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3676), 1, + anon_sym_esac, + ACTIONS(3678), 1, + sym_extglob_pattern, + ACTIONS(3674), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [91932] = 10, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3414), 1, + anon_sym_DOLLAR_LPAREN_LPAREN, + ACTIONS(3420), 1, + sym_string_content, + ACTIONS(3422), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3424), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3426), 1, + anon_sym_BQUOTE, + ACTIONS(3816), 1, + anon_sym_DOLLAR, + ACTIONS(3818), 1, + anon_sym_DQUOTE, + STATE(1863), 1, + aux_sym_string_repeat1, + STATE(1963), 4, + sym_arithmetic_expansion, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + [91966] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3724), 1, + sym_extglob_pattern, + ACTIONS(3720), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [91985] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3822), 1, + sym_extglob_pattern, + ACTIONS(3820), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92004] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3466), 1, + sym_extglob_pattern, + ACTIONS(3462), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92023] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3640), 1, + sym_extglob_pattern, + ACTIONS(3636), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92042] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3654), 1, + sym_extglob_pattern, + ACTIONS(3650), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92061] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3476), 1, + sym_extglob_pattern, + ACTIONS(3472), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92080] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3476), 1, + sym_extglob_pattern, + ACTIONS(3472), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92099] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3678), 1, + sym_extglob_pattern, + ACTIONS(3674), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92118] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3678), 1, + sym_extglob_pattern, + ACTIONS(3674), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92137] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3452), 1, + sym_extglob_pattern, + ACTIONS(3448), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92156] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3760), 1, + sym_extglob_pattern, + ACTIONS(3756), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92175] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3452), 1, + sym_extglob_pattern, + ACTIONS(3448), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92194] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3724), 1, + sym_extglob_pattern, + ACTIONS(3720), 10, + anon_sym_LPAREN, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92213] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3714), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3712), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3710), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92233] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3828), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3826), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3824), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92253] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3516), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3514), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3512), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92273] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3834), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3832), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3830), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92293] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3840), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3838), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3836), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92313] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3438), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3436), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3434), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92333] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3846), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3844), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3842), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92353] = 8, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3848), 1, + anon_sym_DOLLAR, + ACTIONS(3850), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3852), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3854), 1, + anon_sym_BQUOTE, + ACTIONS(3856), 1, + sym_heredoc_content, + ACTIONS(3858), 1, + sym_heredoc_end, + STATE(1944), 4, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + aux_sym_heredoc_body_repeat1, + [92381] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3864), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3862), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3860), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92401] = 8, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3848), 1, + anon_sym_DOLLAR, + ACTIONS(3850), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3852), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3854), 1, + anon_sym_BQUOTE, + ACTIONS(3866), 1, + sym_heredoc_content, + ACTIONS(3868), 1, + sym_heredoc_end, + STATE(1945), 4, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + aux_sym_heredoc_body_repeat1, + [92429] = 8, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3870), 1, + anon_sym_DOLLAR, + ACTIONS(3873), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3876), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3879), 1, + anon_sym_BQUOTE, + ACTIONS(3882), 1, + sym_heredoc_content, + ACTIONS(3885), 1, + sym_heredoc_end, + STATE(1945), 4, + sym_simple_expansion, + sym_expansion, + sym_command_substitution, + aux_sym_heredoc_body_repeat1, + [92457] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3891), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3889), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3887), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92477] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3897), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3895), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3893), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92497] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3498), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3496), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3494), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92517] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3566), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3564), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3562), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92537] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3903), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3901), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3899), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92557] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3664), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3662), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3660), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92577] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3684), 2, + anon_sym_LT_AMP_DASH, + anon_sym_GT_AMP_DASH, + ACTIONS(3682), 3, + anon_sym_GT_GT, + anon_sym_AMP_GT_GT, + anon_sym_GT_PIPE, + ACTIONS(3680), 5, + anon_sym_LT, + anon_sym_GT, + anon_sym_AMP_GT, + anon_sym_LT_AMP, + anon_sym_GT_AMP, + [92597] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3380), 10, + aux_sym_heredoc_redirect_token1, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_raw_string, + sym_number, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + sym_word, + [92613] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3905), 1, + anon_sym_in, + ACTIONS(3907), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3909), 1, + aux_sym_concatenation_token1, + ACTIONS(3911), 1, + sym__concat, + STATE(1962), 1, + aux_sym_concatenation_repeat1, + STATE(2176), 1, + sym_terminator, + ACTIONS(2481), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [92640] = 7, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3915), 1, + anon_sym_DQUOTE, + ACTIONS(3917), 1, + anon_sym_DOLLAR_LBRACE, + ACTIONS(3919), 1, + anon_sym_DOLLAR_LPAREN, + ACTIONS(3921), 1, + anon_sym_BQUOTE, + ACTIONS(3913), 2, + anon_sym_PIPE, + anon_sym_RPAREN, + STATE(2081), 3, + sym_string, + sym_expansion, + sym_command_substitution, + [92665] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3907), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3909), 1, + aux_sym_concatenation_token1, + ACTIONS(3911), 1, + sym__concat, + ACTIONS(3923), 1, + anon_sym_in, + STATE(1962), 1, + aux_sym_concatenation_repeat1, + STATE(2132), 1, + sym_terminator, + ACTIONS(2481), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [92692] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3907), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3909), 1, + aux_sym_concatenation_token1, + ACTIONS(3911), 1, + sym__concat, + ACTIONS(3925), 1, + anon_sym_in, + STATE(1962), 1, + aux_sym_concatenation_repeat1, + STATE(2308), 1, + sym_terminator, + ACTIONS(2481), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [92719] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 1, + sym__concat, + ACTIONS(1116), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [92735] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3927), 1, + anon_sym_RPAREN, + ACTIONS(3929), 1, + anon_sym_RBRACE, + ACTIONS(3931), 1, + anon_sym_DQUOTE, + ACTIONS(3933), 1, + sym_raw_string, + ACTIONS(3935), 1, + aux_sym_expansion_regex_token1, + ACTIONS(3937), 1, + sym_regex, + STATE(1972), 2, + sym_string, + aux_sym_expansion_regex_repeat1, + [92761] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3939), 1, + sym__concat, + ACTIONS(3618), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [92777] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 1, + sym__concat, + ACTIONS(1058), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [92793] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(961), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3909), 1, + aux_sym_concatenation_token1, + ACTIONS(3941), 1, + sym__concat, + STATE(1968), 1, + aux_sym_concatenation_repeat1, + ACTIONS(957), 4, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [92815] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3945), 1, + sym__concat, + ACTIONS(3943), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [92831] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 1, + sym__concat, + ACTIONS(1042), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [92847] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 1, + sym__concat, + ACTIONS(1193), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [92863] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 1, + sym__concat, + ACTIONS(1046), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [92879] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 1, + sym__concat, + ACTIONS(1086), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [92895] = 6, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3947), 1, + aux_sym_concatenation_token1, + ACTIONS(3950), 1, + sym__concat, + STATE(1968), 1, + aux_sym_concatenation_repeat1, + ACTIONS(983), 4, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [92917] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 1, + sym__concat, + ACTIONS(1112), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [92933] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 1, + sym__concat, + ACTIONS(1116), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [92949] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3927), 1, + anon_sym_RPAREN, + ACTIONS(3931), 1, + anon_sym_DQUOTE, + ACTIONS(3935), 1, + aux_sym_expansion_regex_token1, + ACTIONS(3953), 1, + anon_sym_RBRACE, + ACTIONS(3955), 1, + sym_raw_string, + ACTIONS(3957), 1, + sym_regex, + STATE(1959), 2, + sym_string, + aux_sym_expansion_regex_repeat1, + [92975] = 8, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3959), 1, + anon_sym_RPAREN, + ACTIONS(3962), 1, + anon_sym_RBRACE, + ACTIONS(3964), 1, + anon_sym_DQUOTE, + ACTIONS(3967), 1, + sym_raw_string, + ACTIONS(3970), 1, + aux_sym_expansion_regex_token1, + ACTIONS(3973), 1, + sym_regex, + STATE(1972), 2, + sym_string, + aux_sym_expansion_regex_repeat1, + [93001] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 1, + sym__concat, + ACTIONS(1120), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [93017] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1124), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93032] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1098), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93047] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1044), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1042), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93062] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1195), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1193), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93077] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1122), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1120), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93092] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1114), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1112), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93107] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3618), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [93120] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1048), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1046), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93135] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(988), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(983), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93150] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3976), 7, + anon_sym_DOLLAR_LPAREN_LPAREN, + anon_sym_DOLLAR, + anon_sym_DQUOTE, + sym_string_content, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [93163] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1072), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93178] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93193] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1118), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1116), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93208] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1056), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1058), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93223] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1102), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93238] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1088), 2, + sym__concat, + aux_sym_heredoc_redirect_token1, + ACTIONS(1086), 5, + anon_sym_in, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + aux_sym_concatenation_token1, + anon_sym_SEMI, + [93253] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3907), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3978), 1, + anon_sym_in, + STATE(2114), 1, + sym_terminator, + ACTIONS(2481), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [93271] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3980), 1, + anon_sym_fi, + ACTIONS(3982), 1, + anon_sym_elif, + ACTIONS(3984), 1, + anon_sym_else, + STATE(2230), 1, + sym_else_clause, + STATE(2065), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + [93291] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(3988), 1, + anon_sym_RPAREN, + STATE(2031), 1, + aux_sym_concatenation_repeat1, + STATE(2092), 1, + aux_sym__case_item_last_repeat1, + ACTIONS(3990), 2, + sym__concat, + aux_sym_concatenation_token1, + [93311] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3907), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3992), 1, + anon_sym_in, + STATE(2106), 1, + sym_terminator, + ACTIONS(2481), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [93329] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1116), 1, + anon_sym_DOLLAR, + ACTIONS(1118), 5, + sym_heredoc_content, + sym_heredoc_end, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [93343] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(3994), 1, + anon_sym_RPAREN, + STATE(2031), 1, + aux_sym_concatenation_repeat1, + STATE(2097), 1, + aux_sym__case_item_last_repeat1, + ACTIONS(3990), 2, + sym__concat, + aux_sym_concatenation_token1, + [93363] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3907), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3996), 1, + anon_sym_in, + STATE(2121), 1, + sym_terminator, + ACTIONS(2481), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [93381] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3982), 1, + anon_sym_elif, + ACTIONS(3984), 1, + anon_sym_else, + ACTIONS(3998), 1, + anon_sym_fi, + STATE(2204), 1, + sym_else_clause, + STATE(2065), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + [93401] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4000), 1, + anon_sym_RPAREN, + STATE(2031), 1, + aux_sym_concatenation_repeat1, + STATE(2098), 1, + aux_sym__case_item_last_repeat1, + ACTIONS(3990), 2, + sym__concat, + aux_sym_concatenation_token1, + [93421] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3907), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3925), 1, + anon_sym_in, + STATE(2308), 1, + sym_terminator, + ACTIONS(2481), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [93439] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1112), 1, + anon_sym_DOLLAR, + ACTIONS(1114), 5, + sym_heredoc_content, + sym_heredoc_end, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [93453] = 3, + ACTIONS(1046), 1, + anon_sym_DOLLAR, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1048), 5, + sym_heredoc_content, + sym_heredoc_end, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [93467] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1126), 2, + sym_regex, + aux_sym_expansion_regex_token1, + ACTIONS(1124), 4, + anon_sym_RPAREN, + anon_sym_RBRACE, + anon_sym_DQUOTE, + sym_raw_string, + [93481] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3982), 1, + anon_sym_elif, + ACTIONS(3984), 1, + anon_sym_else, + ACTIONS(4002), 1, + anon_sym_fi, + STATE(2160), 1, + sym_else_clause, + STATE(2065), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + [93501] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4004), 1, + anon_sym_RPAREN, + STATE(2031), 1, + aux_sym_concatenation_repeat1, + STATE(2085), 1, + aux_sym__case_item_last_repeat1, + ACTIONS(3990), 2, + sym__concat, + aux_sym_concatenation_token1, + [93521] = 3, + ACTIONS(1042), 1, + anon_sym_DOLLAR, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1044), 5, + sym_heredoc_content, + sym_heredoc_end, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [93535] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1120), 1, + anon_sym_DOLLAR, + ACTIONS(1122), 5, + sym_heredoc_content, + sym_heredoc_end, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [93549] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1100), 2, + sym_regex, + aux_sym_expansion_regex_token1, + ACTIONS(1098), 4, + anon_sym_RPAREN, + anon_sym_RBRACE, + anon_sym_DQUOTE, + sym_raw_string, + [93563] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4008), 2, + sym_regex, + aux_sym_expansion_regex_token1, + ACTIONS(4006), 4, + anon_sym_RPAREN, + anon_sym_RBRACE, + anon_sym_DQUOTE, + sym_raw_string, + [93577] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3905), 1, + anon_sym_in, + ACTIONS(3907), 1, + aux_sym_heredoc_redirect_token1, + STATE(2176), 1, + sym_terminator, + ACTIONS(2481), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [93595] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1070), 2, + sym_regex, + aux_sym_expansion_regex_token1, + ACTIONS(1072), 4, + anon_sym_RPAREN, + anon_sym_RBRACE, + anon_sym_DQUOTE, + sym_raw_string, + [93609] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1086), 1, + anon_sym_DOLLAR, + ACTIONS(1088), 5, + sym_heredoc_content, + sym_heredoc_end, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [93623] = 5, + ACTIONS(3), 1, + sym_comment, + ACTIONS(3907), 1, + aux_sym_heredoc_redirect_token1, + ACTIONS(3923), 1, + anon_sym_in, + STATE(2132), 1, + sym_terminator, + ACTIONS(2481), 3, + anon_sym_SEMI_SEMI, + anon_sym_AMP, + anon_sym_SEMI, + [93641] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3982), 1, + anon_sym_elif, + ACTIONS(3984), 1, + anon_sym_else, + ACTIONS(4010), 1, + anon_sym_fi, + STATE(2212), 1, + sym_else_clause, + STATE(2065), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + [93661] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3982), 1, + anon_sym_elif, + ACTIONS(3984), 1, + anon_sym_else, + ACTIONS(4012), 1, + anon_sym_fi, + STATE(2129), 1, + sym_else_clause, + STATE(2065), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + [93681] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3982), 1, + anon_sym_elif, + ACTIONS(3984), 1, + anon_sym_else, + ACTIONS(4014), 1, + anon_sym_fi, + STATE(2182), 1, + sym_else_clause, + STATE(2065), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + [93701] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1116), 1, + anon_sym_DOLLAR, + ACTIONS(1118), 5, + sym_heredoc_content, + sym_heredoc_end, + anon_sym_DOLLAR_LBRACE, + anon_sym_DOLLAR_LPAREN, + anon_sym_BQUOTE, + [93715] = 3, + ACTIONS(3), 1, + sym_comment, + ACTIONS(1104), 2, + sym_regex, + aux_sym_expansion_regex_token1, + ACTIONS(1102), 4, + anon_sym_RPAREN, + anon_sym_RBRACE, + anon_sym_DQUOTE, + sym_raw_string, + [93729] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(2239), 1, + sym_heredoc_body, + STATE(1229), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [93746] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + STATE(1352), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [93763] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1114), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [93774] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1118), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [93785] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1122), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [93796] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1118), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [93807] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(1255), 1, + sym__heredoc_body, + STATE(1262), 1, + sym__simple_heredoc_body, + STATE(2239), 1, + sym_heredoc_body, + [93826] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(1273), 1, + sym__heredoc_body, + STATE(1274), 1, + sym__simple_heredoc_body, + STATE(2239), 1, + sym_heredoc_body, + [93845] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(1661), 1, + sym__heredoc_body, + STATE(1662), 1, + sym__simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + [93864] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(2239), 1, + sym_heredoc_body, + STATE(1254), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [93881] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + STATE(1344), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [93898] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + STATE(1358), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [93915] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(1362), 1, + sym__heredoc_body, + STATE(1363), 1, + sym__simple_heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + [93934] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3990), 1, + aux_sym_concatenation_token1, + ACTIONS(4024), 1, + sym__concat, + STATE(2066), 1, + aux_sym_concatenation_repeat1, + ACTIONS(961), 2, + anon_sym_PIPE, + anon_sym_RPAREN, + [93951] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(1364), 1, + sym__heredoc_body, + STATE(1368), 1, + sym__simple_heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + [93970] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + STATE(1369), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [93987] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + STATE(1394), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94004] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(1385), 1, + sym__simple_heredoc_body, + STATE(1392), 1, + sym__heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + [94023] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(1353), 1, + sym__simple_heredoc_body, + STATE(1367), 1, + sym__heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + [94042] = 4, + ACTIONS(1074), 1, + sym_comment, + STATE(2031), 1, + aux_sym_concatenation_repeat1, + ACTIONS(3990), 2, + sym__concat, + aux_sym_concatenation_token1, + ACTIONS(4026), 2, + anon_sym_PIPE, + anon_sym_RPAREN, + [94057] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(1277), 1, + sym__heredoc_body, + STATE(1278), 1, + sym__simple_heredoc_body, + STATE(2239), 1, + sym_heredoc_body, + [94076] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(1334), 1, + sym__heredoc_body, + STATE(1351), 1, + sym__simple_heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + [94095] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(1346), 1, + sym__simple_heredoc_body, + STATE(1347), 1, + sym__heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + [94114] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(1279), 1, + sym__heredoc_body, + STATE(1280), 1, + sym__simple_heredoc_body, + STATE(2239), 1, + sym_heredoc_body, + [94133] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + STATE(1625), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94150] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + STATE(1660), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94167] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(2239), 1, + sym_heredoc_body, + STATE(1236), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94184] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(1232), 1, + sym__heredoc_body, + STATE(1233), 1, + sym__simple_heredoc_body, + STATE(2239), 1, + sym_heredoc_body, + [94203] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(1230), 1, + sym__heredoc_body, + STATE(1231), 1, + sym__simple_heredoc_body, + STATE(2239), 1, + sym_heredoc_body, + [94222] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(1657), 1, + sym__heredoc_body, + STATE(1658), 1, + sym__simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + [94241] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(1656), 1, + sym__simple_heredoc_body, + STATE(1667), 1, + sym__heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + [94260] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + STATE(1654), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94277] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(2239), 1, + sym_heredoc_body, + STATE(1275), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94294] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1088), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [94305] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1048), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [94316] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1044), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [94327] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1126), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [94338] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(2239), 1, + sym_heredoc_body, + STATE(1224), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94355] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + STATE(1648), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94372] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4020), 1, + sym_simple_heredoc_body, + STATE(2136), 1, + sym_heredoc_body, + STATE(1342), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94389] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(1665), 1, + sym__heredoc_body, + STATE(1666), 1, + sym__simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + [94408] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1104), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [94419] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(1645), 1, + sym__heredoc_body, + STATE(1647), 1, + sym__simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + [94438] = 6, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(1579), 1, + sym__heredoc_body, + STATE(1640), 1, + sym__simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + [94457] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + STATE(1637), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94474] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + ACTIONS(4022), 1, + sym_simple_heredoc_body, + STATE(2167), 1, + sym_heredoc_body, + STATE(1634), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94491] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1100), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [94502] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4030), 1, + anon_sym_elif, + ACTIONS(4028), 2, + anon_sym_fi, + anon_sym_else, + STATE(2065), 2, + sym_elif_clause, + aux_sym_if_statement_repeat1, + [94517] = 4, + ACTIONS(1074), 1, + sym_comment, + STATE(2066), 1, + aux_sym_concatenation_repeat1, + ACTIONS(988), 2, + anon_sym_PIPE, + anon_sym_RPAREN, + ACTIONS(4033), 2, + sym__concat, + aux_sym_concatenation_token1, + [94532] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1070), 5, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [94543] = 5, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4016), 1, + sym_simple_heredoc_body, + ACTIONS(4018), 1, + sym__heredoc_body_beginning, + STATE(2239), 1, + sym_heredoc_body, + STATE(1190), 2, + sym__heredoc_body, + sym__simple_heredoc_body, + [94560] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1195), 4, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + aux_sym_concatenation_token1, + [94570] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1056), 4, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + aux_sym_concatenation_token1, + [94580] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4036), 1, + anon_sym_RBRACE, + STATE(2071), 1, + aux_sym__concatenation_in_expansion_repeat1, + ACTIONS(4038), 2, + sym__concat, + aux_sym_concatenation_token1, + [94594] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4041), 1, + anon_sym_RBRACE, + STATE(2071), 1, + aux_sym__concatenation_in_expansion_repeat1, + ACTIONS(4043), 2, + sym__concat, + aux_sym_concatenation_token1, + [94608] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4045), 1, + anon_sym_RBRACE, + STATE(2072), 1, + aux_sym__concatenation_in_expansion_repeat1, + ACTIONS(4043), 2, + sym__concat, + aux_sym_concatenation_token1, + [94622] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(988), 4, + sym__concat, + anon_sym_PIPE, + anon_sym_RPAREN, + aux_sym_concatenation_token1, + [94632] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4000), 1, + anon_sym_RPAREN, + STATE(2099), 1, + aux_sym__case_item_last_repeat1, + [94645] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1088), 3, + sym_extglob_pattern, + anon_sym_PIPE, + anon_sym_RPAREN, + [94654] = 3, + ACTIONS(1074), 1, + sym_comment, + STATE(2072), 1, + aux_sym__concatenation_in_expansion_repeat1, + ACTIONS(4043), 2, + sym__concat, + aux_sym_concatenation_token1, + [94665] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4004), 1, + anon_sym_RPAREN, + STATE(2087), 1, + aux_sym__case_item_last_repeat1, + [94678] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1118), 3, + sym_extglob_pattern, + anon_sym_PIPE, + anon_sym_RPAREN, + [94687] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1114), 3, + sym_extglob_pattern, + anon_sym_PIPE, + anon_sym_RPAREN, + [94696] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4049), 1, + sym_extglob_pattern, + ACTIONS(4047), 2, + anon_sym_PIPE, + anon_sym_RPAREN, + [94707] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1104), 3, + sym_extglob_pattern, + anon_sym_PIPE, + anon_sym_RPAREN, + [94716] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4051), 1, + anon_sym_RPAREN, + STATE(2094), 1, + aux_sym__case_item_last_repeat1, + [94729] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1126), 3, + sym_extglob_pattern, + anon_sym_PIPE, + anon_sym_RPAREN, + [94738] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4053), 1, + anon_sym_RPAREN, + STATE(2094), 1, + aux_sym__case_item_last_repeat1, + [94751] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1100), 3, + sym_extglob_pattern, + anon_sym_PIPE, + anon_sym_RPAREN, + [94760] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4055), 1, + anon_sym_RPAREN, + STATE(2094), 1, + aux_sym__case_item_last_repeat1, + [94773] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4057), 1, + anon_sym_RPAREN, + STATE(2094), 1, + aux_sym__case_item_last_repeat1, + [94786] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1118), 3, + sym_extglob_pattern, + anon_sym_PIPE, + anon_sym_RPAREN, + [94795] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4036), 3, + sym__concat, + anon_sym_RBRACE, + aux_sym_concatenation_token1, + [94804] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1070), 3, + sym_extglob_pattern, + anon_sym_PIPE, + anon_sym_RPAREN, + [94813] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4059), 1, + anon_sym_RPAREN, + STATE(2094), 1, + aux_sym__case_item_last_repeat1, + [94826] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(3994), 1, + anon_sym_RPAREN, + STATE(2083), 1, + aux_sym__case_item_last_repeat1, + [94839] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4061), 1, + anon_sym_PIPE, + ACTIONS(4064), 1, + anon_sym_RPAREN, + STATE(2094), 1, + aux_sym__case_item_last_repeat1, + [94852] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(3988), 1, + anon_sym_RPAREN, + STATE(2088), 1, + aux_sym__case_item_last_repeat1, + [94865] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1122), 3, + sym_extglob_pattern, + anon_sym_PIPE, + anon_sym_RPAREN, + [94874] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4066), 1, + anon_sym_RPAREN, + STATE(2094), 1, + aux_sym__case_item_last_repeat1, + [94887] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4068), 1, + anon_sym_RPAREN, + STATE(2094), 1, + aux_sym__case_item_last_repeat1, + [94900] = 4, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(3986), 1, + anon_sym_PIPE, + ACTIONS(4070), 1, + anon_sym_RPAREN, + STATE(2094), 1, + aux_sym__case_item_last_repeat1, + [94913] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4072), 1, + anon_sym_esac, + ACTIONS(4074), 1, + anon_sym_SEMI_SEMI, + [94923] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4076), 1, + anon_sym_PIPE, + STATE(1512), 1, + aux_sym_pipeline_repeat1, + [94933] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4078), 2, + anon_sym_PIPE, + anon_sym_RPAREN, + [94941] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4026), 2, + anon_sym_PIPE, + anon_sym_RPAREN, + [94949] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4080), 1, + anon_sym_esac, + ACTIONS(4082), 1, + anon_sym_SEMI_SEMI, + [94959] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4084), 1, + anon_sym_do, + STATE(1626), 1, + sym_do_group, + [94969] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4084), 1, + anon_sym_do, + STATE(1613), 1, + sym_do_group, + [94979] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4086), 1, + anon_sym_esac, + ACTIONS(4088), 1, + anon_sym_SEMI_SEMI, + [94989] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4090), 1, + anon_sym_esac, + ACTIONS(4092), 1, + anon_sym_SEMI_SEMI, + [94999] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4086), 1, + anon_sym_esac, + ACTIONS(4094), 1, + anon_sym_SEMI_SEMI, + [95009] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4096), 1, + anon_sym_esac, + ACTIONS(4098), 1, + anon_sym_SEMI_SEMI, + [95019] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(1276), 2, + anon_sym_in, + anon_sym_do, + [95027] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4090), 1, + anon_sym_esac, + ACTIONS(4100), 1, + anon_sym_SEMI_SEMI, + [95037] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4102), 1, + anon_sym_esac, + ACTIONS(4104), 1, + anon_sym_SEMI_SEMI, + [95047] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4106), 1, + anon_sym_do, + STATE(1259), 1, + sym_do_group, + [95057] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4108), 1, + anon_sym_PIPE, + STATE(1314), 1, + aux_sym_pipeline_repeat1, + [95067] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4110), 1, + anon_sym_PIPE, + STATE(1302), 1, + aux_sym_pipeline_repeat1, + [95077] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4112), 1, + anon_sym_PIPE, + STATE(1355), 1, + aux_sym_pipeline_repeat1, + [95087] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4114), 1, + anon_sym_esac, + ACTIONS(4116), 1, + anon_sym_SEMI_SEMI, + [95097] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4118), 1, + anon_sym_do, + STATE(1331), 1, + sym_do_group, + [95107] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4120), 1, + anon_sym_esac, + ACTIONS(4122), 1, + anon_sym_SEMI_SEMI, + [95117] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4118), 1, + anon_sym_do, + STATE(1391), 1, + sym_do_group, + [95127] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4124), 1, + anon_sym_PIPE, + STATE(1316), 1, + aux_sym_pipeline_repeat1, + [95137] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4126), 1, + anon_sym_PIPE, + STATE(1446), 1, + aux_sym_pipeline_repeat1, + [95147] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4106), 1, + anon_sym_do, + STATE(1282), 1, + sym_do_group, + [95157] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4128), 1, + anon_sym_PIPE, + STATE(1301), 1, + aux_sym_pipeline_repeat1, + [95167] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4114), 1, + anon_sym_esac, + ACTIONS(4130), 1, + anon_sym_SEMI_SEMI, + [95177] = 3, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4120), 1, + anon_sym_esac, + ACTIONS(4132), 1, + anon_sym_SEMI_SEMI, + [95187] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4134), 1, + aux_sym_heredoc_redirect_token1, + [95194] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4136), 1, + anon_sym_fi, + [95201] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4138), 1, + aux_sym_heredoc_redirect_token1, + [95208] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4140), 1, + anon_sym_BQUOTE, + [95215] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4142), 1, + anon_sym_in, + [95222] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4144), 1, + anon_sym_EQ, + [95229] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4146), 1, + anon_sym_esac, + [95236] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4148), 1, + anon_sym_esac, + [95243] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4150), 1, + sym_heredoc_end, + [95250] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4152), 1, + sym_heredoc_end, + [95257] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4154), 1, + anon_sym_EQ, + [95264] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4156), 1, + anon_sym_esac, + [95271] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4158), 1, + anon_sym_RPAREN, + [95278] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4160), 1, + anon_sym_esac, + [95285] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4162), 1, + aux_sym_heredoc_redirect_token1, + [95292] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4164), 1, + anon_sym_EQ, + [95299] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4166), 1, + anon_sym_esac, + [95306] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4168), 1, + anon_sym_esac, + [95313] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4170), 1, + anon_sym_EQ, + [95320] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4172), 1, + aux_sym_heredoc_redirect_token1, + [95327] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4174), 1, + anon_sym_EQ, + [95334] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4176), 1, + anon_sym_EQ, + [95341] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4178), 1, + anon_sym_RBRACE, + [95348] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4180), 1, + aux_sym_heredoc_redirect_token1, + [95355] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4182), 1, + anon_sym_SEMI_SEMI, + [95362] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4184), 1, + anon_sym_esac, + [95369] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4186), 1, + anon_sym_SEMI_SEMI, + [95376] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4188), 1, + aux_sym_heredoc_redirect_token1, + [95383] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4190), 1, + aux_sym_heredoc_redirect_token1, + [95390] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4192), 1, + anon_sym_SEMI_SEMI, + [95397] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4194), 1, + anon_sym_fi, + [95404] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4196), 1, + anon_sym_SEMI_SEMI, + [95411] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4198), 1, + anon_sym_fi, + [95418] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4200), 1, + aux_sym_heredoc_redirect_token1, + [95425] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4202), 1, + anon_sym_SEMI_SEMI, + [95432] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4204), 1, + anon_sym_SEMI_SEMI, + [95439] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4206), 1, + anon_sym_SEMI_SEMI, + [95446] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4208), 1, + sym_heredoc_end, + [95453] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4210), 1, + aux_sym_heredoc_redirect_token1, + [95460] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4212), 1, + sym_heredoc_end, + [95467] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4214), 1, + anon_sym_SEMI_SEMI, + [95474] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4216), 1, + anon_sym_SEMI_SEMI, + [95481] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4218), 1, + anon_sym_SEMI_SEMI, + [95488] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4220), 1, + anon_sym_esac, + [95495] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4222), 1, + anon_sym_SEMI_SEMI, + [95502] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4224), 1, + anon_sym_esac, + [95509] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4226), 1, + anon_sym_esac, + [95516] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4228), 1, + anon_sym_esac, + [95523] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4230), 1, + anon_sym_in, + [95530] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4232), 1, + anon_sym_esac, + [95537] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4234), 1, + aux_sym_heredoc_redirect_token1, + [95544] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4236), 1, + aux_sym_heredoc_redirect_token1, + [95551] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4238), 1, + anon_sym_SEMI_SEMI, + [95558] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4240), 1, + anon_sym_esac, + [95565] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4242), 1, + anon_sym_fi, + [95572] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4244), 1, + anon_sym_RBRACE, + [95579] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4246), 1, + aux_sym_heredoc_redirect_token1, + [95586] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4248), 1, + anon_sym_BQUOTE, + [95593] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4250), 1, + anon_sym_EQ, + [95600] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4252), 1, + anon_sym_BQUOTE, + [95607] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4254), 1, + anon_sym_RPAREN, + [95614] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4256), 1, + anon_sym_RBRACE, + [95621] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4258), 1, + anon_sym_fi, + [95628] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4260), 1, + anon_sym_BQUOTE, + [95635] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4262), 1, + anon_sym_RPAREN, + [95642] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4264), 1, + anon_sym_RBRACE, + [95649] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4266), 1, + anon_sym_esac, + [95656] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4268), 1, + anon_sym_esac, + [95663] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4270), 1, + anon_sym_BQUOTE, + [95670] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4272), 1, + anon_sym_RPAREN, + [95677] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4274), 1, + anon_sym_RBRACE, + [95684] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4276), 1, + anon_sym_fi, + [95691] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4278), 1, + anon_sym_RBRACE, + [95698] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4280), 1, + anon_sym_BQUOTE, + [95705] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4282), 1, + aux_sym__simple_variable_name_token1, + [95712] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4284), 1, + anon_sym_RPAREN, + [95719] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4286), 1, + anon_sym_fi, + [95726] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4288), 1, + sym_heredoc_start, + [95733] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4290), 1, + anon_sym_RBRACE, + [95740] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4292), 1, + sym_heredoc_start, + [95747] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4294), 1, + anon_sym_RPAREN, + [95754] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4296), 1, + anon_sym_RBRACE, + [95761] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4298), 1, + anon_sym_RPAREN, + [95768] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4300), 1, + aux_sym_heredoc_redirect_token1, + [95775] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4302), 1, + anon_sym_fi, + [95782] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4304), 1, + anon_sym_BQUOTE, + [95789] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4306), 1, + anon_sym_RPAREN, + [95796] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4308), 1, + anon_sym_RBRACE, + [95803] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4310), 1, + anon_sym_BQUOTE, + [95810] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4312), 1, + anon_sym_RPAREN, + [95817] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4314), 1, + anon_sym_esac, + [95824] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4316), 1, + anon_sym_esac, + [95831] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4318), 1, + anon_sym_RBRACE, + [95838] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4320), 1, + anon_sym_RPAREN, + [95845] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4322), 1, + anon_sym_esac, + [95852] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4324), 1, + anon_sym_BQUOTE, + [95859] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4326), 1, + anon_sym_BQUOTE, + [95866] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4328), 1, + anon_sym_RPAREN, + [95873] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4330), 1, + anon_sym_RPAREN, + [95880] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4332), 1, + anon_sym_RBRACE, + [95887] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4334), 1, + anon_sym_RBRACE, + [95894] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4336), 1, + anon_sym_RBRACE, + [95901] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4338), 1, + anon_sym_fi, + [95908] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4340), 1, + aux_sym_heredoc_redirect_token1, + [95915] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4342), 1, + anon_sym_BQUOTE, + [95922] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4344), 1, + anon_sym_RPAREN, + [95929] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4346), 1, + anon_sym_RBRACE, + [95936] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4348), 1, + anon_sym_BQUOTE, + [95943] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4350), 1, + anon_sym_RPAREN, + [95950] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4352), 1, + anon_sym_BQUOTE, + [95957] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4354), 1, + anon_sym_BQUOTE, + [95964] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4356), 1, + sym_heredoc_end, + [95971] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4358), 1, + anon_sym_RPAREN, + [95978] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4360), 1, + anon_sym_RPAREN, + [95985] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4362), 1, + anon_sym_RBRACE, + [95992] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4364), 1, + sym_heredoc_end, + [95999] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4366), 1, + aux_sym_heredoc_redirect_token1, + [96006] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4368), 1, + aux_sym_heredoc_redirect_token1, + [96013] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4370), 1, + anon_sym_RPAREN, + [96020] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4372), 1, + anon_sym_RPAREN, + [96027] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4374), 1, + anon_sym_BQUOTE, + [96034] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4376), 1, + anon_sym_RBRACE, + [96041] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4378), 1, + anon_sym_EQ, + [96048] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4380), 1, + anon_sym_EQ, + [96055] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4382), 1, + aux_sym__simple_variable_name_token1, + [96062] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4384), 1, + anon_sym_RPAREN, + [96069] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4386), 1, + anon_sym_esac, + [96076] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4388), 1, + sym_heredoc_start, + [96083] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4390), 1, + anon_sym_RBRACE, + [96090] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4392), 1, + sym_heredoc_start, + [96097] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4394), 1, + anon_sym_esac, + [96104] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4396), 1, + anon_sym_esac, + [96111] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4398), 1, + anon_sym_esac, + [96118] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4400), 1, + anon_sym_RPAREN, + [96125] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4402), 1, + anon_sym_BQUOTE, + [96132] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4404), 1, + anon_sym_BQUOTE, + [96139] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4406), 1, + anon_sym_RPAREN, + [96146] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4408), 1, + anon_sym_RPAREN, + [96153] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4410), 1, + anon_sym_RBRACE, + [96160] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4412), 1, + anon_sym_RPAREN, + [96167] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4414), 1, + anon_sym_BQUOTE, + [96174] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4416), 1, + anon_sym_fi, + [96181] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4418), 1, + anon_sym_RPAREN, + [96188] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4420), 1, + anon_sym_RBRACE, + [96195] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4422), 1, + aux_sym_heredoc_redirect_token1, + [96202] = 2, + ACTIONS(3), 1, + sym_comment, + ACTIONS(4424), 1, + aux_sym_heredoc_redirect_token1, + [96209] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4426), 1, + anon_sym_BQUOTE, + [96216] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4428), 1, + anon_sym_BQUOTE, + [96223] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4045), 1, + anon_sym_RBRACE, + [96230] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4430), 1, + anon_sym_RPAREN, + [96237] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4432), 1, + anon_sym_RBRACE, + [96244] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4434), 1, + anon_sym_RBRACE, + [96251] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4436), 1, + anon_sym_RPAREN, + [96258] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4438), 1, + anon_sym_esac, + [96265] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4440), 1, + anon_sym_BQUOTE, + [96272] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4442), 1, + anon_sym_RPAREN, + [96279] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4444), 1, + anon_sym_RBRACE, + [96286] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4446), 1, + anon_sym_BQUOTE, + [96293] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4448), 1, + anon_sym_BQUOTE, + [96300] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4450), 1, + anon_sym_esac, + [96307] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4452), 1, + anon_sym_fi, + [96314] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4454), 1, + anon_sym_RPAREN, + [96321] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4456), 1, + anon_sym_RPAREN, + [96328] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4458), 1, + anon_sym_RBRACE, + [96335] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4460), 1, + anon_sym_RBRACE, + [96342] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4462), 1, + anon_sym_BQUOTE, + [96349] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4464), 1, + anon_sym_fi, + [96356] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4466), 1, + sym_heredoc_start, + [96363] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4468), 1, + anon_sym_RBRACE, + [96370] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4470), 1, + anon_sym_RBRACE, + [96377] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4472), 1, + anon_sym_RPAREN, + [96384] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4474), 1, + anon_sym_RBRACE, + [96391] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4476), 1, + anon_sym_EQ, + [96398] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4478), 1, + anon_sym_EQ, + [96405] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4480), 1, + anon_sym_RPAREN, + [96412] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4482), 1, + anon_sym_BQUOTE, + [96419] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4484), 1, + anon_sym_BQUOTE, + [96426] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4486), 1, + anon_sym_RPAREN, + [96433] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4488), 1, + anon_sym_EQ, + [96440] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4490), 1, + anon_sym_RBRACE, + [96447] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4492), 1, + anon_sym_in, + [96454] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4494), 1, + anon_sym_RBRACE, + [96461] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4496), 1, + anon_sym_BQUOTE, + [96468] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4498), 1, + anon_sym_EQ, + [96475] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4500), 1, + sym_heredoc_start, + [96482] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4502), 1, + anon_sym_RPAREN, + [96489] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4504), 1, + anon_sym_RPAREN, + [96496] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4506), 1, + anon_sym_BQUOTE, + [96503] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4508), 1, + anon_sym_RPAREN, + [96510] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4510), 1, + anon_sym_RBRACE, + [96517] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4512), 1, + anon_sym_RPAREN, + [96524] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4514), 1, + anon_sym_RBRACE, + [96531] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4516), 1, + anon_sym_RPAREN, + [96538] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4518), 1, + anon_sym_BQUOTE, + [96545] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4520), 1, + anon_sym_BQUOTE, + [96552] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4522), 1, + anon_sym_RPAREN, + [96559] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4524), 1, + anon_sym_RPAREN, + [96566] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4526), 1, + anon_sym_RPAREN, + [96573] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4528), 1, + anon_sym_RBRACE, + [96580] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4530), 1, + anon_sym_BQUOTE, + [96587] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4532), 1, + anon_sym_RPAREN, + [96594] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4534), 1, + anon_sym_RBRACE, + [96601] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4536), 1, + ts_builtin_sym_end, + [96608] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4538), 1, + ts_builtin_sym_end, + [96615] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4540), 1, + anon_sym_RBRACE, + [96622] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4542), 1, + anon_sym_BQUOTE, + [96629] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4544), 1, + anon_sym_RPAREN, + [96636] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4546), 1, + anon_sym_RBRACE, + [96643] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4548), 1, + anon_sym_BQUOTE, + [96650] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4550), 1, + anon_sym_RPAREN, + [96657] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4552), 1, + aux_sym__simple_variable_name_token1, + [96664] = 2, + ACTIONS(1074), 1, + sym_comment, + ACTIONS(4554), 1, + anon_sym_EQ, +}; + +static const uint32_t ts_small_parse_table_map[] = { + [SMALL_STATE(2)] = 0, + [SMALL_STATE(3)] = 135, + [SMALL_STATE(4)] = 270, + [SMALL_STATE(5)] = 405, + [SMALL_STATE(6)] = 540, + [SMALL_STATE(7)] = 675, + [SMALL_STATE(8)] = 810, + [SMALL_STATE(9)] = 938, + [SMALL_STATE(10)] = 1066, + [SMALL_STATE(11)] = 1194, + [SMALL_STATE(12)] = 1322, + [SMALL_STATE(13)] = 1450, + [SMALL_STATE(14)] = 1578, + [SMALL_STATE(15)] = 1706, + [SMALL_STATE(16)] = 1834, + [SMALL_STATE(17)] = 1962, + [SMALL_STATE(18)] = 2090, + [SMALL_STATE(19)] = 2218, + [SMALL_STATE(20)] = 2346, + [SMALL_STATE(21)] = 2474, + [SMALL_STATE(22)] = 2602, + [SMALL_STATE(23)] = 2730, + [SMALL_STATE(24)] = 2858, + [SMALL_STATE(25)] = 2982, + [SMALL_STATE(26)] = 3110, + [SMALL_STATE(27)] = 3238, + [SMALL_STATE(28)] = 3362, + [SMALL_STATE(29)] = 3490, + [SMALL_STATE(30)] = 3618, + [SMALL_STATE(31)] = 3746, + [SMALL_STATE(32)] = 3874, + [SMALL_STATE(33)] = 3998, + [SMALL_STATE(34)] = 4126, + [SMALL_STATE(35)] = 4254, + [SMALL_STATE(36)] = 4379, + [SMALL_STATE(37)] = 4502, + [SMALL_STATE(38)] = 4627, + [SMALL_STATE(39)] = 4752, + [SMALL_STATE(40)] = 4874, + [SMALL_STATE(41)] = 4996, + [SMALL_STATE(42)] = 5118, + [SMALL_STATE(43)] = 5240, + [SMALL_STATE(44)] = 5362, + [SMALL_STATE(45)] = 5484, + [SMALL_STATE(46)] = 5606, + [SMALL_STATE(47)] = 5728, + [SMALL_STATE(48)] = 5850, + [SMALL_STATE(49)] = 5972, + [SMALL_STATE(50)] = 6094, + [SMALL_STATE(51)] = 6216, + [SMALL_STATE(52)] = 6338, + [SMALL_STATE(53)] = 6460, + [SMALL_STATE(54)] = 6582, + [SMALL_STATE(55)] = 6704, + [SMALL_STATE(56)] = 6826, + [SMALL_STATE(57)] = 6948, + [SMALL_STATE(58)] = 7070, + [SMALL_STATE(59)] = 7192, + [SMALL_STATE(60)] = 7314, + [SMALL_STATE(61)] = 7436, + [SMALL_STATE(62)] = 7558, + [SMALL_STATE(63)] = 7680, + [SMALL_STATE(64)] = 7802, + [SMALL_STATE(65)] = 7924, + [SMALL_STATE(66)] = 8046, + [SMALL_STATE(67)] = 8168, + [SMALL_STATE(68)] = 8290, + [SMALL_STATE(69)] = 8412, + [SMALL_STATE(70)] = 8534, + [SMALL_STATE(71)] = 8656, + [SMALL_STATE(72)] = 8778, + [SMALL_STATE(73)] = 8900, + [SMALL_STATE(74)] = 9022, + [SMALL_STATE(75)] = 9144, + [SMALL_STATE(76)] = 9266, + [SMALL_STATE(77)] = 9388, + [SMALL_STATE(78)] = 9510, + [SMALL_STATE(79)] = 9632, + [SMALL_STATE(80)] = 9754, + [SMALL_STATE(81)] = 9876, + [SMALL_STATE(82)] = 9998, + [SMALL_STATE(83)] = 10120, + [SMALL_STATE(84)] = 10242, + [SMALL_STATE(85)] = 10364, + [SMALL_STATE(86)] = 10486, + [SMALL_STATE(87)] = 10608, + [SMALL_STATE(88)] = 10730, + [SMALL_STATE(89)] = 10852, + [SMALL_STATE(90)] = 10974, + [SMALL_STATE(91)] = 11096, + [SMALL_STATE(92)] = 11218, + [SMALL_STATE(93)] = 11340, + [SMALL_STATE(94)] = 11462, + [SMALL_STATE(95)] = 11584, + [SMALL_STATE(96)] = 11706, + [SMALL_STATE(97)] = 11828, + [SMALL_STATE(98)] = 11950, + [SMALL_STATE(99)] = 12072, + [SMALL_STATE(100)] = 12194, + [SMALL_STATE(101)] = 12316, + [SMALL_STATE(102)] = 12438, + [SMALL_STATE(103)] = 12560, + [SMALL_STATE(104)] = 12682, + [SMALL_STATE(105)] = 12804, + [SMALL_STATE(106)] = 12926, + [SMALL_STATE(107)] = 13048, + [SMALL_STATE(108)] = 13170, + [SMALL_STATE(109)] = 13292, + [SMALL_STATE(110)] = 13414, + [SMALL_STATE(111)] = 13536, + [SMALL_STATE(112)] = 13658, + [SMALL_STATE(113)] = 13780, + [SMALL_STATE(114)] = 13902, + [SMALL_STATE(115)] = 14024, + [SMALL_STATE(116)] = 14146, + [SMALL_STATE(117)] = 14268, + [SMALL_STATE(118)] = 14390, + [SMALL_STATE(119)] = 14512, + [SMALL_STATE(120)] = 14634, + [SMALL_STATE(121)] = 14756, + [SMALL_STATE(122)] = 14878, + [SMALL_STATE(123)] = 15000, + [SMALL_STATE(124)] = 15122, + [SMALL_STATE(125)] = 15244, + [SMALL_STATE(126)] = 15366, + [SMALL_STATE(127)] = 15485, + [SMALL_STATE(128)] = 15604, + [SMALL_STATE(129)] = 15723, + [SMALL_STATE(130)] = 15864, + [SMALL_STATE(131)] = 16005, + [SMALL_STATE(132)] = 16124, + [SMALL_STATE(133)] = 16243, + [SMALL_STATE(134)] = 16384, + [SMALL_STATE(135)] = 16525, + [SMALL_STATE(136)] = 16644, + [SMALL_STATE(137)] = 16763, + [SMALL_STATE(138)] = 16882, + [SMALL_STATE(139)] = 17023, + [SMALL_STATE(140)] = 17142, + [SMALL_STATE(141)] = 17261, + [SMALL_STATE(142)] = 17380, + [SMALL_STATE(143)] = 17496, + [SMALL_STATE(144)] = 17610, + [SMALL_STATE(145)] = 17726, + [SMALL_STATE(146)] = 17842, + [SMALL_STATE(147)] = 17958, + [SMALL_STATE(148)] = 18072, + [SMALL_STATE(149)] = 18188, + [SMALL_STATE(150)] = 18302, + [SMALL_STATE(151)] = 18416, + [SMALL_STATE(152)] = 18530, + [SMALL_STATE(153)] = 18646, + [SMALL_STATE(154)] = 18762, + [SMALL_STATE(155)] = 18876, + [SMALL_STATE(156)] = 18992, + [SMALL_STATE(157)] = 19106, + [SMALL_STATE(158)] = 19222, + [SMALL_STATE(159)] = 19319, + [SMALL_STATE(160)] = 19416, + [SMALL_STATE(161)] = 19513, + [SMALL_STATE(162)] = 19610, + [SMALL_STATE(163)] = 19707, + [SMALL_STATE(164)] = 19804, + [SMALL_STATE(165)] = 19901, + [SMALL_STATE(166)] = 19958, + [SMALL_STATE(167)] = 20015, + [SMALL_STATE(168)] = 20072, + [SMALL_STATE(169)] = 20128, + [SMALL_STATE(170)] = 20184, + [SMALL_STATE(171)] = 20240, + [SMALL_STATE(172)] = 20296, + [SMALL_STATE(173)] = 20351, + [SMALL_STATE(174)] = 20406, + [SMALL_STATE(175)] = 20461, + [SMALL_STATE(176)] = 20516, + [SMALL_STATE(177)] = 20571, + [SMALL_STATE(178)] = 20626, + [SMALL_STATE(179)] = 20681, + [SMALL_STATE(180)] = 20755, + [SMALL_STATE(181)] = 20829, + [SMALL_STATE(182)] = 20883, + [SMALL_STATE(183)] = 20937, + [SMALL_STATE(184)] = 21011, + [SMALL_STATE(185)] = 21085, + [SMALL_STATE(186)] = 21159, + [SMALL_STATE(187)] = 21233, + [SMALL_STATE(188)] = 21304, + [SMALL_STATE(189)] = 21357, + [SMALL_STATE(190)] = 21428, + [SMALL_STATE(191)] = 21501, + [SMALL_STATE(192)] = 21574, + [SMALL_STATE(193)] = 21638, + [SMALL_STATE(194)] = 21688, + [SMALL_STATE(195)] = 21756, + [SMALL_STATE(196)] = 21806, + [SMALL_STATE(197)] = 21874, + [SMALL_STATE(198)] = 21924, + [SMALL_STATE(199)] = 21992, + [SMALL_STATE(200)] = 22060, + [SMALL_STATE(201)] = 22128, + [SMALL_STATE(202)] = 22196, + [SMALL_STATE(203)] = 22264, + [SMALL_STATE(204)] = 22314, + [SMALL_STATE(205)] = 22366, + [SMALL_STATE(206)] = 22416, + [SMALL_STATE(207)] = 22484, + [SMALL_STATE(208)] = 22534, + [SMALL_STATE(209)] = 22598, + [SMALL_STATE(210)] = 22650, + [SMALL_STATE(211)] = 22718, + [SMALL_STATE(212)] = 22782, + [SMALL_STATE(213)] = 22845, + [SMALL_STATE(214)] = 22908, + [SMALL_STATE(215)] = 22971, + [SMALL_STATE(216)] = 23020, + [SMALL_STATE(217)] = 23083, + [SMALL_STATE(218)] = 23146, + [SMALL_STATE(219)] = 23213, + [SMALL_STATE(220)] = 23280, + [SMALL_STATE(221)] = 23343, + [SMALL_STATE(222)] = 23392, + [SMALL_STATE(223)] = 23441, + [SMALL_STATE(224)] = 23490, + [SMALL_STATE(225)] = 23539, + [SMALL_STATE(226)] = 23602, + [SMALL_STATE(227)] = 23665, + [SMALL_STATE(228)] = 23728, + [SMALL_STATE(229)] = 23791, + [SMALL_STATE(230)] = 23854, + [SMALL_STATE(231)] = 23917, + [SMALL_STATE(232)] = 23968, + [SMALL_STATE(233)] = 24019, + [SMALL_STATE(234)] = 24068, + [SMALL_STATE(235)] = 24131, + [SMALL_STATE(236)] = 24194, + [SMALL_STATE(237)] = 24257, + [SMALL_STATE(238)] = 24308, + [SMALL_STATE(239)] = 24371, + [SMALL_STATE(240)] = 24436, + [SMALL_STATE(241)] = 24485, + [SMALL_STATE(242)] = 24534, + [SMALL_STATE(243)] = 24599, + [SMALL_STATE(244)] = 24666, + [SMALL_STATE(245)] = 24728, + [SMALL_STATE(246)] = 24806, + [SMALL_STATE(247)] = 24866, + [SMALL_STATE(248)] = 24926, + [SMALL_STATE(249)] = 24978, + [SMALL_STATE(250)] = 25040, + [SMALL_STATE(251)] = 25102, + [SMALL_STATE(252)] = 25172, + [SMALL_STATE(253)] = 25232, + [SMALL_STATE(254)] = 25294, + [SMALL_STATE(255)] = 25346, + [SMALL_STATE(256)] = 25408, + [SMALL_STATE(257)] = 25468, + [SMALL_STATE(258)] = 25522, + [SMALL_STATE(259)] = 25584, + [SMALL_STATE(260)] = 25654, + [SMALL_STATE(261)] = 25716, + [SMALL_STATE(262)] = 25778, + [SMALL_STATE(263)] = 25840, + [SMALL_STATE(264)] = 25902, + [SMALL_STATE(265)] = 25950, + [SMALL_STATE(266)] = 26000, + [SMALL_STATE(267)] = 26056, + [SMALL_STATE(268)] = 26110, + [SMALL_STATE(269)] = 26172, + [SMALL_STATE(270)] = 26250, + [SMALL_STATE(271)] = 26300, + [SMALL_STATE(272)] = 26348, + [SMALL_STATE(273)] = 26410, + [SMALL_STATE(274)] = 26488, + [SMALL_STATE(275)] = 26566, + [SMALL_STATE(276)] = 26644, + [SMALL_STATE(277)] = 26696, + [SMALL_STATE(278)] = 26756, + [SMALL_STATE(279)] = 26834, + [SMALL_STATE(280)] = 26894, + [SMALL_STATE(281)] = 26954, + [SMALL_STATE(282)] = 27014, + [SMALL_STATE(283)] = 27076, + [SMALL_STATE(284)] = 27125, + [SMALL_STATE(285)] = 27184, + [SMALL_STATE(286)] = 27253, + [SMALL_STATE(287)] = 27302, + [SMALL_STATE(288)] = 27371, + [SMALL_STATE(289)] = 27422, + [SMALL_STATE(290)] = 27471, + [SMALL_STATE(291)] = 27532, + [SMALL_STATE(292)] = 27581, + [SMALL_STATE(293)] = 27632, + [SMALL_STATE(294)] = 27681, + [SMALL_STATE(295)] = 27730, + [SMALL_STATE(296)] = 27781, + [SMALL_STATE(297)] = 27834, + [SMALL_STATE(298)] = 27883, + [SMALL_STATE(299)] = 27936, + [SMALL_STATE(300)] = 27985, + [SMALL_STATE(301)] = 28034, + [SMALL_STATE(302)] = 28085, + [SMALL_STATE(303)] = 28136, + [SMALL_STATE(304)] = 28197, + [SMALL_STATE(305)] = 28256, + [SMALL_STATE(306)] = 28304, + [SMALL_STATE(307)] = 28368, + [SMALL_STATE(308)] = 28410, + [SMALL_STATE(309)] = 28452, + [SMALL_STATE(310)] = 28500, + [SMALL_STATE(311)] = 28542, + [SMALL_STATE(312)] = 28590, + [SMALL_STATE(313)] = 28668, + [SMALL_STATE(314)] = 28710, + [SMALL_STATE(315)] = 28752, + [SMALL_STATE(316)] = 28794, + [SMALL_STATE(317)] = 28836, + [SMALL_STATE(318)] = 28878, + [SMALL_STATE(319)] = 28920, + [SMALL_STATE(320)] = 28968, + [SMALL_STATE(321)] = 29016, + [SMALL_STATE(322)] = 29058, + [SMALL_STATE(323)] = 29106, + [SMALL_STATE(324)] = 29148, + [SMALL_STATE(325)] = 29190, + [SMALL_STATE(326)] = 29238, + [SMALL_STATE(327)] = 29280, + [SMALL_STATE(328)] = 29328, + [SMALL_STATE(329)] = 29370, + [SMALL_STATE(330)] = 29412, + [SMALL_STATE(331)] = 29454, + [SMALL_STATE(332)] = 29496, + [SMALL_STATE(333)] = 29538, + [SMALL_STATE(334)] = 29586, + [SMALL_STATE(335)] = 29634, + [SMALL_STATE(336)] = 29700, + [SMALL_STATE(337)] = 29748, + [SMALL_STATE(338)] = 29796, + [SMALL_STATE(339)] = 29844, + [SMALL_STATE(340)] = 29892, + [SMALL_STATE(341)] = 29940, + [SMALL_STATE(342)] = 29988, + [SMALL_STATE(343)] = 30036, + [SMALL_STATE(344)] = 30084, + [SMALL_STATE(345)] = 30132, + [SMALL_STATE(346)] = 30182, + [SMALL_STATE(347)] = 30226, + [SMALL_STATE(348)] = 30276, + [SMALL_STATE(349)] = 30326, + [SMALL_STATE(350)] = 30368, + [SMALL_STATE(351)] = 30446, + [SMALL_STATE(352)] = 30494, + [SMALL_STATE(353)] = 30536, + [SMALL_STATE(354)] = 30582, + [SMALL_STATE(355)] = 30624, + [SMALL_STATE(356)] = 30702, + [SMALL_STATE(357)] = 30744, + [SMALL_STATE(358)] = 30792, + [SMALL_STATE(359)] = 30840, + [SMALL_STATE(360)] = 30882, + [SMALL_STATE(361)] = 30924, + [SMALL_STATE(362)] = 30972, + [SMALL_STATE(363)] = 31014, + [SMALL_STATE(364)] = 31056, + [SMALL_STATE(365)] = 31134, + [SMALL_STATE(366)] = 31176, + [SMALL_STATE(367)] = 31254, + [SMALL_STATE(368)] = 31296, + [SMALL_STATE(369)] = 31338, + [SMALL_STATE(370)] = 31380, + [SMALL_STATE(371)] = 31422, + [SMALL_STATE(372)] = 31470, + [SMALL_STATE(373)] = 31518, + [SMALL_STATE(374)] = 31560, + [SMALL_STATE(375)] = 31602, + [SMALL_STATE(376)] = 31644, + [SMALL_STATE(377)] = 31686, + [SMALL_STATE(378)] = 31734, + [SMALL_STATE(379)] = 31780, + [SMALL_STATE(380)] = 31828, + [SMALL_STATE(381)] = 31870, + [SMALL_STATE(382)] = 31912, + [SMALL_STATE(383)] = 31954, + [SMALL_STATE(384)] = 32014, + [SMALL_STATE(385)] = 32056, + [SMALL_STATE(386)] = 32104, + [SMALL_STATE(387)] = 32146, + [SMALL_STATE(388)] = 32188, + [SMALL_STATE(389)] = 32230, + [SMALL_STATE(390)] = 32272, + [SMALL_STATE(391)] = 32336, + [SMALL_STATE(392)] = 32400, + [SMALL_STATE(393)] = 32442, + [SMALL_STATE(394)] = 32484, + [SMALL_STATE(395)] = 32526, + [SMALL_STATE(396)] = 32568, + [SMALL_STATE(397)] = 32610, + [SMALL_STATE(398)] = 32652, + [SMALL_STATE(399)] = 32694, + [SMALL_STATE(400)] = 32736, + [SMALL_STATE(401)] = 32784, + [SMALL_STATE(402)] = 32826, + [SMALL_STATE(403)] = 32868, + [SMALL_STATE(404)] = 32912, + [SMALL_STATE(405)] = 32958, + [SMALL_STATE(406)] = 33012, + [SMALL_STATE(407)] = 33068, + [SMALL_STATE(408)] = 33126, + [SMALL_STATE(409)] = 33194, + [SMALL_STATE(410)] = 33242, + [SMALL_STATE(411)] = 33292, + [SMALL_STATE(412)] = 33360, + [SMALL_STATE(413)] = 33424, + [SMALL_STATE(414)] = 33486, + [SMALL_STATE(415)] = 33546, + [SMALL_STATE(416)] = 33588, + [SMALL_STATE(417)] = 33630, + [SMALL_STATE(418)] = 33708, + [SMALL_STATE(419)] = 33750, + [SMALL_STATE(420)] = 33800, + [SMALL_STATE(421)] = 33848, + [SMALL_STATE(422)] = 33926, + [SMALL_STATE(423)] = 33967, + [SMALL_STATE(424)] = 34036, + [SMALL_STATE(425)] = 34077, + [SMALL_STATE(426)] = 34118, + [SMALL_STATE(427)] = 34159, + [SMALL_STATE(428)] = 34200, + [SMALL_STATE(429)] = 34247, + [SMALL_STATE(430)] = 34288, + [SMALL_STATE(431)] = 34329, + [SMALL_STATE(432)] = 34376, + [SMALL_STATE(433)] = 34423, + [SMALL_STATE(434)] = 34492, + [SMALL_STATE(435)] = 34555, + [SMALL_STATE(436)] = 34596, + [SMALL_STATE(437)] = 34665, + [SMALL_STATE(438)] = 34706, + [SMALL_STATE(439)] = 34747, + [SMALL_STATE(440)] = 34788, + [SMALL_STATE(441)] = 34829, + [SMALL_STATE(442)] = 34870, + [SMALL_STATE(443)] = 34911, + [SMALL_STATE(444)] = 34970, + [SMALL_STATE(445)] = 35029, + [SMALL_STATE(446)] = 35070, + [SMALL_STATE(447)] = 35117, + [SMALL_STATE(448)] = 35164, + [SMALL_STATE(449)] = 35205, + [SMALL_STATE(450)] = 35274, + [SMALL_STATE(451)] = 35315, + [SMALL_STATE(452)] = 35384, + [SMALL_STATE(453)] = 35453, + [SMALL_STATE(454)] = 35522, + [SMALL_STATE(455)] = 35563, + [SMALL_STATE(456)] = 35604, + [SMALL_STATE(457)] = 35645, + [SMALL_STATE(458)] = 35686, + [SMALL_STATE(459)] = 35733, + [SMALL_STATE(460)] = 35774, + [SMALL_STATE(461)] = 35821, + [SMALL_STATE(462)] = 35890, + [SMALL_STATE(463)] = 35931, + [SMALL_STATE(464)] = 36000, + [SMALL_STATE(465)] = 36047, + [SMALL_STATE(466)] = 36110, + [SMALL_STATE(467)] = 36151, + [SMALL_STATE(468)] = 36220, + [SMALL_STATE(469)] = 36289, + [SMALL_STATE(470)] = 36330, + [SMALL_STATE(471)] = 36399, + [SMALL_STATE(472)] = 36468, + [SMALL_STATE(473)] = 36537, + [SMALL_STATE(474)] = 36606, + [SMALL_STATE(475)] = 36653, + [SMALL_STATE(476)] = 36722, + [SMALL_STATE(477)] = 36791, + [SMALL_STATE(478)] = 36832, + [SMALL_STATE(479)] = 36901, + [SMALL_STATE(480)] = 36948, + [SMALL_STATE(481)] = 36989, + [SMALL_STATE(482)] = 37036, + [SMALL_STATE(483)] = 37077, + [SMALL_STATE(484)] = 37118, + [SMALL_STATE(485)] = 37159, + [SMALL_STATE(486)] = 37200, + [SMALL_STATE(487)] = 37241, + [SMALL_STATE(488)] = 37304, + [SMALL_STATE(489)] = 37345, + [SMALL_STATE(490)] = 37414, + [SMALL_STATE(491)] = 37455, + [SMALL_STATE(492)] = 37496, + [SMALL_STATE(493)] = 37537, + [SMALL_STATE(494)] = 37584, + [SMALL_STATE(495)] = 37625, + [SMALL_STATE(496)] = 37666, + [SMALL_STATE(497)] = 37707, + [SMALL_STATE(498)] = 37748, + [SMALL_STATE(499)] = 37789, + [SMALL_STATE(500)] = 37830, + [SMALL_STATE(501)] = 37877, + [SMALL_STATE(502)] = 37924, + [SMALL_STATE(503)] = 37993, + [SMALL_STATE(504)] = 38062, + [SMALL_STATE(505)] = 38109, + [SMALL_STATE(506)] = 38178, + [SMALL_STATE(507)] = 38225, + [SMALL_STATE(508)] = 38294, + [SMALL_STATE(509)] = 38363, + [SMALL_STATE(510)] = 38404, + [SMALL_STATE(511)] = 38445, + [SMALL_STATE(512)] = 38494, + [SMALL_STATE(513)] = 38537, + [SMALL_STATE(514)] = 38586, + [SMALL_STATE(515)] = 38627, + [SMALL_STATE(516)] = 38668, + [SMALL_STATE(517)] = 38709, + [SMALL_STATE(518)] = 38750, + [SMALL_STATE(519)] = 38791, + [SMALL_STATE(520)] = 38832, + [SMALL_STATE(521)] = 38873, + [SMALL_STATE(522)] = 38914, + [SMALL_STATE(523)] = 38955, + [SMALL_STATE(524)] = 38996, + [SMALL_STATE(525)] = 39037, + [SMALL_STATE(526)] = 39084, + [SMALL_STATE(527)] = 39129, + [SMALL_STATE(528)] = 39170, + [SMALL_STATE(529)] = 39239, + [SMALL_STATE(530)] = 39308, + [SMALL_STATE(531)] = 39349, + [SMALL_STATE(532)] = 39396, + [SMALL_STATE(533)] = 39437, + [SMALL_STATE(534)] = 39478, + [SMALL_STATE(535)] = 39519, + [SMALL_STATE(536)] = 39588, + [SMALL_STATE(537)] = 39629, + [SMALL_STATE(538)] = 39670, + [SMALL_STATE(539)] = 39739, + [SMALL_STATE(540)] = 39780, + [SMALL_STATE(541)] = 39827, + [SMALL_STATE(542)] = 39868, + [SMALL_STATE(543)] = 39909, + [SMALL_STATE(544)] = 39956, + [SMALL_STATE(545)] = 39997, + [SMALL_STATE(546)] = 40044, + [SMALL_STATE(547)] = 40085, + [SMALL_STATE(548)] = 40132, + [SMALL_STATE(549)] = 40173, + [SMALL_STATE(550)] = 40214, + [SMALL_STATE(551)] = 40255, + [SMALL_STATE(552)] = 40296, + [SMALL_STATE(553)] = 40337, + [SMALL_STATE(554)] = 40378, + [SMALL_STATE(555)] = 40419, + [SMALL_STATE(556)] = 40460, + [SMALL_STATE(557)] = 40501, + [SMALL_STATE(558)] = 40570, + [SMALL_STATE(559)] = 40615, + [SMALL_STATE(560)] = 40684, + [SMALL_STATE(561)] = 40725, + [SMALL_STATE(562)] = 40766, + [SMALL_STATE(563)] = 40807, + [SMALL_STATE(564)] = 40848, + [SMALL_STATE(565)] = 40889, + [SMALL_STATE(566)] = 40930, + [SMALL_STATE(567)] = 40971, + [SMALL_STATE(568)] = 41030, + [SMALL_STATE(569)] = 41071, + [SMALL_STATE(570)] = 41130, + [SMALL_STATE(571)] = 41191, + [SMALL_STATE(572)] = 41254, + [SMALL_STATE(573)] = 41321, + [SMALL_STATE(574)] = 41370, + [SMALL_STATE(575)] = 41417, + [SMALL_STATE(576)] = 41484, + [SMALL_STATE(577)] = 41541, + [SMALL_STATE(578)] = 41596, + [SMALL_STATE(579)] = 41649, + [SMALL_STATE(580)] = 41694, + [SMALL_STATE(581)] = 41737, + [SMALL_STATE(582)] = 41778, + [SMALL_STATE(583)] = 41819, + [SMALL_STATE(584)] = 41864, + [SMALL_STATE(585)] = 41933, + [SMALL_STATE(586)] = 42002, + [SMALL_STATE(587)] = 42043, + [SMALL_STATE(588)] = 42102, + [SMALL_STATE(589)] = 42149, + [SMALL_STATE(590)] = 42190, + [SMALL_STATE(591)] = 42231, + [SMALL_STATE(592)] = 42300, + [SMALL_STATE(593)] = 42341, + [SMALL_STATE(594)] = 42382, + [SMALL_STATE(595)] = 42423, + [SMALL_STATE(596)] = 42468, + [SMALL_STATE(597)] = 42509, + [SMALL_STATE(598)] = 42550, + [SMALL_STATE(599)] = 42591, + [SMALL_STATE(600)] = 42632, + [SMALL_STATE(601)] = 42679, + [SMALL_STATE(602)] = 42744, + [SMALL_STATE(603)] = 42785, + [SMALL_STATE(604)] = 42826, + [SMALL_STATE(605)] = 42867, + [SMALL_STATE(606)] = 42907, + [SMALL_STATE(607)] = 42947, + [SMALL_STATE(608)] = 42987, + [SMALL_STATE(609)] = 43027, + [SMALL_STATE(610)] = 43067, + [SMALL_STATE(611)] = 43107, + [SMALL_STATE(612)] = 43147, + [SMALL_STATE(613)] = 43187, + [SMALL_STATE(614)] = 43227, + [SMALL_STATE(615)] = 43267, + [SMALL_STATE(616)] = 43307, + [SMALL_STATE(617)] = 43347, + [SMALL_STATE(618)] = 43387, + [SMALL_STATE(619)] = 43441, + [SMALL_STATE(620)] = 43489, + [SMALL_STATE(621)] = 43543, + [SMALL_STATE(622)] = 43583, + [SMALL_STATE(623)] = 43623, + [SMALL_STATE(624)] = 43663, + [SMALL_STATE(625)] = 43703, + [SMALL_STATE(626)] = 43743, + [SMALL_STATE(627)] = 43793, + [SMALL_STATE(628)] = 43833, + [SMALL_STATE(629)] = 43879, + [SMALL_STATE(630)] = 43919, + [SMALL_STATE(631)] = 43959, + [SMALL_STATE(632)] = 43999, + [SMALL_STATE(633)] = 44039, + [SMALL_STATE(634)] = 44079, + [SMALL_STATE(635)] = 44119, + [SMALL_STATE(636)] = 44159, + [SMALL_STATE(637)] = 44199, + [SMALL_STATE(638)] = 44245, + [SMALL_STATE(639)] = 44289, + [SMALL_STATE(640)] = 44333, + [SMALL_STATE(641)] = 44373, + [SMALL_STATE(642)] = 44413, + [SMALL_STATE(643)] = 44453, + [SMALL_STATE(644)] = 44493, + [SMALL_STATE(645)] = 44533, + [SMALL_STATE(646)] = 44573, + [SMALL_STATE(647)] = 44613, + [SMALL_STATE(648)] = 44659, + [SMALL_STATE(649)] = 44699, + [SMALL_STATE(650)] = 44739, + [SMALL_STATE(651)] = 44779, + [SMALL_STATE(652)] = 44837, + [SMALL_STATE(653)] = 44877, + [SMALL_STATE(654)] = 44935, + [SMALL_STATE(655)] = 44975, + [SMALL_STATE(656)] = 45015, + [SMALL_STATE(657)] = 45055, + [SMALL_STATE(658)] = 45095, + [SMALL_STATE(659)] = 45153, + [SMALL_STATE(660)] = 45193, + [SMALL_STATE(661)] = 45233, + [SMALL_STATE(662)] = 45273, + [SMALL_STATE(663)] = 45313, + [SMALL_STATE(664)] = 45359, + [SMALL_STATE(665)] = 45399, + [SMALL_STATE(666)] = 45457, + [SMALL_STATE(667)] = 45515, + [SMALL_STATE(668)] = 45556, + [SMALL_STATE(669)] = 45603, + [SMALL_STATE(670)] = 45642, + [SMALL_STATE(671)] = 45681, + [SMALL_STATE(672)] = 45722, + [SMALL_STATE(673)] = 45789, + [SMALL_STATE(674)] = 45830, + [SMALL_STATE(675)] = 45871, + [SMALL_STATE(676)] = 45918, + [SMALL_STATE(677)] = 45957, + [SMALL_STATE(678)] = 46004, + [SMALL_STATE(679)] = 46051, + [SMALL_STATE(680)] = 46098, + [SMALL_STATE(681)] = 46145, + [SMALL_STATE(682)] = 46192, + [SMALL_STATE(683)] = 46239, + [SMALL_STATE(684)] = 46278, + [SMALL_STATE(685)] = 46317, + [SMALL_STATE(686)] = 46364, + [SMALL_STATE(687)] = 46421, + [SMALL_STATE(688)] = 46460, + [SMALL_STATE(689)] = 46501, + [SMALL_STATE(690)] = 46548, + [SMALL_STATE(691)] = 46605, + [SMALL_STATE(692)] = 46652, + [SMALL_STATE(693)] = 46691, + [SMALL_STATE(694)] = 46734, + [SMALL_STATE(695)] = 46779, + [SMALL_STATE(696)] = 46818, + [SMALL_STATE(697)] = 46865, + [SMALL_STATE(698)] = 46904, + [SMALL_STATE(699)] = 46951, + [SMALL_STATE(700)] = 46998, + [SMALL_STATE(701)] = 47045, + [SMALL_STATE(702)] = 47092, + [SMALL_STATE(703)] = 47139, + [SMALL_STATE(704)] = 47186, + [SMALL_STATE(705)] = 47233, + [SMALL_STATE(706)] = 47272, + [SMALL_STATE(707)] = 47311, + [SMALL_STATE(708)] = 47358, + [SMALL_STATE(709)] = 47407, + [SMALL_STATE(710)] = 47450, + [SMALL_STATE(711)] = 47497, + [SMALL_STATE(712)] = 47538, + [SMALL_STATE(713)] = 47577, + [SMALL_STATE(714)] = 47644, + [SMALL_STATE(715)] = 47691, + [SMALL_STATE(716)] = 47730, + [SMALL_STATE(717)] = 47769, + [SMALL_STATE(718)] = 47808, + [SMALL_STATE(719)] = 47849, + [SMALL_STATE(720)] = 47890, + [SMALL_STATE(721)] = 47937, + [SMALL_STATE(722)] = 47984, + [SMALL_STATE(723)] = 48025, + [SMALL_STATE(724)] = 48066, + [SMALL_STATE(725)] = 48105, + [SMALL_STATE(726)] = 48152, + [SMALL_STATE(727)] = 48197, + [SMALL_STATE(728)] = 48264, + [SMALL_STATE(729)] = 48305, + [SMALL_STATE(730)] = 48352, + [SMALL_STATE(731)] = 48399, + [SMALL_STATE(732)] = 48440, + [SMALL_STATE(733)] = 48507, + [SMALL_STATE(734)] = 48574, + [SMALL_STATE(735)] = 48619, + [SMALL_STATE(736)] = 48664, + [SMALL_STATE(737)] = 48711, + [SMALL_STATE(738)] = 48758, + [SMALL_STATE(739)] = 48799, + [SMALL_STATE(740)] = 48840, + [SMALL_STATE(741)] = 48881, + [SMALL_STATE(742)] = 48928, + [SMALL_STATE(743)] = 48971, + [SMALL_STATE(744)] = 49038, + [SMALL_STATE(745)] = 49083, + [SMALL_STATE(746)] = 49130, + [SMALL_STATE(747)] = 49177, + [SMALL_STATE(748)] = 49220, + [SMALL_STATE(749)] = 49267, + [SMALL_STATE(750)] = 49314, + [SMALL_STATE(751)] = 49355, + [SMALL_STATE(752)] = 49396, + [SMALL_STATE(753)] = 49437, + [SMALL_STATE(754)] = 49478, + [SMALL_STATE(755)] = 49519, + [SMALL_STATE(756)] = 49560, + [SMALL_STATE(757)] = 49601, + [SMALL_STATE(758)] = 49642, + [SMALL_STATE(759)] = 49683, + [SMALL_STATE(760)] = 49724, + [SMALL_STATE(761)] = 49765, + [SMALL_STATE(762)] = 49806, + [SMALL_STATE(763)] = 49847, + [SMALL_STATE(764)] = 49888, + [SMALL_STATE(765)] = 49929, + [SMALL_STATE(766)] = 49996, + [SMALL_STATE(767)] = 50043, + [SMALL_STATE(768)] = 50090, + [SMALL_STATE(769)] = 50129, + [SMALL_STATE(770)] = 50173, + [SMALL_STATE(771)] = 50213, + [SMALL_STATE(772)] = 50259, + [SMALL_STATE(773)] = 50299, + [SMALL_STATE(774)] = 50337, + [SMALL_STATE(775)] = 50377, + [SMALL_STATE(776)] = 50417, + [SMALL_STATE(777)] = 50455, + [SMALL_STATE(778)] = 50499, + [SMALL_STATE(779)] = 50539, + [SMALL_STATE(780)] = 50579, + [SMALL_STATE(781)] = 50623, + [SMALL_STATE(782)] = 50661, + [SMALL_STATE(783)] = 50699, + [SMALL_STATE(784)] = 50737, + [SMALL_STATE(785)] = 50777, + [SMALL_STATE(786)] = 50817, + [SMALL_STATE(787)] = 50859, + [SMALL_STATE(788)] = 50903, + [SMALL_STATE(789)] = 50943, + [SMALL_STATE(790)] = 50983, + [SMALL_STATE(791)] = 51023, + [SMALL_STATE(792)] = 51063, + [SMALL_STATE(793)] = 51103, + [SMALL_STATE(794)] = 51147, + [SMALL_STATE(795)] = 51187, + [SMALL_STATE(796)] = 51231, + [SMALL_STATE(797)] = 51275, + [SMALL_STATE(798)] = 51315, + [SMALL_STATE(799)] = 51353, + [SMALL_STATE(800)] = 51397, + [SMALL_STATE(801)] = 51441, + [SMALL_STATE(802)] = 51497, + [SMALL_STATE(803)] = 51541, + [SMALL_STATE(804)] = 51597, + [SMALL_STATE(805)] = 51653, + [SMALL_STATE(806)] = 51691, + [SMALL_STATE(807)] = 51735, + [SMALL_STATE(808)] = 51772, + [SMALL_STATE(809)] = 51811, + [SMALL_STATE(810)] = 51848, + [SMALL_STATE(811)] = 51891, + [SMALL_STATE(812)] = 51928, + [SMALL_STATE(813)] = 51965, + [SMALL_STATE(814)] = 52002, + [SMALL_STATE(815)] = 52039, + [SMALL_STATE(816)] = 52082, + [SMALL_STATE(817)] = 52119, + [SMALL_STATE(818)] = 52156, + [SMALL_STATE(819)] = 52193, + [SMALL_STATE(820)] = 52230, + [SMALL_STATE(821)] = 52267, + [SMALL_STATE(822)] = 52304, + [SMALL_STATE(823)] = 52347, + [SMALL_STATE(824)] = 52384, + [SMALL_STATE(825)] = 52427, + [SMALL_STATE(826)] = 52464, + [SMALL_STATE(827)] = 52501, + [SMALL_STATE(828)] = 52544, + [SMALL_STATE(829)] = 52587, + [SMALL_STATE(830)] = 52626, + [SMALL_STATE(831)] = 52669, + [SMALL_STATE(832)] = 52708, + [SMALL_STATE(833)] = 52747, + [SMALL_STATE(834)] = 52786, + [SMALL_STATE(835)] = 52825, + [SMALL_STATE(836)] = 52868, + [SMALL_STATE(837)] = 52907, + [SMALL_STATE(838)] = 52946, + [SMALL_STATE(839)] = 52985, + [SMALL_STATE(840)] = 53024, + [SMALL_STATE(841)] = 53063, + [SMALL_STATE(842)] = 53106, + [SMALL_STATE(843)] = 53149, + [SMALL_STATE(844)] = 53192, + [SMALL_STATE(845)] = 53235, + [SMALL_STATE(846)] = 53278, + [SMALL_STATE(847)] = 53333, + [SMALL_STATE(848)] = 53372, + [SMALL_STATE(849)] = 53411, + [SMALL_STATE(850)] = 53450, + [SMALL_STATE(851)] = 53505, + [SMALL_STATE(852)] = 53544, + [SMALL_STATE(853)] = 53580, + [SMALL_STATE(854)] = 53622, + [SMALL_STATE(855)] = 53658, + [SMALL_STATE(856)] = 53694, + [SMALL_STATE(857)] = 53736, + [SMALL_STATE(858)] = 53772, + [SMALL_STATE(859)] = 53808, + [SMALL_STATE(860)] = 53848, + [SMALL_STATE(861)] = 53884, + [SMALL_STATE(862)] = 53920, + [SMALL_STATE(863)] = 53956, + [SMALL_STATE(864)] = 53992, + [SMALL_STATE(865)] = 54028, + [SMALL_STATE(866)] = 54064, + [SMALL_STATE(867)] = 54100, + [SMALL_STATE(868)] = 54140, + [SMALL_STATE(869)] = 54176, + [SMALL_STATE(870)] = 54212, + [SMALL_STATE(871)] = 54248, + [SMALL_STATE(872)] = 54284, + [SMALL_STATE(873)] = 54320, + [SMALL_STATE(874)] = 54356, + [SMALL_STATE(875)] = 54392, + [SMALL_STATE(876)] = 54434, + [SMALL_STATE(877)] = 54476, + [SMALL_STATE(878)] = 54512, + [SMALL_STATE(879)] = 54548, + [SMALL_STATE(880)] = 54584, + [SMALL_STATE(881)] = 54620, + [SMALL_STATE(882)] = 54656, + [SMALL_STATE(883)] = 54692, + [SMALL_STATE(884)] = 54746, + [SMALL_STATE(885)] = 54788, + [SMALL_STATE(886)] = 54824, + [SMALL_STATE(887)] = 54860, + [SMALL_STATE(888)] = 54896, + [SMALL_STATE(889)] = 54957, + [SMALL_STATE(890)] = 55018, + [SMALL_STATE(891)] = 55079, + [SMALL_STATE(892)] = 55140, + [SMALL_STATE(893)] = 55201, + [SMALL_STATE(894)] = 55242, + [SMALL_STATE(895)] = 55303, + [SMALL_STATE(896)] = 55364, + [SMALL_STATE(897)] = 55429, + [SMALL_STATE(898)] = 55490, + [SMALL_STATE(899)] = 55525, + [SMALL_STATE(900)] = 55560, + [SMALL_STATE(901)] = 55595, + [SMALL_STATE(902)] = 55630, + [SMALL_STATE(903)] = 55691, + [SMALL_STATE(904)] = 55726, + [SMALL_STATE(905)] = 55791, + [SMALL_STATE(906)] = 55856, + [SMALL_STATE(907)] = 55891, + [SMALL_STATE(908)] = 55952, + [SMALL_STATE(909)] = 55987, + [SMALL_STATE(910)] = 56048, + [SMALL_STATE(911)] = 56109, + [SMALL_STATE(912)] = 56170, + [SMALL_STATE(913)] = 56205, + [SMALL_STATE(914)] = 56266, + [SMALL_STATE(915)] = 56327, + [SMALL_STATE(916)] = 56388, + [SMALL_STATE(917)] = 56449, + [SMALL_STATE(918)] = 56484, + [SMALL_STATE(919)] = 56545, + [SMALL_STATE(920)] = 56606, + [SMALL_STATE(921)] = 56667, + [SMALL_STATE(922)] = 56702, + [SMALL_STATE(923)] = 56763, + [SMALL_STATE(924)] = 56798, + [SMALL_STATE(925)] = 56833, + [SMALL_STATE(926)] = 56898, + [SMALL_STATE(927)] = 56959, + [SMALL_STATE(928)] = 56998, + [SMALL_STATE(929)] = 57033, + [SMALL_STATE(930)] = 57072, + [SMALL_STATE(931)] = 57133, + [SMALL_STATE(932)] = 57194, + [SMALL_STATE(933)] = 57255, + [SMALL_STATE(934)] = 57316, + [SMALL_STATE(935)] = 57381, + [SMALL_STATE(936)] = 57442, + [SMALL_STATE(937)] = 57477, + [SMALL_STATE(938)] = 57542, + [SMALL_STATE(939)] = 57577, + [SMALL_STATE(940)] = 57638, + [SMALL_STATE(941)] = 57699, + [SMALL_STATE(942)] = 57733, + [SMALL_STATE(943)] = 57791, + [SMALL_STATE(944)] = 57849, + [SMALL_STATE(945)] = 57907, + [SMALL_STATE(946)] = 57965, + [SMALL_STATE(947)] = 57999, + [SMALL_STATE(948)] = 58039, + [SMALL_STATE(949)] = 58079, + [SMALL_STATE(950)] = 58113, + [SMALL_STATE(951)] = 58153, + [SMALL_STATE(952)] = 58211, + [SMALL_STATE(953)] = 58269, + [SMALL_STATE(954)] = 58303, + [SMALL_STATE(955)] = 58337, + [SMALL_STATE(956)] = 58395, + [SMALL_STATE(957)] = 58433, + [SMALL_STATE(958)] = 58491, + [SMALL_STATE(959)] = 58549, + [SMALL_STATE(960)] = 58607, + [SMALL_STATE(961)] = 58665, + [SMALL_STATE(962)] = 58705, + [SMALL_STATE(963)] = 58763, + [SMALL_STATE(964)] = 58797, + [SMALL_STATE(965)] = 58855, + [SMALL_STATE(966)] = 58889, + [SMALL_STATE(967)] = 58923, + [SMALL_STATE(968)] = 58981, + [SMALL_STATE(969)] = 59015, + [SMALL_STATE(970)] = 59073, + [SMALL_STATE(971)] = 59131, + [SMALL_STATE(972)] = 59189, + [SMALL_STATE(973)] = 59223, + [SMALL_STATE(974)] = 59281, + [SMALL_STATE(975)] = 59339, + [SMALL_STATE(976)] = 59373, + [SMALL_STATE(977)] = 59431, + [SMALL_STATE(978)] = 59489, + [SMALL_STATE(979)] = 59547, + [SMALL_STATE(980)] = 59605, + [SMALL_STATE(981)] = 59663, + [SMALL_STATE(982)] = 59697, + [SMALL_STATE(983)] = 59755, + [SMALL_STATE(984)] = 59813, + [SMALL_STATE(985)] = 59871, + [SMALL_STATE(986)] = 59911, + [SMALL_STATE(987)] = 59969, + [SMALL_STATE(988)] = 60003, + [SMALL_STATE(989)] = 60037, + [SMALL_STATE(990)] = 60071, + [SMALL_STATE(991)] = 60129, + [SMALL_STATE(992)] = 60187, + [SMALL_STATE(993)] = 60221, + [SMALL_STATE(994)] = 60279, + [SMALL_STATE(995)] = 60313, + [SMALL_STATE(996)] = 60347, + [SMALL_STATE(997)] = 60405, + [SMALL_STATE(998)] = 60463, + [SMALL_STATE(999)] = 60521, + [SMALL_STATE(1000)] = 60579, + [SMALL_STATE(1001)] = 60637, + [SMALL_STATE(1002)] = 60677, + [SMALL_STATE(1003)] = 60711, + [SMALL_STATE(1004)] = 60762, + [SMALL_STATE(1005)] = 60795, + [SMALL_STATE(1006)] = 60834, + [SMALL_STATE(1007)] = 60885, + [SMALL_STATE(1008)] = 60924, + [SMALL_STATE(1009)] = 60975, + [SMALL_STATE(1010)] = 61014, + [SMALL_STATE(1011)] = 61065, + [SMALL_STATE(1012)] = 61098, + [SMALL_STATE(1013)] = 61149, + [SMALL_STATE(1014)] = 61200, + [SMALL_STATE(1015)] = 61233, + [SMALL_STATE(1016)] = 61284, + [SMALL_STATE(1017)] = 61317, + [SMALL_STATE(1018)] = 61350, + [SMALL_STATE(1019)] = 61401, + [SMALL_STATE(1020)] = 61452, + [SMALL_STATE(1021)] = 61485, + [SMALL_STATE(1022)] = 61536, + [SMALL_STATE(1023)] = 61587, + [SMALL_STATE(1024)] = 61638, + [SMALL_STATE(1025)] = 61689, + [SMALL_STATE(1026)] = 61740, + [SMALL_STATE(1027)] = 61791, + [SMALL_STATE(1028)] = 61842, + [SMALL_STATE(1029)] = 61875, + [SMALL_STATE(1030)] = 61908, + [SMALL_STATE(1031)] = 61941, + [SMALL_STATE(1032)] = 61992, + [SMALL_STATE(1033)] = 62025, + [SMALL_STATE(1034)] = 62058, + [SMALL_STATE(1035)] = 62091, + [SMALL_STATE(1036)] = 62142, + [SMALL_STATE(1037)] = 62175, + [SMALL_STATE(1038)] = 62226, + [SMALL_STATE(1039)] = 62259, + [SMALL_STATE(1040)] = 62292, + [SMALL_STATE(1041)] = 62325, + [SMALL_STATE(1042)] = 62376, + [SMALL_STATE(1043)] = 62415, + [SMALL_STATE(1044)] = 62466, + [SMALL_STATE(1045)] = 62517, + [SMALL_STATE(1046)] = 62568, + [SMALL_STATE(1047)] = 62619, + [SMALL_STATE(1048)] = 62670, + [SMALL_STATE(1049)] = 62721, + [SMALL_STATE(1050)] = 62772, + [SMALL_STATE(1051)] = 62823, + [SMALL_STATE(1052)] = 62874, + [SMALL_STATE(1053)] = 62913, + [SMALL_STATE(1054)] = 62946, + [SMALL_STATE(1055)] = 62997, + [SMALL_STATE(1056)] = 63048, + [SMALL_STATE(1057)] = 63099, + [SMALL_STATE(1058)] = 63150, + [SMALL_STATE(1059)] = 63201, + [SMALL_STATE(1060)] = 63252, + [SMALL_STATE(1061)] = 63303, + [SMALL_STATE(1062)] = 63336, + [SMALL_STATE(1063)] = 63387, + [SMALL_STATE(1064)] = 63438, + [SMALL_STATE(1065)] = 63489, + [SMALL_STATE(1066)] = 63528, + [SMALL_STATE(1067)] = 63579, + [SMALL_STATE(1068)] = 63630, + [SMALL_STATE(1069)] = 63681, + [SMALL_STATE(1070)] = 63732, + [SMALL_STATE(1071)] = 63783, + [SMALL_STATE(1072)] = 63834, + [SMALL_STATE(1073)] = 63885, + [SMALL_STATE(1074)] = 63936, + [SMALL_STATE(1075)] = 63987, + [SMALL_STATE(1076)] = 64020, + [SMALL_STATE(1077)] = 64053, + [SMALL_STATE(1078)] = 64086, + [SMALL_STATE(1079)] = 64119, + [SMALL_STATE(1080)] = 64152, + [SMALL_STATE(1081)] = 64185, + [SMALL_STATE(1082)] = 64218, + [SMALL_STATE(1083)] = 64257, + [SMALL_STATE(1084)] = 64296, + [SMALL_STATE(1085)] = 64347, + [SMALL_STATE(1086)] = 64380, + [SMALL_STATE(1087)] = 64431, + [SMALL_STATE(1088)] = 64482, + [SMALL_STATE(1089)] = 64533, + [SMALL_STATE(1090)] = 64566, + [SMALL_STATE(1091)] = 64605, + [SMALL_STATE(1092)] = 64638, + [SMALL_STATE(1093)] = 64676, + [SMALL_STATE(1094)] = 64712, + [SMALL_STATE(1095)] = 64748, + [SMALL_STATE(1096)] = 64798, + [SMALL_STATE(1097)] = 64846, + [SMALL_STATE(1098)] = 64880, + [SMALL_STATE(1099)] = 64922, + [SMALL_STATE(1100)] = 64958, + [SMALL_STATE(1101)] = 65000, + [SMALL_STATE(1102)] = 65032, + [SMALL_STATE(1103)] = 65082, + [SMALL_STATE(1104)] = 65114, + [SMALL_STATE(1105)] = 65146, + [SMALL_STATE(1106)] = 65184, + [SMALL_STATE(1107)] = 65216, + [SMALL_STATE(1108)] = 65264, + [SMALL_STATE(1109)] = 65296, + [SMALL_STATE(1110)] = 65334, + [SMALL_STATE(1111)] = 65382, + [SMALL_STATE(1112)] = 65420, + [SMALL_STATE(1113)] = 65468, + [SMALL_STATE(1114)] = 65516, + [SMALL_STATE(1115)] = 65564, + [SMALL_STATE(1116)] = 65602, + [SMALL_STATE(1117)] = 65644, + [SMALL_STATE(1118)] = 65678, + [SMALL_STATE(1119)] = 65716, + [SMALL_STATE(1120)] = 65752, + [SMALL_STATE(1121)] = 65784, + [SMALL_STATE(1122)] = 65816, + [SMALL_STATE(1123)] = 65848, + [SMALL_STATE(1124)] = 65890, + [SMALL_STATE(1125)] = 65922, + [SMALL_STATE(1126)] = 65954, + [SMALL_STATE(1127)] = 65990, + [SMALL_STATE(1128)] = 66022, + [SMALL_STATE(1129)] = 66060, + [SMALL_STATE(1130)] = 66098, + [SMALL_STATE(1131)] = 66148, + [SMALL_STATE(1132)] = 66184, + [SMALL_STATE(1133)] = 66216, + [SMALL_STATE(1134)] = 66258, + [SMALL_STATE(1135)] = 66296, + [SMALL_STATE(1136)] = 66344, + [SMALL_STATE(1137)] = 66380, + [SMALL_STATE(1138)] = 66422, + [SMALL_STATE(1139)] = 66460, + [SMALL_STATE(1140)] = 66498, + [SMALL_STATE(1141)] = 66546, + [SMALL_STATE(1142)] = 66594, + [SMALL_STATE(1143)] = 66630, + [SMALL_STATE(1144)] = 66666, + [SMALL_STATE(1145)] = 66716, + [SMALL_STATE(1146)] = 66766, + [SMALL_STATE(1147)] = 66816, + [SMALL_STATE(1148)] = 66866, + [SMALL_STATE(1149)] = 66902, + [SMALL_STATE(1150)] = 66934, + [SMALL_STATE(1151)] = 66972, + [SMALL_STATE(1152)] = 67022, + [SMALL_STATE(1153)] = 67060, + [SMALL_STATE(1154)] = 67110, + [SMALL_STATE(1155)] = 67144, + [SMALL_STATE(1156)] = 67194, + [SMALL_STATE(1157)] = 67232, + [SMALL_STATE(1158)] = 67274, + [SMALL_STATE(1159)] = 67312, + [SMALL_STATE(1160)] = 67350, + [SMALL_STATE(1161)] = 67388, + [SMALL_STATE(1162)] = 67438, + [SMALL_STATE(1163)] = 67486, + [SMALL_STATE(1164)] = 67522, + [SMALL_STATE(1165)] = 67564, + [SMALL_STATE(1166)] = 67614, + [SMALL_STATE(1167)] = 67662, + [SMALL_STATE(1168)] = 67700, + [SMALL_STATE(1169)] = 67736, + [SMALL_STATE(1170)] = 67774, + [SMALL_STATE(1171)] = 67810, + [SMALL_STATE(1172)] = 67848, + [SMALL_STATE(1173)] = 67880, + [SMALL_STATE(1174)] = 67918, + [SMALL_STATE(1175)] = 67966, + [SMALL_STATE(1176)] = 68014, + [SMALL_STATE(1177)] = 68062, + [SMALL_STATE(1178)] = 68094, + [SMALL_STATE(1179)] = 68136, + [SMALL_STATE(1180)] = 68170, + [SMALL_STATE(1181)] = 68220, + [SMALL_STATE(1182)] = 68256, + [SMALL_STATE(1183)] = 68287, + [SMALL_STATE(1184)] = 68318, + [SMALL_STATE(1185)] = 68357, + [SMALL_STATE(1186)] = 68394, + [SMALL_STATE(1187)] = 68431, + [SMALL_STATE(1188)] = 68462, + [SMALL_STATE(1189)] = 68501, + [SMALL_STATE(1190)] = 68540, + [SMALL_STATE(1191)] = 68571, + [SMALL_STATE(1192)] = 68616, + [SMALL_STATE(1193)] = 68651, + [SMALL_STATE(1194)] = 68686, + [SMALL_STATE(1195)] = 68733, + [SMALL_STATE(1196)] = 68772, + [SMALL_STATE(1197)] = 68803, + [SMALL_STATE(1198)] = 68834, + [SMALL_STATE(1199)] = 68865, + [SMALL_STATE(1200)] = 68896, + [SMALL_STATE(1201)] = 68941, + [SMALL_STATE(1202)] = 68972, + [SMALL_STATE(1203)] = 69003, + [SMALL_STATE(1204)] = 69034, + [SMALL_STATE(1205)] = 69065, + [SMALL_STATE(1206)] = 69096, + [SMALL_STATE(1207)] = 69127, + [SMALL_STATE(1208)] = 69166, + [SMALL_STATE(1209)] = 69197, + [SMALL_STATE(1210)] = 69228, + [SMALL_STATE(1211)] = 69259, + [SMALL_STATE(1212)] = 69290, + [SMALL_STATE(1213)] = 69321, + [SMALL_STATE(1214)] = 69352, + [SMALL_STATE(1215)] = 69383, + [SMALL_STATE(1216)] = 69422, + [SMALL_STATE(1217)] = 69469, + [SMALL_STATE(1218)] = 69500, + [SMALL_STATE(1219)] = 69539, + [SMALL_STATE(1220)] = 69578, + [SMALL_STATE(1221)] = 69609, + [SMALL_STATE(1222)] = 69640, + [SMALL_STATE(1223)] = 69671, + [SMALL_STATE(1224)] = 69716, + [SMALL_STATE(1225)] = 69747, + [SMALL_STATE(1226)] = 69778, + [SMALL_STATE(1227)] = 69809, + [SMALL_STATE(1228)] = 69840, + [SMALL_STATE(1229)] = 69871, + [SMALL_STATE(1230)] = 69902, + [SMALL_STATE(1231)] = 69933, + [SMALL_STATE(1232)] = 69964, + [SMALL_STATE(1233)] = 69995, + [SMALL_STATE(1234)] = 70026, + [SMALL_STATE(1235)] = 70057, + [SMALL_STATE(1236)] = 70102, + [SMALL_STATE(1237)] = 70133, + [SMALL_STATE(1238)] = 70164, + [SMALL_STATE(1239)] = 70195, + [SMALL_STATE(1240)] = 70234, + [SMALL_STATE(1241)] = 70265, + [SMALL_STATE(1242)] = 70296, + [SMALL_STATE(1243)] = 70327, + [SMALL_STATE(1244)] = 70358, + [SMALL_STATE(1245)] = 70389, + [SMALL_STATE(1246)] = 70420, + [SMALL_STATE(1247)] = 70465, + [SMALL_STATE(1248)] = 70500, + [SMALL_STATE(1249)] = 70531, + [SMALL_STATE(1250)] = 70570, + [SMALL_STATE(1251)] = 70601, + [SMALL_STATE(1252)] = 70638, + [SMALL_STATE(1253)] = 70669, + [SMALL_STATE(1254)] = 70700, + [SMALL_STATE(1255)] = 70731, + [SMALL_STATE(1256)] = 70762, + [SMALL_STATE(1257)] = 70803, + [SMALL_STATE(1258)] = 70834, + [SMALL_STATE(1259)] = 70865, + [SMALL_STATE(1260)] = 70896, + [SMALL_STATE(1261)] = 70927, + [SMALL_STATE(1262)] = 70958, + [SMALL_STATE(1263)] = 70989, + [SMALL_STATE(1264)] = 71020, + [SMALL_STATE(1265)] = 71055, + [SMALL_STATE(1266)] = 71088, + [SMALL_STATE(1267)] = 71127, + [SMALL_STATE(1268)] = 71162, + [SMALL_STATE(1269)] = 71193, + [SMALL_STATE(1270)] = 71234, + [SMALL_STATE(1271)] = 71269, + [SMALL_STATE(1272)] = 71304, + [SMALL_STATE(1273)] = 71335, + [SMALL_STATE(1274)] = 71366, + [SMALL_STATE(1275)] = 71397, + [SMALL_STATE(1276)] = 71428, + [SMALL_STATE(1277)] = 71459, + [SMALL_STATE(1278)] = 71490, + [SMALL_STATE(1279)] = 71521, + [SMALL_STATE(1280)] = 71552, + [SMALL_STATE(1281)] = 71583, + [SMALL_STATE(1282)] = 71614, + [SMALL_STATE(1283)] = 71645, + [SMALL_STATE(1284)] = 71676, + [SMALL_STATE(1285)] = 71707, + [SMALL_STATE(1286)] = 71742, + [SMALL_STATE(1287)] = 71777, + [SMALL_STATE(1288)] = 71808, + [SMALL_STATE(1289)] = 71839, + [SMALL_STATE(1290)] = 71884, + [SMALL_STATE(1291)] = 71919, + [SMALL_STATE(1292)] = 71950, + [SMALL_STATE(1293)] = 71981, + [SMALL_STATE(1294)] = 72012, + [SMALL_STATE(1295)] = 72043, + [SMALL_STATE(1296)] = 72074, + [SMALL_STATE(1297)] = 72105, + [SMALL_STATE(1298)] = 72144, + [SMALL_STATE(1299)] = 72175, + [SMALL_STATE(1300)] = 72231, + [SMALL_STATE(1301)] = 72287, + [SMALL_STATE(1302)] = 72321, + [SMALL_STATE(1303)] = 72355, + [SMALL_STATE(1304)] = 72393, + [SMALL_STATE(1305)] = 72427, + [SMALL_STATE(1306)] = 72457, + [SMALL_STATE(1307)] = 72513, + [SMALL_STATE(1308)] = 72551, + [SMALL_STATE(1309)] = 72607, + [SMALL_STATE(1310)] = 72645, + [SMALL_STATE(1311)] = 72679, + [SMALL_STATE(1312)] = 72713, + [SMALL_STATE(1313)] = 72769, + [SMALL_STATE(1314)] = 72825, + [SMALL_STATE(1315)] = 72859, + [SMALL_STATE(1316)] = 72893, + [SMALL_STATE(1317)] = 72927, + [SMALL_STATE(1318)] = 72961, + [SMALL_STATE(1319)] = 73014, + [SMALL_STATE(1320)] = 73067, + [SMALL_STATE(1321)] = 73096, + [SMALL_STATE(1322)] = 73125, + [SMALL_STATE(1323)] = 73154, + [SMALL_STATE(1324)] = 73201, + [SMALL_STATE(1325)] = 73230, + [SMALL_STATE(1326)] = 73259, + [SMALL_STATE(1327)] = 73292, + [SMALL_STATE(1328)] = 73321, + [SMALL_STATE(1329)] = 73350, + [SMALL_STATE(1330)] = 73385, + [SMALL_STATE(1331)] = 73414, + [SMALL_STATE(1332)] = 73443, + [SMALL_STATE(1333)] = 73472, + [SMALL_STATE(1334)] = 73501, + [SMALL_STATE(1335)] = 73530, + [SMALL_STATE(1336)] = 73559, + [SMALL_STATE(1337)] = 73588, + [SMALL_STATE(1338)] = 73617, + [SMALL_STATE(1339)] = 73670, + [SMALL_STATE(1340)] = 73699, + [SMALL_STATE(1341)] = 73728, + [SMALL_STATE(1342)] = 73757, + [SMALL_STATE(1343)] = 73786, + [SMALL_STATE(1344)] = 73815, + [SMALL_STATE(1345)] = 73844, + [SMALL_STATE(1346)] = 73873, + [SMALL_STATE(1347)] = 73902, + [SMALL_STATE(1348)] = 73931, + [SMALL_STATE(1349)] = 73960, + [SMALL_STATE(1350)] = 73989, + [SMALL_STATE(1351)] = 74042, + [SMALL_STATE(1352)] = 74071, + [SMALL_STATE(1353)] = 74100, + [SMALL_STATE(1354)] = 74129, + [SMALL_STATE(1355)] = 74182, + [SMALL_STATE(1356)] = 74215, + [SMALL_STATE(1357)] = 74250, + [SMALL_STATE(1358)] = 74279, + [SMALL_STATE(1359)] = 74308, + [SMALL_STATE(1360)] = 74337, + [SMALL_STATE(1361)] = 74390, + [SMALL_STATE(1362)] = 74423, + [SMALL_STATE(1363)] = 74452, + [SMALL_STATE(1364)] = 74481, + [SMALL_STATE(1365)] = 74510, + [SMALL_STATE(1366)] = 74563, + [SMALL_STATE(1367)] = 74592, + [SMALL_STATE(1368)] = 74621, + [SMALL_STATE(1369)] = 74650, + [SMALL_STATE(1370)] = 74679, + [SMALL_STATE(1371)] = 74708, + [SMALL_STATE(1372)] = 74737, + [SMALL_STATE(1373)] = 74790, + [SMALL_STATE(1374)] = 74837, + [SMALL_STATE(1375)] = 74866, + [SMALL_STATE(1376)] = 74919, + [SMALL_STATE(1377)] = 74948, + [SMALL_STATE(1378)] = 74977, + [SMALL_STATE(1379)] = 75006, + [SMALL_STATE(1380)] = 75053, + [SMALL_STATE(1381)] = 75082, + [SMALL_STATE(1382)] = 75135, + [SMALL_STATE(1383)] = 75188, + [SMALL_STATE(1384)] = 75217, + [SMALL_STATE(1385)] = 75246, + [SMALL_STATE(1386)] = 75275, + [SMALL_STATE(1387)] = 75304, + [SMALL_STATE(1388)] = 75333, + [SMALL_STATE(1389)] = 75362, + [SMALL_STATE(1390)] = 75391, + [SMALL_STATE(1391)] = 75420, + [SMALL_STATE(1392)] = 75449, + [SMALL_STATE(1393)] = 75478, + [SMALL_STATE(1394)] = 75531, + [SMALL_STATE(1395)] = 75560, + [SMALL_STATE(1396)] = 75600, + [SMALL_STATE(1397)] = 75650, + [SMALL_STATE(1398)] = 75688, + [SMALL_STATE(1399)] = 75722, + [SMALL_STATE(1400)] = 75756, + [SMALL_STATE(1401)] = 75788, + [SMALL_STATE(1402)] = 75822, + [SMALL_STATE(1403)] = 75866, + [SMALL_STATE(1404)] = 75898, + [SMALL_STATE(1405)] = 75930, + [SMALL_STATE(1406)] = 75962, + [SMALL_STATE(1407)] = 76002, + [SMALL_STATE(1408)] = 76034, + [SMALL_STATE(1409)] = 76064, + [SMALL_STATE(1410)] = 76102, + [SMALL_STATE(1411)] = 76136, + [SMALL_STATE(1412)] = 76173, + [SMALL_STATE(1413)] = 76200, + [SMALL_STATE(1414)] = 76227, + [SMALL_STATE(1415)] = 76258, + [SMALL_STATE(1416)] = 76293, + [SMALL_STATE(1417)] = 76320, + [SMALL_STATE(1418)] = 76351, + [SMALL_STATE(1419)] = 76378, + [SMALL_STATE(1420)] = 76411, + [SMALL_STATE(1421)] = 76446, + [SMALL_STATE(1422)] = 76473, + [SMALL_STATE(1423)] = 76500, + [SMALL_STATE(1424)] = 76527, + [SMALL_STATE(1425)] = 76554, + [SMALL_STATE(1426)] = 76581, + [SMALL_STATE(1427)] = 76608, + [SMALL_STATE(1428)] = 76635, + [SMALL_STATE(1429)] = 76666, + [SMALL_STATE(1430)] = 76707, + [SMALL_STATE(1431)] = 76734, + [SMALL_STATE(1432)] = 76771, + [SMALL_STATE(1433)] = 76802, + [SMALL_STATE(1434)] = 76843, + [SMALL_STATE(1435)] = 76872, + [SMALL_STATE(1436)] = 76903, + [SMALL_STATE(1437)] = 76930, + [SMALL_STATE(1438)] = 76961, + [SMALL_STATE(1439)] = 76988, + [SMALL_STATE(1440)] = 77023, + [SMALL_STATE(1441)] = 77059, + [SMALL_STATE(1442)] = 77085, + [SMALL_STATE(1443)] = 77123, + [SMALL_STATE(1444)] = 77161, + [SMALL_STATE(1445)] = 77199, + [SMALL_STATE(1446)] = 77237, + [SMALL_STATE(1447)] = 77267, + [SMALL_STATE(1448)] = 77305, + [SMALL_STATE(1449)] = 77341, + [SMALL_STATE(1450)] = 77371, + [SMALL_STATE(1451)] = 77397, + [SMALL_STATE(1452)] = 77423, + [SMALL_STATE(1453)] = 77449, + [SMALL_STATE(1454)] = 77487, + [SMALL_STATE(1455)] = 77513, + [SMALL_STATE(1456)] = 77539, + [SMALL_STATE(1457)] = 77577, + [SMALL_STATE(1458)] = 77603, + [SMALL_STATE(1459)] = 77639, + [SMALL_STATE(1460)] = 77665, + [SMALL_STATE(1461)] = 77691, + [SMALL_STATE(1462)] = 77717, + [SMALL_STATE(1463)] = 77743, + [SMALL_STATE(1464)] = 77769, + [SMALL_STATE(1465)] = 77795, + [SMALL_STATE(1466)] = 77821, + [SMALL_STATE(1467)] = 77860, + [SMALL_STATE(1468)] = 77899, + [SMALL_STATE(1469)] = 77930, + [SMALL_STATE(1470)] = 77973, + [SMALL_STATE(1471)] = 78016, + [SMALL_STATE(1472)] = 78055, + [SMALL_STATE(1473)] = 78084, + [SMALL_STATE(1474)] = 78127, + [SMALL_STATE(1475)] = 78162, + [SMALL_STATE(1476)] = 78205, + [SMALL_STATE(1477)] = 78244, + [SMALL_STATE(1478)] = 78283, + [SMALL_STATE(1479)] = 78322, + [SMALL_STATE(1480)] = 78365, + [SMALL_STATE(1481)] = 78400, + [SMALL_STATE(1482)] = 78439, + [SMALL_STATE(1483)] = 78478, + [SMALL_STATE(1484)] = 78517, + [SMALL_STATE(1485)] = 78560, + [SMALL_STATE(1486)] = 78599, + [SMALL_STATE(1487)] = 78630, + [SMALL_STATE(1488)] = 78673, + [SMALL_STATE(1489)] = 78712, + [SMALL_STATE(1490)] = 78747, + [SMALL_STATE(1491)] = 78790, + [SMALL_STATE(1492)] = 78833, + [SMALL_STATE(1493)] = 78872, + [SMALL_STATE(1494)] = 78907, + [SMALL_STATE(1495)] = 78946, + [SMALL_STATE(1496)] = 78985, + [SMALL_STATE(1497)] = 79028, + [SMALL_STATE(1498)] = 79067, + [SMALL_STATE(1499)] = 79110, + [SMALL_STATE(1500)] = 79149, + [SMALL_STATE(1501)] = 79188, + [SMALL_STATE(1502)] = 79227, + [SMALL_STATE(1503)] = 79266, + [SMALL_STATE(1504)] = 79291, + [SMALL_STATE(1505)] = 79330, + [SMALL_STATE(1506)] = 79369, + [SMALL_STATE(1507)] = 79408, + [SMALL_STATE(1508)] = 79451, + [SMALL_STATE(1509)] = 79490, + [SMALL_STATE(1510)] = 79529, + [SMALL_STATE(1511)] = 79572, + [SMALL_STATE(1512)] = 79613, + [SMALL_STATE(1513)] = 79642, + [SMALL_STATE(1514)] = 79681, + [SMALL_STATE(1515)] = 79710, + [SMALL_STATE(1516)] = 79749, + [SMALL_STATE(1517)] = 79788, + [SMALL_STATE(1518)] = 79827, + [SMALL_STATE(1519)] = 79866, + [SMALL_STATE(1520)] = 79905, + [SMALL_STATE(1521)] = 79944, + [SMALL_STATE(1522)] = 79983, + [SMALL_STATE(1523)] = 80022, + [SMALL_STATE(1524)] = 80061, + [SMALL_STATE(1525)] = 80100, + [SMALL_STATE(1526)] = 80139, + [SMALL_STATE(1527)] = 80178, + [SMALL_STATE(1528)] = 80217, + [SMALL_STATE(1529)] = 80256, + [SMALL_STATE(1530)] = 80295, + [SMALL_STATE(1531)] = 80334, + [SMALL_STATE(1532)] = 80377, + [SMALL_STATE(1533)] = 80420, + [SMALL_STATE(1534)] = 80455, + [SMALL_STATE(1535)] = 80494, + [SMALL_STATE(1536)] = 80533, + [SMALL_STATE(1537)] = 80574, + [SMALL_STATE(1538)] = 80613, + [SMALL_STATE(1539)] = 80652, + [SMALL_STATE(1540)] = 80691, + [SMALL_STATE(1541)] = 80730, + [SMALL_STATE(1542)] = 80773, + [SMALL_STATE(1543)] = 80812, + [SMALL_STATE(1544)] = 80851, + [SMALL_STATE(1545)] = 80880, + [SMALL_STATE(1546)] = 80919, + [SMALL_STATE(1547)] = 80958, + [SMALL_STATE(1548)] = 80997, + [SMALL_STATE(1549)] = 81036, + [SMALL_STATE(1550)] = 81075, + [SMALL_STATE(1551)] = 81114, + [SMALL_STATE(1552)] = 81157, + [SMALL_STATE(1553)] = 81196, + [SMALL_STATE(1554)] = 81235, + [SMALL_STATE(1555)] = 81274, + [SMALL_STATE(1556)] = 81313, + [SMALL_STATE(1557)] = 81352, + [SMALL_STATE(1558)] = 81391, + [SMALL_STATE(1559)] = 81434, + [SMALL_STATE(1560)] = 81475, + [SMALL_STATE(1561)] = 81514, + [SMALL_STATE(1562)] = 81553, + [SMALL_STATE(1563)] = 81592, + [SMALL_STATE(1564)] = 81631, + [SMALL_STATE(1565)] = 81670, + [SMALL_STATE(1566)] = 81709, + [SMALL_STATE(1567)] = 81752, + [SMALL_STATE(1568)] = 81787, + [SMALL_STATE(1569)] = 81826, + [SMALL_STATE(1570)] = 81857, + [SMALL_STATE(1571)] = 81896, + [SMALL_STATE(1572)] = 81927, + [SMALL_STATE(1573)] = 81966, + [SMALL_STATE(1574)] = 82005, + [SMALL_STATE(1575)] = 82044, + [SMALL_STATE(1576)] = 82087, + [SMALL_STATE(1577)] = 82126, + [SMALL_STATE(1578)] = 82169, + [SMALL_STATE(1579)] = 82193, + [SMALL_STATE(1580)] = 82217, + [SMALL_STATE(1581)] = 82245, + [SMALL_STATE(1582)] = 82283, + [SMALL_STATE(1583)] = 82307, + [SMALL_STATE(1584)] = 82331, + [SMALL_STATE(1585)] = 82369, + [SMALL_STATE(1586)] = 82393, + [SMALL_STATE(1587)] = 82431, + [SMALL_STATE(1588)] = 82459, + [SMALL_STATE(1589)] = 82497, + [SMALL_STATE(1590)] = 82521, + [SMALL_STATE(1591)] = 82559, + [SMALL_STATE(1592)] = 82583, + [SMALL_STATE(1593)] = 82607, + [SMALL_STATE(1594)] = 82645, + [SMALL_STATE(1595)] = 82683, + [SMALL_STATE(1596)] = 82721, + [SMALL_STATE(1597)] = 82745, + [SMALL_STATE(1598)] = 82769, + [SMALL_STATE(1599)] = 82807, + [SMALL_STATE(1600)] = 82845, + [SMALL_STATE(1601)] = 82883, + [SMALL_STATE(1602)] = 82907, + [SMALL_STATE(1603)] = 82945, + [SMALL_STATE(1604)] = 82983, + [SMALL_STATE(1605)] = 83021, + [SMALL_STATE(1606)] = 83045, + [SMALL_STATE(1607)] = 83069, + [SMALL_STATE(1608)] = 83093, + [SMALL_STATE(1609)] = 83117, + [SMALL_STATE(1610)] = 83149, + [SMALL_STATE(1611)] = 83173, + [SMALL_STATE(1612)] = 83197, + [SMALL_STATE(1613)] = 83221, + [SMALL_STATE(1614)] = 83245, + [SMALL_STATE(1615)] = 83283, + [SMALL_STATE(1616)] = 83321, + [SMALL_STATE(1617)] = 83345, + [SMALL_STATE(1618)] = 83369, + [SMALL_STATE(1619)] = 83393, + [SMALL_STATE(1620)] = 83417, + [SMALL_STATE(1621)] = 83441, + [SMALL_STATE(1622)] = 83465, + [SMALL_STATE(1623)] = 83489, + [SMALL_STATE(1624)] = 83513, + [SMALL_STATE(1625)] = 83537, + [SMALL_STATE(1626)] = 83561, + [SMALL_STATE(1627)] = 83585, + [SMALL_STATE(1628)] = 83609, + [SMALL_STATE(1629)] = 83633, + [SMALL_STATE(1630)] = 83657, + [SMALL_STATE(1631)] = 83681, + [SMALL_STATE(1632)] = 83705, + [SMALL_STATE(1633)] = 83729, + [SMALL_STATE(1634)] = 83753, + [SMALL_STATE(1635)] = 83777, + [SMALL_STATE(1636)] = 83801, + [SMALL_STATE(1637)] = 83825, + [SMALL_STATE(1638)] = 83849, + [SMALL_STATE(1639)] = 83887, + [SMALL_STATE(1640)] = 83911, + [SMALL_STATE(1641)] = 83935, + [SMALL_STATE(1642)] = 83973, + [SMALL_STATE(1643)] = 83997, + [SMALL_STATE(1644)] = 84035, + [SMALL_STATE(1645)] = 84073, + [SMALL_STATE(1646)] = 84097, + [SMALL_STATE(1647)] = 84121, + [SMALL_STATE(1648)] = 84145, + [SMALL_STATE(1649)] = 84169, + [SMALL_STATE(1650)] = 84193, + [SMALL_STATE(1651)] = 84231, + [SMALL_STATE(1652)] = 84255, + [SMALL_STATE(1653)] = 84279, + [SMALL_STATE(1654)] = 84303, + [SMALL_STATE(1655)] = 84327, + [SMALL_STATE(1656)] = 84351, + [SMALL_STATE(1657)] = 84375, + [SMALL_STATE(1658)] = 84399, + [SMALL_STATE(1659)] = 84423, + [SMALL_STATE(1660)] = 84447, + [SMALL_STATE(1661)] = 84471, + [SMALL_STATE(1662)] = 84495, + [SMALL_STATE(1663)] = 84519, + [SMALL_STATE(1664)] = 84543, + [SMALL_STATE(1665)] = 84581, + [SMALL_STATE(1666)] = 84605, + [SMALL_STATE(1667)] = 84629, + [SMALL_STATE(1668)] = 84653, + [SMALL_STATE(1669)] = 84691, + [SMALL_STATE(1670)] = 84719, + [SMALL_STATE(1671)] = 84757, + [SMALL_STATE(1672)] = 84781, + [SMALL_STATE(1673)] = 84805, + [SMALL_STATE(1674)] = 84843, + [SMALL_STATE(1675)] = 84881, + [SMALL_STATE(1676)] = 84919, + [SMALL_STATE(1677)] = 84957, + [SMALL_STATE(1678)] = 84995, + [SMALL_STATE(1679)] = 85033, + [SMALL_STATE(1680)] = 85071, + [SMALL_STATE(1681)] = 85109, + [SMALL_STATE(1682)] = 85147, + [SMALL_STATE(1683)] = 85170, + [SMALL_STATE(1684)] = 85193, + [SMALL_STATE(1685)] = 85216, + [SMALL_STATE(1686)] = 85239, + [SMALL_STATE(1687)] = 85262, + [SMALL_STATE(1688)] = 85285, + [SMALL_STATE(1689)] = 85308, + [SMALL_STATE(1690)] = 85331, + [SMALL_STATE(1691)] = 85354, + [SMALL_STATE(1692)] = 85377, + [SMALL_STATE(1693)] = 85400, + [SMALL_STATE(1694)] = 85423, + [SMALL_STATE(1695)] = 85446, + [SMALL_STATE(1696)] = 85483, + [SMALL_STATE(1697)] = 85520, + [SMALL_STATE(1698)] = 85563, + [SMALL_STATE(1699)] = 85592, + [SMALL_STATE(1700)] = 85621, + [SMALL_STATE(1701)] = 85658, + [SMALL_STATE(1702)] = 85681, + [SMALL_STATE(1703)] = 85709, + [SMALL_STATE(1704)] = 85737, + [SMALL_STATE(1705)] = 85765, + [SMALL_STATE(1706)] = 85793, + [SMALL_STATE(1707)] = 85821, + [SMALL_STATE(1708)] = 85849, + [SMALL_STATE(1709)] = 85877, + [SMALL_STATE(1710)] = 85905, + [SMALL_STATE(1711)] = 85933, + [SMALL_STATE(1712)] = 85961, + [SMALL_STATE(1713)] = 85989, + [SMALL_STATE(1714)] = 86017, + [SMALL_STATE(1715)] = 86045, + [SMALL_STATE(1716)] = 86073, + [SMALL_STATE(1717)] = 86101, + [SMALL_STATE(1718)] = 86129, + [SMALL_STATE(1719)] = 86157, + [SMALL_STATE(1720)] = 86185, + [SMALL_STATE(1721)] = 86213, + [SMALL_STATE(1722)] = 86241, + [SMALL_STATE(1723)] = 86269, + [SMALL_STATE(1724)] = 86297, + [SMALL_STATE(1725)] = 86325, + [SMALL_STATE(1726)] = 86353, + [SMALL_STATE(1727)] = 86375, + [SMALL_STATE(1728)] = 86403, + [SMALL_STATE(1729)] = 86431, + [SMALL_STATE(1730)] = 86459, + [SMALL_STATE(1731)] = 86481, + [SMALL_STATE(1732)] = 86509, + [SMALL_STATE(1733)] = 86537, + [SMALL_STATE(1734)] = 86565, + [SMALL_STATE(1735)] = 86593, + [SMALL_STATE(1736)] = 86621, + [SMALL_STATE(1737)] = 86649, + [SMALL_STATE(1738)] = 86677, + [SMALL_STATE(1739)] = 86705, + [SMALL_STATE(1740)] = 86733, + [SMALL_STATE(1741)] = 86761, + [SMALL_STATE(1742)] = 86789, + [SMALL_STATE(1743)] = 86817, + [SMALL_STATE(1744)] = 86845, + [SMALL_STATE(1745)] = 86871, + [SMALL_STATE(1746)] = 86899, + [SMALL_STATE(1747)] = 86927, + [SMALL_STATE(1748)] = 86955, + [SMALL_STATE(1749)] = 86983, + [SMALL_STATE(1750)] = 87011, + [SMALL_STATE(1751)] = 87039, + [SMALL_STATE(1752)] = 87067, + [SMALL_STATE(1753)] = 87095, + [SMALL_STATE(1754)] = 87123, + [SMALL_STATE(1755)] = 87151, + [SMALL_STATE(1756)] = 87179, + [SMALL_STATE(1757)] = 87207, + [SMALL_STATE(1758)] = 87235, + [SMALL_STATE(1759)] = 87263, + [SMALL_STATE(1760)] = 87291, + [SMALL_STATE(1761)] = 87319, + [SMALL_STATE(1762)] = 87347, + [SMALL_STATE(1763)] = 87375, + [SMALL_STATE(1764)] = 87403, + [SMALL_STATE(1765)] = 87431, + [SMALL_STATE(1766)] = 87459, + [SMALL_STATE(1767)] = 87487, + [SMALL_STATE(1768)] = 87515, + [SMALL_STATE(1769)] = 87543, + [SMALL_STATE(1770)] = 87572, + [SMALL_STATE(1771)] = 87601, + [SMALL_STATE(1772)] = 87630, + [SMALL_STATE(1773)] = 87659, + [SMALL_STATE(1774)] = 87688, + [SMALL_STATE(1775)] = 87717, + [SMALL_STATE(1776)] = 87746, + [SMALL_STATE(1777)] = 87775, + [SMALL_STATE(1778)] = 87804, + [SMALL_STATE(1779)] = 87833, + [SMALL_STATE(1780)] = 87862, + [SMALL_STATE(1781)] = 87891, + [SMALL_STATE(1782)] = 87916, + [SMALL_STATE(1783)] = 87945, + [SMALL_STATE(1784)] = 87974, + [SMALL_STATE(1785)] = 88003, + [SMALL_STATE(1786)] = 88032, + [SMALL_STATE(1787)] = 88061, + [SMALL_STATE(1788)] = 88094, + [SMALL_STATE(1789)] = 88119, + [SMALL_STATE(1790)] = 88148, + [SMALL_STATE(1791)] = 88177, + [SMALL_STATE(1792)] = 88202, + [SMALL_STATE(1793)] = 88231, + [SMALL_STATE(1794)] = 88260, + [SMALL_STATE(1795)] = 88289, + [SMALL_STATE(1796)] = 88318, + [SMALL_STATE(1797)] = 88347, + [SMALL_STATE(1798)] = 88376, + [SMALL_STATE(1799)] = 88405, + [SMALL_STATE(1800)] = 88434, + [SMALL_STATE(1801)] = 88463, + [SMALL_STATE(1802)] = 88492, + [SMALL_STATE(1803)] = 88521, + [SMALL_STATE(1804)] = 88550, + [SMALL_STATE(1805)] = 88579, + [SMALL_STATE(1806)] = 88608, + [SMALL_STATE(1807)] = 88642, + [SMALL_STATE(1808)] = 88664, + [SMALL_STATE(1809)] = 88690, + [SMALL_STATE(1810)] = 88712, + [SMALL_STATE(1811)] = 88734, + [SMALL_STATE(1812)] = 88768, + [SMALL_STATE(1813)] = 88790, + [SMALL_STATE(1814)] = 88824, + [SMALL_STATE(1815)] = 88846, + [SMALL_STATE(1816)] = 88880, + [SMALL_STATE(1817)] = 88902, + [SMALL_STATE(1818)] = 88936, + [SMALL_STATE(1819)] = 88958, + [SMALL_STATE(1820)] = 88980, + [SMALL_STATE(1821)] = 89002, + [SMALL_STATE(1822)] = 89036, + [SMALL_STATE(1823)] = 89070, + [SMALL_STATE(1824)] = 89104, + [SMALL_STATE(1825)] = 89126, + [SMALL_STATE(1826)] = 89160, + [SMALL_STATE(1827)] = 89186, + [SMALL_STATE(1828)] = 89220, + [SMALL_STATE(1829)] = 89242, + [SMALL_STATE(1830)] = 89264, + [SMALL_STATE(1831)] = 89298, + [SMALL_STATE(1832)] = 89324, + [SMALL_STATE(1833)] = 89358, + [SMALL_STATE(1834)] = 89392, + [SMALL_STATE(1835)] = 89414, + [SMALL_STATE(1836)] = 89448, + [SMALL_STATE(1837)] = 89482, + [SMALL_STATE(1838)] = 89504, + [SMALL_STATE(1839)] = 89538, + [SMALL_STATE(1840)] = 89572, + [SMALL_STATE(1841)] = 89594, + [SMALL_STATE(1842)] = 89628, + [SMALL_STATE(1843)] = 89650, + [SMALL_STATE(1844)] = 89684, + [SMALL_STATE(1845)] = 89718, + [SMALL_STATE(1846)] = 89752, + [SMALL_STATE(1847)] = 89786, + [SMALL_STATE(1848)] = 89812, + [SMALL_STATE(1849)] = 89846, + [SMALL_STATE(1850)] = 89880, + [SMALL_STATE(1851)] = 89914, + [SMALL_STATE(1852)] = 89948, + [SMALL_STATE(1853)] = 89970, + [SMALL_STATE(1854)] = 89992, + [SMALL_STATE(1855)] = 90026, + [SMALL_STATE(1856)] = 90060, + [SMALL_STATE(1857)] = 90080, + [SMALL_STATE(1858)] = 90114, + [SMALL_STATE(1859)] = 90148, + [SMALL_STATE(1860)] = 90170, + [SMALL_STATE(1861)] = 90204, + [SMALL_STATE(1862)] = 90238, + [SMALL_STATE(1863)] = 90272, + [SMALL_STATE(1864)] = 90306, + [SMALL_STATE(1865)] = 90340, + [SMALL_STATE(1866)] = 90362, + [SMALL_STATE(1867)] = 90384, + [SMALL_STATE(1868)] = 90418, + [SMALL_STATE(1869)] = 90452, + [SMALL_STATE(1870)] = 90474, + [SMALL_STATE(1871)] = 90496, + [SMALL_STATE(1872)] = 90530, + [SMALL_STATE(1873)] = 90556, + [SMALL_STATE(1874)] = 90578, + [SMALL_STATE(1875)] = 90612, + [SMALL_STATE(1876)] = 90646, + [SMALL_STATE(1877)] = 90668, + [SMALL_STATE(1878)] = 90694, + [SMALL_STATE(1879)] = 90728, + [SMALL_STATE(1880)] = 90750, + [SMALL_STATE(1881)] = 90784, + [SMALL_STATE(1882)] = 90818, + [SMALL_STATE(1883)] = 90840, + [SMALL_STATE(1884)] = 90874, + [SMALL_STATE(1885)] = 90908, + [SMALL_STATE(1886)] = 90942, + [SMALL_STATE(1887)] = 90964, + [SMALL_STATE(1888)] = 90990, + [SMALL_STATE(1889)] = 91012, + [SMALL_STATE(1890)] = 91046, + [SMALL_STATE(1891)] = 91080, + [SMALL_STATE(1892)] = 91102, + [SMALL_STATE(1893)] = 91124, + [SMALL_STATE(1894)] = 91158, + [SMALL_STATE(1895)] = 91180, + [SMALL_STATE(1896)] = 91202, + [SMALL_STATE(1897)] = 91236, + [SMALL_STATE(1898)] = 91270, + [SMALL_STATE(1899)] = 91304, + [SMALL_STATE(1900)] = 91326, + [SMALL_STATE(1901)] = 91360, + [SMALL_STATE(1902)] = 91382, + [SMALL_STATE(1903)] = 91404, + [SMALL_STATE(1904)] = 91438, + [SMALL_STATE(1905)] = 91460, + [SMALL_STATE(1906)] = 91482, + [SMALL_STATE(1907)] = 91516, + [SMALL_STATE(1908)] = 91550, + [SMALL_STATE(1909)] = 91584, + [SMALL_STATE(1910)] = 91618, + [SMALL_STATE(1911)] = 91652, + [SMALL_STATE(1912)] = 91686, + [SMALL_STATE(1913)] = 91708, + [SMALL_STATE(1914)] = 91742, + [SMALL_STATE(1915)] = 91776, + [SMALL_STATE(1916)] = 91810, + [SMALL_STATE(1917)] = 91832, + [SMALL_STATE(1918)] = 91854, + [SMALL_STATE(1919)] = 91876, + [SMALL_STATE(1920)] = 91910, + [SMALL_STATE(1921)] = 91932, + [SMALL_STATE(1922)] = 91966, + [SMALL_STATE(1923)] = 91985, + [SMALL_STATE(1924)] = 92004, + [SMALL_STATE(1925)] = 92023, + [SMALL_STATE(1926)] = 92042, + [SMALL_STATE(1927)] = 92061, + [SMALL_STATE(1928)] = 92080, + [SMALL_STATE(1929)] = 92099, + [SMALL_STATE(1930)] = 92118, + [SMALL_STATE(1931)] = 92137, + [SMALL_STATE(1932)] = 92156, + [SMALL_STATE(1933)] = 92175, + [SMALL_STATE(1934)] = 92194, + [SMALL_STATE(1935)] = 92213, + [SMALL_STATE(1936)] = 92233, + [SMALL_STATE(1937)] = 92253, + [SMALL_STATE(1938)] = 92273, + [SMALL_STATE(1939)] = 92293, + [SMALL_STATE(1940)] = 92313, + [SMALL_STATE(1941)] = 92333, + [SMALL_STATE(1942)] = 92353, + [SMALL_STATE(1943)] = 92381, + [SMALL_STATE(1944)] = 92401, + [SMALL_STATE(1945)] = 92429, + [SMALL_STATE(1946)] = 92457, + [SMALL_STATE(1947)] = 92477, + [SMALL_STATE(1948)] = 92497, + [SMALL_STATE(1949)] = 92517, + [SMALL_STATE(1950)] = 92537, + [SMALL_STATE(1951)] = 92557, + [SMALL_STATE(1952)] = 92577, + [SMALL_STATE(1953)] = 92597, + [SMALL_STATE(1954)] = 92613, + [SMALL_STATE(1955)] = 92640, + [SMALL_STATE(1956)] = 92665, + [SMALL_STATE(1957)] = 92692, + [SMALL_STATE(1958)] = 92719, + [SMALL_STATE(1959)] = 92735, + [SMALL_STATE(1960)] = 92761, + [SMALL_STATE(1961)] = 92777, + [SMALL_STATE(1962)] = 92793, + [SMALL_STATE(1963)] = 92815, + [SMALL_STATE(1964)] = 92831, + [SMALL_STATE(1965)] = 92847, + [SMALL_STATE(1966)] = 92863, + [SMALL_STATE(1967)] = 92879, + [SMALL_STATE(1968)] = 92895, + [SMALL_STATE(1969)] = 92917, + [SMALL_STATE(1970)] = 92933, + [SMALL_STATE(1971)] = 92949, + [SMALL_STATE(1972)] = 92975, + [SMALL_STATE(1973)] = 93001, + [SMALL_STATE(1974)] = 93017, + [SMALL_STATE(1975)] = 93032, + [SMALL_STATE(1976)] = 93047, + [SMALL_STATE(1977)] = 93062, + [SMALL_STATE(1978)] = 93077, + [SMALL_STATE(1979)] = 93092, + [SMALL_STATE(1980)] = 93107, + [SMALL_STATE(1981)] = 93120, + [SMALL_STATE(1982)] = 93135, + [SMALL_STATE(1983)] = 93150, + [SMALL_STATE(1984)] = 93163, + [SMALL_STATE(1985)] = 93178, + [SMALL_STATE(1986)] = 93193, + [SMALL_STATE(1987)] = 93208, + [SMALL_STATE(1988)] = 93223, + [SMALL_STATE(1989)] = 93238, + [SMALL_STATE(1990)] = 93253, + [SMALL_STATE(1991)] = 93271, + [SMALL_STATE(1992)] = 93291, + [SMALL_STATE(1993)] = 93311, + [SMALL_STATE(1994)] = 93329, + [SMALL_STATE(1995)] = 93343, + [SMALL_STATE(1996)] = 93363, + [SMALL_STATE(1997)] = 93381, + [SMALL_STATE(1998)] = 93401, + [SMALL_STATE(1999)] = 93421, + [SMALL_STATE(2000)] = 93439, + [SMALL_STATE(2001)] = 93453, + [SMALL_STATE(2002)] = 93467, + [SMALL_STATE(2003)] = 93481, + [SMALL_STATE(2004)] = 93501, + [SMALL_STATE(2005)] = 93521, + [SMALL_STATE(2006)] = 93535, + [SMALL_STATE(2007)] = 93549, + [SMALL_STATE(2008)] = 93563, + [SMALL_STATE(2009)] = 93577, + [SMALL_STATE(2010)] = 93595, + [SMALL_STATE(2011)] = 93609, + [SMALL_STATE(2012)] = 93623, + [SMALL_STATE(2013)] = 93641, + [SMALL_STATE(2014)] = 93661, + [SMALL_STATE(2015)] = 93681, + [SMALL_STATE(2016)] = 93701, + [SMALL_STATE(2017)] = 93715, + [SMALL_STATE(2018)] = 93729, + [SMALL_STATE(2019)] = 93746, + [SMALL_STATE(2020)] = 93763, + [SMALL_STATE(2021)] = 93774, + [SMALL_STATE(2022)] = 93785, + [SMALL_STATE(2023)] = 93796, + [SMALL_STATE(2024)] = 93807, + [SMALL_STATE(2025)] = 93826, + [SMALL_STATE(2026)] = 93845, + [SMALL_STATE(2027)] = 93864, + [SMALL_STATE(2028)] = 93881, + [SMALL_STATE(2029)] = 93898, + [SMALL_STATE(2030)] = 93915, + [SMALL_STATE(2031)] = 93934, + [SMALL_STATE(2032)] = 93951, + [SMALL_STATE(2033)] = 93970, + [SMALL_STATE(2034)] = 93987, + [SMALL_STATE(2035)] = 94004, + [SMALL_STATE(2036)] = 94023, + [SMALL_STATE(2037)] = 94042, + [SMALL_STATE(2038)] = 94057, + [SMALL_STATE(2039)] = 94076, + [SMALL_STATE(2040)] = 94095, + [SMALL_STATE(2041)] = 94114, + [SMALL_STATE(2042)] = 94133, + [SMALL_STATE(2043)] = 94150, + [SMALL_STATE(2044)] = 94167, + [SMALL_STATE(2045)] = 94184, + [SMALL_STATE(2046)] = 94203, + [SMALL_STATE(2047)] = 94222, + [SMALL_STATE(2048)] = 94241, + [SMALL_STATE(2049)] = 94260, + [SMALL_STATE(2050)] = 94277, + [SMALL_STATE(2051)] = 94294, + [SMALL_STATE(2052)] = 94305, + [SMALL_STATE(2053)] = 94316, + [SMALL_STATE(2054)] = 94327, + [SMALL_STATE(2055)] = 94338, + [SMALL_STATE(2056)] = 94355, + [SMALL_STATE(2057)] = 94372, + [SMALL_STATE(2058)] = 94389, + [SMALL_STATE(2059)] = 94408, + [SMALL_STATE(2060)] = 94419, + [SMALL_STATE(2061)] = 94438, + [SMALL_STATE(2062)] = 94457, + [SMALL_STATE(2063)] = 94474, + [SMALL_STATE(2064)] = 94491, + [SMALL_STATE(2065)] = 94502, + [SMALL_STATE(2066)] = 94517, + [SMALL_STATE(2067)] = 94532, + [SMALL_STATE(2068)] = 94543, + [SMALL_STATE(2069)] = 94560, + [SMALL_STATE(2070)] = 94570, + [SMALL_STATE(2071)] = 94580, + [SMALL_STATE(2072)] = 94594, + [SMALL_STATE(2073)] = 94608, + [SMALL_STATE(2074)] = 94622, + [SMALL_STATE(2075)] = 94632, + [SMALL_STATE(2076)] = 94645, + [SMALL_STATE(2077)] = 94654, + [SMALL_STATE(2078)] = 94665, + [SMALL_STATE(2079)] = 94678, + [SMALL_STATE(2080)] = 94687, + [SMALL_STATE(2081)] = 94696, + [SMALL_STATE(2082)] = 94707, + [SMALL_STATE(2083)] = 94716, + [SMALL_STATE(2084)] = 94729, + [SMALL_STATE(2085)] = 94738, + [SMALL_STATE(2086)] = 94751, + [SMALL_STATE(2087)] = 94760, + [SMALL_STATE(2088)] = 94773, + [SMALL_STATE(2089)] = 94786, + [SMALL_STATE(2090)] = 94795, + [SMALL_STATE(2091)] = 94804, + [SMALL_STATE(2092)] = 94813, + [SMALL_STATE(2093)] = 94826, + [SMALL_STATE(2094)] = 94839, + [SMALL_STATE(2095)] = 94852, + [SMALL_STATE(2096)] = 94865, + [SMALL_STATE(2097)] = 94874, + [SMALL_STATE(2098)] = 94887, + [SMALL_STATE(2099)] = 94900, + [SMALL_STATE(2100)] = 94913, + [SMALL_STATE(2101)] = 94923, + [SMALL_STATE(2102)] = 94933, + [SMALL_STATE(2103)] = 94941, + [SMALL_STATE(2104)] = 94949, + [SMALL_STATE(2105)] = 94959, + [SMALL_STATE(2106)] = 94969, + [SMALL_STATE(2107)] = 94979, + [SMALL_STATE(2108)] = 94989, + [SMALL_STATE(2109)] = 94999, + [SMALL_STATE(2110)] = 95009, + [SMALL_STATE(2111)] = 95019, + [SMALL_STATE(2112)] = 95027, + [SMALL_STATE(2113)] = 95037, + [SMALL_STATE(2114)] = 95047, + [SMALL_STATE(2115)] = 95057, + [SMALL_STATE(2116)] = 95067, + [SMALL_STATE(2117)] = 95077, + [SMALL_STATE(2118)] = 95087, + [SMALL_STATE(2119)] = 95097, + [SMALL_STATE(2120)] = 95107, + [SMALL_STATE(2121)] = 95117, + [SMALL_STATE(2122)] = 95127, + [SMALL_STATE(2123)] = 95137, + [SMALL_STATE(2124)] = 95147, + [SMALL_STATE(2125)] = 95157, + [SMALL_STATE(2126)] = 95167, + [SMALL_STATE(2127)] = 95177, + [SMALL_STATE(2128)] = 95187, + [SMALL_STATE(2129)] = 95194, + [SMALL_STATE(2130)] = 95201, + [SMALL_STATE(2131)] = 95208, + [SMALL_STATE(2132)] = 95215, + [SMALL_STATE(2133)] = 95222, + [SMALL_STATE(2134)] = 95229, + [SMALL_STATE(2135)] = 95236, + [SMALL_STATE(2136)] = 95243, + [SMALL_STATE(2137)] = 95250, + [SMALL_STATE(2138)] = 95257, + [SMALL_STATE(2139)] = 95264, + [SMALL_STATE(2140)] = 95271, + [SMALL_STATE(2141)] = 95278, + [SMALL_STATE(2142)] = 95285, + [SMALL_STATE(2143)] = 95292, + [SMALL_STATE(2144)] = 95299, + [SMALL_STATE(2145)] = 95306, + [SMALL_STATE(2146)] = 95313, + [SMALL_STATE(2147)] = 95320, + [SMALL_STATE(2148)] = 95327, + [SMALL_STATE(2149)] = 95334, + [SMALL_STATE(2150)] = 95341, + [SMALL_STATE(2151)] = 95348, + [SMALL_STATE(2152)] = 95355, + [SMALL_STATE(2153)] = 95362, + [SMALL_STATE(2154)] = 95369, + [SMALL_STATE(2155)] = 95376, + [SMALL_STATE(2156)] = 95383, + [SMALL_STATE(2157)] = 95390, + [SMALL_STATE(2158)] = 95397, + [SMALL_STATE(2159)] = 95404, + [SMALL_STATE(2160)] = 95411, + [SMALL_STATE(2161)] = 95418, + [SMALL_STATE(2162)] = 95425, + [SMALL_STATE(2163)] = 95432, + [SMALL_STATE(2164)] = 95439, + [SMALL_STATE(2165)] = 95446, + [SMALL_STATE(2166)] = 95453, + [SMALL_STATE(2167)] = 95460, + [SMALL_STATE(2168)] = 95467, + [SMALL_STATE(2169)] = 95474, + [SMALL_STATE(2170)] = 95481, + [SMALL_STATE(2171)] = 95488, + [SMALL_STATE(2172)] = 95495, + [SMALL_STATE(2173)] = 95502, + [SMALL_STATE(2174)] = 95509, + [SMALL_STATE(2175)] = 95516, + [SMALL_STATE(2176)] = 95523, + [SMALL_STATE(2177)] = 95530, + [SMALL_STATE(2178)] = 95537, + [SMALL_STATE(2179)] = 95544, + [SMALL_STATE(2180)] = 95551, + [SMALL_STATE(2181)] = 95558, + [SMALL_STATE(2182)] = 95565, + [SMALL_STATE(2183)] = 95572, + [SMALL_STATE(2184)] = 95579, + [SMALL_STATE(2185)] = 95586, + [SMALL_STATE(2186)] = 95593, + [SMALL_STATE(2187)] = 95600, + [SMALL_STATE(2188)] = 95607, + [SMALL_STATE(2189)] = 95614, + [SMALL_STATE(2190)] = 95621, + [SMALL_STATE(2191)] = 95628, + [SMALL_STATE(2192)] = 95635, + [SMALL_STATE(2193)] = 95642, + [SMALL_STATE(2194)] = 95649, + [SMALL_STATE(2195)] = 95656, + [SMALL_STATE(2196)] = 95663, + [SMALL_STATE(2197)] = 95670, + [SMALL_STATE(2198)] = 95677, + [SMALL_STATE(2199)] = 95684, + [SMALL_STATE(2200)] = 95691, + [SMALL_STATE(2201)] = 95698, + [SMALL_STATE(2202)] = 95705, + [SMALL_STATE(2203)] = 95712, + [SMALL_STATE(2204)] = 95719, + [SMALL_STATE(2205)] = 95726, + [SMALL_STATE(2206)] = 95733, + [SMALL_STATE(2207)] = 95740, + [SMALL_STATE(2208)] = 95747, + [SMALL_STATE(2209)] = 95754, + [SMALL_STATE(2210)] = 95761, + [SMALL_STATE(2211)] = 95768, + [SMALL_STATE(2212)] = 95775, + [SMALL_STATE(2213)] = 95782, + [SMALL_STATE(2214)] = 95789, + [SMALL_STATE(2215)] = 95796, + [SMALL_STATE(2216)] = 95803, + [SMALL_STATE(2217)] = 95810, + [SMALL_STATE(2218)] = 95817, + [SMALL_STATE(2219)] = 95824, + [SMALL_STATE(2220)] = 95831, + [SMALL_STATE(2221)] = 95838, + [SMALL_STATE(2222)] = 95845, + [SMALL_STATE(2223)] = 95852, + [SMALL_STATE(2224)] = 95859, + [SMALL_STATE(2225)] = 95866, + [SMALL_STATE(2226)] = 95873, + [SMALL_STATE(2227)] = 95880, + [SMALL_STATE(2228)] = 95887, + [SMALL_STATE(2229)] = 95894, + [SMALL_STATE(2230)] = 95901, + [SMALL_STATE(2231)] = 95908, + [SMALL_STATE(2232)] = 95915, + [SMALL_STATE(2233)] = 95922, + [SMALL_STATE(2234)] = 95929, + [SMALL_STATE(2235)] = 95936, + [SMALL_STATE(2236)] = 95943, + [SMALL_STATE(2237)] = 95950, + [SMALL_STATE(2238)] = 95957, + [SMALL_STATE(2239)] = 95964, + [SMALL_STATE(2240)] = 95971, + [SMALL_STATE(2241)] = 95978, + [SMALL_STATE(2242)] = 95985, + [SMALL_STATE(2243)] = 95992, + [SMALL_STATE(2244)] = 95999, + [SMALL_STATE(2245)] = 96006, + [SMALL_STATE(2246)] = 96013, + [SMALL_STATE(2247)] = 96020, + [SMALL_STATE(2248)] = 96027, + [SMALL_STATE(2249)] = 96034, + [SMALL_STATE(2250)] = 96041, + [SMALL_STATE(2251)] = 96048, + [SMALL_STATE(2252)] = 96055, + [SMALL_STATE(2253)] = 96062, + [SMALL_STATE(2254)] = 96069, + [SMALL_STATE(2255)] = 96076, + [SMALL_STATE(2256)] = 96083, + [SMALL_STATE(2257)] = 96090, + [SMALL_STATE(2258)] = 96097, + [SMALL_STATE(2259)] = 96104, + [SMALL_STATE(2260)] = 96111, + [SMALL_STATE(2261)] = 96118, + [SMALL_STATE(2262)] = 96125, + [SMALL_STATE(2263)] = 96132, + [SMALL_STATE(2264)] = 96139, + [SMALL_STATE(2265)] = 96146, + [SMALL_STATE(2266)] = 96153, + [SMALL_STATE(2267)] = 96160, + [SMALL_STATE(2268)] = 96167, + [SMALL_STATE(2269)] = 96174, + [SMALL_STATE(2270)] = 96181, + [SMALL_STATE(2271)] = 96188, + [SMALL_STATE(2272)] = 96195, + [SMALL_STATE(2273)] = 96202, + [SMALL_STATE(2274)] = 96209, + [SMALL_STATE(2275)] = 96216, + [SMALL_STATE(2276)] = 96223, + [SMALL_STATE(2277)] = 96230, + [SMALL_STATE(2278)] = 96237, + [SMALL_STATE(2279)] = 96244, + [SMALL_STATE(2280)] = 96251, + [SMALL_STATE(2281)] = 96258, + [SMALL_STATE(2282)] = 96265, + [SMALL_STATE(2283)] = 96272, + [SMALL_STATE(2284)] = 96279, + [SMALL_STATE(2285)] = 96286, + [SMALL_STATE(2286)] = 96293, + [SMALL_STATE(2287)] = 96300, + [SMALL_STATE(2288)] = 96307, + [SMALL_STATE(2289)] = 96314, + [SMALL_STATE(2290)] = 96321, + [SMALL_STATE(2291)] = 96328, + [SMALL_STATE(2292)] = 96335, + [SMALL_STATE(2293)] = 96342, + [SMALL_STATE(2294)] = 96349, + [SMALL_STATE(2295)] = 96356, + [SMALL_STATE(2296)] = 96363, + [SMALL_STATE(2297)] = 96370, + [SMALL_STATE(2298)] = 96377, + [SMALL_STATE(2299)] = 96384, + [SMALL_STATE(2300)] = 96391, + [SMALL_STATE(2301)] = 96398, + [SMALL_STATE(2302)] = 96405, + [SMALL_STATE(2303)] = 96412, + [SMALL_STATE(2304)] = 96419, + [SMALL_STATE(2305)] = 96426, + [SMALL_STATE(2306)] = 96433, + [SMALL_STATE(2307)] = 96440, + [SMALL_STATE(2308)] = 96447, + [SMALL_STATE(2309)] = 96454, + [SMALL_STATE(2310)] = 96461, + [SMALL_STATE(2311)] = 96468, + [SMALL_STATE(2312)] = 96475, + [SMALL_STATE(2313)] = 96482, + [SMALL_STATE(2314)] = 96489, + [SMALL_STATE(2315)] = 96496, + [SMALL_STATE(2316)] = 96503, + [SMALL_STATE(2317)] = 96510, + [SMALL_STATE(2318)] = 96517, + [SMALL_STATE(2319)] = 96524, + [SMALL_STATE(2320)] = 96531, + [SMALL_STATE(2321)] = 96538, + [SMALL_STATE(2322)] = 96545, + [SMALL_STATE(2323)] = 96552, + [SMALL_STATE(2324)] = 96559, + [SMALL_STATE(2325)] = 96566, + [SMALL_STATE(2326)] = 96573, + [SMALL_STATE(2327)] = 96580, + [SMALL_STATE(2328)] = 96587, + [SMALL_STATE(2329)] = 96594, + [SMALL_STATE(2330)] = 96601, + [SMALL_STATE(2331)] = 96608, + [SMALL_STATE(2332)] = 96615, + [SMALL_STATE(2333)] = 96622, + [SMALL_STATE(2334)] = 96629, + [SMALL_STATE(2335)] = 96636, + [SMALL_STATE(2336)] = 96643, + [SMALL_STATE(2337)] = 96650, + [SMALL_STATE(2338)] = 96657, + [SMALL_STATE(2339)] = 96664, +}; + +static const TSParseActionEntry ts_parse_actions[] = { + [0] = {.entry = {.count = 0, .reusable = false}}, + [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(), + [3] = {.entry = {.count = 1, .reusable = false}}, SHIFT_EXTRA(), + [5] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_program, 0, 0, 0), + [7] = {.entry = {.count = 1, .reusable = false}}, SHIFT(292), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2338), + [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(139), + [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(127), + [15] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1700), + [17] = {.entry = {.count = 1, .reusable = false}}, SHIFT(53), + [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(126), + [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(417), + [23] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1581), + [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(221), + [27] = {.entry = {.count = 1, .reusable = false}}, SHIFT(894), + [29] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1809), + [31] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1815), + [33] = {.entry = {.count = 1, .reusable = false}}, SHIFT(291), + [35] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1796), + [37] = {.entry = {.count = 1, .reusable = false}}, SHIFT(123), + [39] = {.entry = {.count = 1, .reusable = false}}, SHIFT(107), + [41] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1943), + [43] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2339), + [45] = {.entry = {.count = 1, .reusable = false}}, SHIFT(419), + [47] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1617), + [49] = {.entry = {.count = 1, .reusable = false}}, SHIFT(128), + [51] = {.entry = {.count = 1, .reusable = false}}, SHIFT(46), + [53] = {.entry = {.count = 1, .reusable = false}}, SHIFT(366), + [55] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1680), + [57] = {.entry = {.count = 1, .reusable = false}}, SHIFT(264), + [59] = {.entry = {.count = 1, .reusable = false}}, SHIFT(919), + [61] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1904), + [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1898), + [65] = {.entry = {.count = 1, .reusable = false}}, SHIFT(420), + [67] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1799), + [69] = {.entry = {.count = 1, .reusable = false}}, SHIFT(112), + [71] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), + [73] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1950), + [75] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2186), + [77] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1222), + [79] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1620), + [81] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1260), + [83] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1378), + [85] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1388), + [87] = {.entry = {.count = 1, .reusable = false}}, SHIFT(288), + [89] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2252), + [91] = {.entry = {.count = 1, .reusable = false}}, SHIFT(132), + [93] = {.entry = {.count = 1, .reusable = false}}, SHIFT(131), + [95] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1696), + [97] = {.entry = {.count = 1, .reusable = false}}, SHIFT(111), + [99] = {.entry = {.count = 1, .reusable = false}}, SHIFT(709), + [101] = {.entry = {.count = 1, .reusable = false}}, SHIFT(135), + [103] = {.entry = {.count = 1, .reusable = false}}, SHIFT(312), + [105] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1681), + [107] = {.entry = {.count = 1, .reusable = false}}, SHIFT(223), + [109] = {.entry = {.count = 1, .reusable = false}}, SHIFT(895), + [111] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1892), + [113] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1919), + [115] = {.entry = {.count = 1, .reusable = false}}, SHIFT(289), + [117] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1789), + [119] = {.entry = {.count = 1, .reusable = false}}, SHIFT(116), + [121] = {.entry = {.count = 1, .reusable = false}}, SHIFT(121), + [123] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1946), + [125] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2143), + [127] = {.entry = {.count = 1, .reusable = false}}, SHIFT(8), + [129] = {.entry = {.count = 1, .reusable = false}}, SHIFT(14), + [131] = {.entry = {.count = 1, .reusable = false}}, SHIFT(34), + [133] = {.entry = {.count = 1, .reusable = false}}, SHIFT(23), + [135] = {.entry = {.count = 1, .reusable = false}}, SHIFT(10), + [137] = {.entry = {.count = 1, .reusable = false}}, SHIFT(13), + [139] = {.entry = {.count = 1, .reusable = false}}, SHIFT(17), + [141] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(419), + [144] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(2338), + [147] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(139), + [150] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(127), + [153] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), + [155] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(1700), + [158] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(53), + [161] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(126), + [164] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(366), + [167] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(1680), + [170] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(264), + [173] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(919), + [176] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(1904), + [179] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(1898), + [182] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(420), + [185] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(1799), + [188] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(112), + [191] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(40), + [194] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(1950), + [197] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__terminated_statement, 2, 0, 16), SHIFT_REPEAT(2186), + [200] = {.entry = {.count = 1, .reusable = false}}, SHIFT(19), + [202] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_elif_clause, 4, 0, 44), + [204] = {.entry = {.count = 1, .reusable = false}}, SHIFT(21), + [206] = {.entry = {.count = 1, .reusable = false}}, SHIFT(22), + [208] = {.entry = {.count = 1, .reusable = false}}, SHIFT(26), + [210] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_elif_clause, 3, 0, 35), + [212] = {.entry = {.count = 1, .reusable = false}}, SHIFT(30), + [214] = {.entry = {.count = 1, .reusable = false}}, SHIFT(41), + [216] = {.entry = {.count = 1, .reusable = false}}, SHIFT(117), + [218] = {.entry = {.count = 1, .reusable = false}}, SHIFT(86), + [220] = {.entry = {.count = 1, .reusable = false}}, SHIFT(302), + [222] = {.entry = {.count = 1, .reusable = false}}, SHIFT(350), + [224] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1603), + [226] = {.entry = {.count = 1, .reusable = false}}, SHIFT(241), + [228] = {.entry = {.count = 1, .reusable = false}}, SHIFT(299), + [230] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1941), + [232] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2250), + [234] = {.entry = {.count = 1, .reusable = false}}, SHIFT(348), + [236] = {.entry = {.count = 1, .reusable = false}}, SHIFT(355), + [238] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1390), + [240] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3), + [242] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_else_clause, 1, 0, 0), + [244] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1261), + [246] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1211), + [248] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_else_clause, 2, 0, 43), + [250] = {.entry = {.count = 1, .reusable = false}}, SHIFT(32), + [252] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1578), + [254] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1616), + [256] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1380), + [258] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1612), + [260] = {.entry = {.count = 1, .reusable = false}}, SHIFT(7), + [262] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1328), + [264] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2), + [266] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1210), + [268] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(419), + [271] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(2338), + [274] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(139), + [277] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(127), + [280] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(1700), + [283] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(53), + [286] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(126), + [289] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(366), + [292] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(1680), + [295] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(264), + [298] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(919), + [301] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(1904), + [304] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(1898), + [307] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(420), + [310] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(1799), + [313] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(112), + [316] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(40), + [319] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(1950), + [322] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 16), SHIFT_REPEAT(2186), + [325] = {.entry = {.count = 1, .reusable = false}}, SHIFT(771), + [327] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2202), + [329] = {.entry = {.count = 1, .reusable = false}}, SHIFT(141), + [331] = {.entry = {.count = 1, .reusable = false}}, SHIFT(136), + [333] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1695), + [335] = {.entry = {.count = 1, .reusable = false}}, SHIFT(92), + [337] = {.entry = {.count = 1, .reusable = false}}, SHIFT(140), + [339] = {.entry = {.count = 1, .reusable = false}}, SHIFT(421), + [341] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1676), + [343] = {.entry = {.count = 1, .reusable = false}}, SHIFT(639), + [345] = {.entry = {.count = 1, .reusable = false}}, SHIFT(889), + [347] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1853), + [349] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1880), + [351] = {.entry = {.count = 1, .reusable = false}}, SHIFT(777), + [353] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1771), + [355] = {.entry = {.count = 1, .reusable = false}}, SHIFT(95), + [357] = {.entry = {.count = 1, .reusable = false}}, SHIFT(97), + [359] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1947), + [361] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2138), + [363] = {.entry = {.count = 1, .reusable = false}}, SHIFT(720), + [365] = {.entry = {.count = 1, .reusable = false}}, SHIFT(364), + [367] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1595), + [369] = {.entry = {.count = 1, .reusable = false}}, SHIFT(526), + [371] = {.entry = {.count = 1, .reusable = false}}, SHIFT(734), + [373] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1938), + [375] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2300), + [377] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2133), + [379] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_concatenation, 4, 0, 40), + [381] = {.entry = {.count = 1, .reusable = false}}, SHIFT(308), + [383] = {.entry = {.count = 1, .reusable = false}}, SHIFT(307), + [385] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_concatenation, 4, 0, 40), + [387] = {.entry = {.count = 1, .reusable = true}}, SHIFT(307), + [389] = {.entry = {.count = 1, .reusable = false}}, SHIFT(314), + [391] = {.entry = {.count = 1, .reusable = false}}, SHIFT(313), + [393] = {.entry = {.count = 1, .reusable = true}}, SHIFT(313), + [395] = {.entry = {.count = 1, .reusable = false}}, SHIFT(402), + [397] = {.entry = {.count = 1, .reusable = false}}, SHIFT(416), + [399] = {.entry = {.count = 1, .reusable = true}}, SHIFT(416), + [401] = {.entry = {.count = 1, .reusable = false}}, SHIFT(482), + [403] = {.entry = {.count = 1, .reusable = false}}, SHIFT(480), + [405] = {.entry = {.count = 1, .reusable = true}}, SHIFT(480), + [407] = {.entry = {.count = 1, .reusable = false}}, SHIFT(589), + [409] = {.entry = {.count = 1, .reusable = false}}, SHIFT(590), + [411] = {.entry = {.count = 1, .reusable = true}}, SHIFT(590), + [413] = {.entry = {.count = 1, .reusable = false}}, SHIFT(534), + [415] = {.entry = {.count = 1, .reusable = false}}, SHIFT(533), + [417] = {.entry = {.count = 1, .reusable = true}}, SHIFT(533), + [419] = {.entry = {.count = 1, .reusable = false}}, SHIFT(655), + [421] = {.entry = {.count = 1, .reusable = false}}, SHIFT(650), + [423] = {.entry = {.count = 1, .reusable = true}}, SHIFT(650), + [425] = {.entry = {.count = 1, .reusable = false}}, SHIFT(629), + [427] = {.entry = {.count = 1, .reusable = false}}, SHIFT(630), + [429] = {.entry = {.count = 1, .reusable = true}}, SHIFT(630), + [431] = {.entry = {.count = 1, .reusable = false}}, SHIFT(616), + [433] = {.entry = {.count = 1, .reusable = false}}, SHIFT(617), + [435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(617), + [437] = {.entry = {.count = 1, .reusable = false}}, SHIFT(440), + [439] = {.entry = {.count = 1, .reusable = false}}, SHIFT(441), + [441] = {.entry = {.count = 1, .reusable = true}}, SHIFT(441), + [443] = {.entry = {.count = 1, .reusable = false}}, SHIFT(562), + [445] = {.entry = {.count = 1, .reusable = false}}, SHIFT(561), + [447] = {.entry = {.count = 1, .reusable = true}}, SHIFT(561), + [449] = {.entry = {.count = 1, .reusable = false}}, SHIFT(426), + [451] = {.entry = {.count = 1, .reusable = false}}, SHIFT(425), + [453] = {.entry = {.count = 1, .reusable = true}}, SHIFT(425), + [455] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_command, 2, 0, 17), + [457] = {.entry = {.count = 1, .reusable = false}}, SHIFT(333), + [459] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_command, 2, 0, 17), + [461] = {.entry = {.count = 1, .reusable = false}}, SHIFT(888), + [463] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1834), + [465] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1835), + [467] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1802), + [469] = {.entry = {.count = 1, .reusable = false}}, SHIFT(61), + [471] = {.entry = {.count = 1, .reusable = false}}, SHIFT(60), + [473] = {.entry = {.count = 1, .reusable = true}}, SHIFT(715), + [475] = {.entry = {.count = 1, .reusable = false}}, SHIFT(334), + [477] = {.entry = {.count = 1, .reusable = false}}, SHIFT(918), + [479] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1902), + [481] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1903), + [483] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1783), + [485] = {.entry = {.count = 1, .reusable = false}}, SHIFT(57), + [487] = {.entry = {.count = 1, .reusable = false}}, SHIFT(56), + [489] = {.entry = {.count = 1, .reusable = true}}, SHIFT(717), + [491] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_command, 1, 0, 4), + [493] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_command, 1, 0, 4), + [495] = {.entry = {.count = 1, .reusable = false}}, SHIFT(385), + [497] = {.entry = {.count = 1, .reusable = false}}, SHIFT(920), + [499] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1886), + [501] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1868), + [503] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1801), + [505] = {.entry = {.count = 1, .reusable = false}}, SHIFT(102), + [507] = {.entry = {.count = 1, .reusable = false}}, SHIFT(100), + [509] = {.entry = {.count = 1, .reusable = true}}, SHIFT(687), + [511] = {.entry = {.count = 1, .reusable = false}}, SHIFT(479), + [513] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(339), + [516] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), + [518] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(911), + [521] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1895), + [524] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1875), + [527] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1794), + [530] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(59), + [533] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(58), + [536] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), + [538] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_file_redirect, 2, 0, 7), + [540] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_file_redirect, 2, 0, 7), + [542] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_command, 3, 0, 33), + [544] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_command, 3, 0, 33), + [546] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_file_redirect, 3, 0, 19), + [548] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_file_redirect, 3, 0, 19), + [550] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_command, 2, 0, 14), + [552] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_command, 2, 0, 14), + [554] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(385), + [557] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), + [559] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(920), + [562] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1886), + [565] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1868), + [568] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1801), + [571] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(102), + [574] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(100), + [577] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), + [579] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(687), + [582] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(334), + [585] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(918), + [588] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1902), + [591] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1903), + [594] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1783), + [597] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(57), + [600] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(56), + [603] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(717), + [606] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(377), + [609] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(897), + [612] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1882), + [615] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1883), + [618] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1784), + [621] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(88), + [624] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(76), + [627] = {.entry = {.count = 1, .reusable = false}}, SHIFT(807), + [629] = {.entry = {.count = 1, .reusable = false}}, SHIFT(826), + [631] = {.entry = {.count = 1, .reusable = true}}, SHIFT(826), + [633] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(333), + [636] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(888), + [639] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1834), + [642] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1835), + [645] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1802), + [648] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(61), + [651] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(60), + [654] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(715), + [657] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(361), + [660] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(915), + [663] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1901), + [666] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1806), + [669] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1800), + [672] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(109), + [675] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(104), + [678] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(458), + [681] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(506), + [684] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(932), + [687] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1837), + [690] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1827), + [693] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1782), + [696] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(78), + [699] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(77), + [702] = {.entry = {.count = 1, .reusable = false}}, SHIFT(447), + [704] = {.entry = {.count = 1, .reusable = false}}, SHIFT(939), + [706] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1859), + [708] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1857), + [710] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1790), + [712] = {.entry = {.count = 1, .reusable = false}}, SHIFT(47), + [714] = {.entry = {.count = 1, .reusable = false}}, SHIFT(44), + [716] = {.entry = {.count = 1, .reusable = false}}, SHIFT(600), + [718] = {.entry = {.count = 1, .reusable = false}}, SHIFT(935), + [720] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1820), + [722] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1821), + [724] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1778), + [726] = {.entry = {.count = 1, .reusable = false}}, SHIFT(99), + [728] = {.entry = {.count = 1, .reusable = false}}, SHIFT(65), + [730] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(479), + [733] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(447), + [736] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(939), + [739] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1859), + [742] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1857), + [745] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1790), + [748] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(47), + [751] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(44), + [754] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_file_redirect, 1, 0, 1), + [756] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_file_redirect, 1, 0, 1), + [758] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_file_redirect, 2, 0, 6), + [760] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_file_redirect, 2, 0, 6), + [762] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_command_repeat1, 1, 0, 0), + [764] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__statements, 2, 0, 15), + [766] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__statement_not_pipeline, 1, 0, 0), + [768] = {.entry = {.count = 1, .reusable = false}}, SHIFT(148), + [770] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2255), + [772] = {.entry = {.count = 1, .reusable = false}}, SHIFT(716), + [774] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 1, 0, 0), + [776] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 1, 0, 0), SHIFT(2149), + [779] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(600), + [782] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(935), + [785] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1820), + [788] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1821), + [791] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1778), + [794] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(99), + [797] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(65), + [800] = {.entry = {.count = 1, .reusable = false}}, SHIFT(437), + [802] = {.entry = {.count = 1, .reusable = false}}, SHIFT(142), + [804] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2312), + [806] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 1, 0, 0), SHIFT(2301), + [809] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__statements, 1, 0, 3), + [811] = {.entry = {.count = 1, .reusable = false}}, SHIFT(506), + [813] = {.entry = {.count = 1, .reusable = false}}, SHIFT(932), + [815] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1837), + [817] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1827), + [819] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1782), + [821] = {.entry = {.count = 1, .reusable = false}}, SHIFT(78), + [823] = {.entry = {.count = 1, .reusable = false}}, SHIFT(77), + [825] = {.entry = {.count = 1, .reusable = false}}, SHIFT(879), + [827] = {.entry = {.count = 1, .reusable = false}}, SHIFT(873), + [829] = {.entry = {.count = 1, .reusable = true}}, SHIFT(873), + [831] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__statements, 1, 0, 3), + [833] = {.entry = {.count = 1, .reusable = false}}, SHIFT(782), + [835] = {.entry = {.count = 1, .reusable = false}}, SHIFT(153), + [837] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 1, 0, 0), SHIFT(2148), + [840] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__statements, 2, 0, 15), + [842] = {.entry = {.count = 1, .reusable = false}}, SHIFT(144), + [844] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 1, 0, 0), SHIFT(2306), + [847] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1788), + [849] = {.entry = {.count = 1, .reusable = false}}, SHIFT(145), + [851] = {.entry = {.count = 1, .reusable = false}}, SHIFT(146), + [853] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1600), + [855] = {.entry = {.count = 1, .reusable = false}}, SHIFT(846), + [857] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2055), + [859] = {.entry = {.count = 1, .reusable = false}}, SHIFT(910), + [861] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1810), + [863] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1811), + [865] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1798), + [867] = {.entry = {.count = 1, .reusable = false}}, SHIFT(74), + [869] = {.entry = {.count = 1, .reusable = false}}, SHIFT(51), + [871] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1936), + [873] = {.entry = {.count = 1, .reusable = false}}, SHIFT(647), + [875] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__statement_not_pipeline, 1, 0, 0), + [877] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1173), + [879] = {.entry = {.count = 1, .reusable = false}}, SHIFT(922), + [881] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1828), + [883] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1822), + [885] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1779), + [887] = {.entry = {.count = 1, .reusable = false}}, SHIFT(75), + [889] = {.entry = {.count = 1, .reusable = false}}, SHIFT(71), + [891] = {.entry = {.count = 1, .reusable = false}}, SHIFT(796), + [893] = {.entry = {.count = 1, .reusable = false}}, SHIFT(155), + [895] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 1, 0, 0), SHIFT(2251), + [898] = {.entry = {.count = 1, .reusable = false}}, SHIFT(781), + [900] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3, 0, 30), + [902] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1118), + [904] = {.entry = {.count = 1, .reusable = false}}, SHIFT(914), + [906] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1842), + [908] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1839), + [910] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1803), + [912] = {.entry = {.count = 1, .reusable = false}}, SHIFT(43), + [914] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42), + [916] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1111), + [918] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(647), + [921] = {.entry = {.count = 1, .reusable = false}}, SHIFT(899), + [923] = {.entry = {.count = 1, .reusable = false}}, SHIFT(898), + [925] = {.entry = {.count = 1, .reusable = true}}, SHIFT(898), + [927] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3, 0, 30), + [929] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1134), + [931] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2042), + [933] = {.entry = {.count = 1, .reusable = false}}, SHIFT(870), + [935] = {.entry = {.count = 1, .reusable = false}}, SHIFT(886), + [937] = {.entry = {.count = 1, .reusable = true}}, SHIFT(886), + [939] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1138), + [941] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2068), + [943] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2063), + [945] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2057), + [947] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2028), + [949] = {.entry = {.count = 1, .reusable = false}}, SHIFT(664), + [951] = {.entry = {.count = 1, .reusable = false}}, SHIFT(805), + [953] = {.entry = {.count = 1, .reusable = false}}, SHIFT(776), + [955] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1158), + [957] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_concatenation, 2, 0, 0), + [959] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1477), + [961] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_concatenation, 2, 0, 0), + [963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1542), + [965] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1156), + [967] = {.entry = {.count = 1, .reusable = false}}, SHIFT(830), + [969] = {.entry = {.count = 1, .reusable = false}}, SHIFT(909), + [971] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1918), + [973] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1900), + [975] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1797), + [977] = {.entry = {.count = 1, .reusable = false}}, SHIFT(122), + [979] = {.entry = {.count = 1, .reusable = false}}, SHIFT(120), + [981] = {.entry = {.count = 1, .reusable = true}}, SHIFT(954), + [983] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), + [985] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1560), + [988] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), + [990] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1560), + [993] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_command_name, 1, 0, 0), + [995] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_command_name, 1, 0, 0), SHIFT(2210), + [998] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1560), + [1000] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_command_name, 1, 0, 0), + [1002] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1560), + [1004] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1185), + [1006] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1495), + [1008] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1495), + [1010] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_command_name, 1, 0, 0), SHIFT(2314), + [1013] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1477), + [1016] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1477), + [1019] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1495), + [1022] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1495), + [1025] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1562), + [1027] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1477), + [1029] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1494), + [1031] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_command_name, 1, 0, 0), SHIFT(2240), + [1034] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1186), + [1036] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1152), + [1038] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1508), + [1040] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1547), + [1042] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_simple_expansion, 2, 0, 0), + [1044] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_simple_expansion, 2, 0, 0), + [1046] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_simple_expansion, 2, 0, 8), + [1048] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_simple_expansion, 2, 0, 8), + [1050] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1504), + [1053] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1504), + [1056] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arithmetic_expansion, 2, 0, 0), + [1058] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arithmetic_expansion, 2, 0, 0), + [1060] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1538), + [1062] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1534), + [1064] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1598), + [1066] = {.entry = {.count = 1, .reusable = false}}, SHIFT(927), + [1068] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1939), + [1070] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 2, 0, 0), + [1072] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 2, 0, 0), + [1074] = {.entry = {.count = 1, .reusable = true}}, SHIFT_EXTRA(), + [1076] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1538), + [1079] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1538), + [1082] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1488), + [1084] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1509), + [1086] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expansion, 2, 0, 0), + [1088] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expansion, 2, 0, 0), + [1090] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable_assignment, 3, 0, 20), + [1092] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1476), + [1094] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable_assignment, 3, 0, 20), + [1096] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1476), + [1098] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 3, 0, 25), + [1100] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 3, 0, 25), + [1102] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 3, 0, 0), + [1104] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 3, 0, 0), + [1106] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1488), + [1109] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1488), + [1112] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expansion, 3, 0, 28), + [1114] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expansion, 3, 0, 28), + [1116] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_command_substitution, 3, 0, 22), + [1118] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_command_substitution, 3, 0, 22), + [1120] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_command_substitution, 3, 0, 29), + [1122] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_command_substitution, 3, 0, 29), + [1124] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_string, 4, 0, 39), + [1126] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 4, 0, 39), + [1128] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_command_repeat2, 1, 0, 13), + [1130] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 1, 0, 13), + [1132] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1488), + [1134] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1508), + [1136] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1000), + [1138] = {.entry = {.count = 1, .reusable = true}}, SHIFT(969), + [1140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(970), + [1142] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arithmetic_ternary_expression, 5, 0, 58), + [1144] = {.entry = {.count = 1, .reusable = false}}, SHIFT(973), + [1146] = {.entry = {.count = 1, .reusable = false}}, SHIFT(977), + [1148] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arithmetic_ternary_expression, 5, 0, 58), + [1150] = {.entry = {.count = 1, .reusable = false}}, SHIFT(979), + [1152] = {.entry = {.count = 1, .reusable = false}}, SHIFT(980), + [1154] = {.entry = {.count = 1, .reusable = true}}, SHIFT(982), + [1156] = {.entry = {.count = 1, .reusable = true}}, SHIFT(973), + [1158] = {.entry = {.count = 1, .reusable = false}}, SHIFT(983), + [1160] = {.entry = {.count = 1, .reusable = false}}, SHIFT(984), + [1162] = {.entry = {.count = 1, .reusable = true}}, SHIFT(360), + [1164] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1538), + [1166] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1476), + [1169] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1476), + [1172] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 1, 0, 0), + [1174] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_for_statement_repeat1, 1, 0, 0), + [1176] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1504), + [1178] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1504), + [1180] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1508), + [1183] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1508), + [1186] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arithmetic_unary_expression, 2, 0, 23), + [1188] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arithmetic_unary_expression, 2, 0, 23), + [1190] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_command_name, 1, 0, 0), SHIFT(2337), + [1193] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arithmetic_expansion, 3, 0, 0), + [1195] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arithmetic_expansion, 3, 0, 0), + [1197] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1546), + [1199] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1529), + [1201] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1526), + [1203] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1016), + [1205] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1011), + [1207] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1011), + [1209] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arithmetic_postfix_expression, 2, 0, 24), + [1211] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arithmetic_postfix_expression, 2, 0, 24), + [1213] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arithmetic_literal, 1, 0, 0), + [1215] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arithmetic_literal, 1, 0, 0), + [1217] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1563), + [1219] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1529), + [1222] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1529), + [1225] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(795), + [1228] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1529), + [1230] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(796), + [1233] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1519), + [1235] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arithmetic_binary_expression, 3, 0, 38), + [1237] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arithmetic_binary_expression, 3, 0, 38), + [1239] = {.entry = {.count = 1, .reusable = false}}, SHIFT(971), + [1241] = {.entry = {.count = 1, .reusable = true}}, SHIFT(991), + [1243] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_arithmetic_parenthesized_expression, 3, 0, 0), + [1245] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_arithmetic_parenthesized_expression, 3, 0, 0), + [1247] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_command_name, 1, 0, 0), SHIFT(2221), + [1250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(349), + [1252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(978), + [1254] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1521), + [1256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1497), + [1258] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1004), + [1260] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1091), + [1262] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1091), + [1264] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1521), + [1267] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1521), + [1270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1293), + [1272] = {.entry = {.count = 1, .reusable = true}}, SHIFT(649), + [1274] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_terminator, 1, 0, 0), + [1276] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_terminator, 1, 0, 0), + [1278] = {.entry = {.count = 1, .reusable = false}}, SHIFT(827), + [1280] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1556), + [1283] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1556), + [1286] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1530), + [1288] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1530), + [1290] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2069), + [1292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(445), + [1294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(995), + [1296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1694), + [1298] = {.entry = {.count = 1, .reusable = true}}, SHIFT(814), + [1300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(993), + [1302] = {.entry = {.count = 1, .reusable = false}}, SHIFT(963), + [1304] = {.entry = {.count = 1, .reusable = false}}, SHIFT(968), + [1306] = {.entry = {.count = 1, .reusable = true}}, SHIFT(968), + [1308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(354), + [1310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1014), + [1312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1418), + [1314] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1582), + [1316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1061), + [1318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(936), + [1320] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1556), + [1322] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1543), + [1324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1965), + [1326] = {.entry = {.count = 1, .reusable = false}}, SHIFT(964), + [1328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(568), + [1330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(943), + [1332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(944), + [1334] = {.entry = {.count = 1, .reusable = false}}, SHIFT(945), + [1336] = {.entry = {.count = 1, .reusable = false}}, SHIFT(951), + [1338] = {.entry = {.count = 1, .reusable = false}}, SHIFT(952), + [1340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(955), + [1342] = {.entry = {.count = 1, .reusable = false}}, SHIFT(957), + [1344] = {.entry = {.count = 1, .reusable = false}}, SHIFT(958), + [1346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(962), + [1348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(951), + [1350] = {.entry = {.count = 1, .reusable = false}}, SHIFT(967), + [1352] = {.entry = {.count = 1, .reusable = false}}, SHIFT(974), + [1354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(960), + [1356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(527), + [1358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(654), + [1360] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(830), + [1363] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(909), + [1366] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1918), + [1369] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1900), + [1372] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(1797), + [1375] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(122), + [1378] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(120), + [1381] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat2, 2, 0, 31), SHIFT_REPEAT(954), + [1384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1287), + [1386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1505), + [1388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1149), + [1390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(519), + [1392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(392), + [1394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1521), + [1396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(548), + [1398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(990), + [1400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(659), + [1402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(592), + [1404] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1127), + [1406] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1132), + [1408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1132), + [1410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(509), + [1412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(581), + [1414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1467), + [1416] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1530), + [1419] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1530), + [1422] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1242), + [1424] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1243), + [1426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1243), + [1428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(415), + [1430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(880), + [1432] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(827), + [1435] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1452), + [1437] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1977), + [1439] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(828), + [1442] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(907), + [1445] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1905), + [1448] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1911), + [1451] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1792), + [1454] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(124), + [1457] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(125), + [1460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1499), + [1462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(881), + [1464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1556), + [1466] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__terminated_statement, 2, 0, 10), + [1468] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__terminated_statement, 2, 0, 10), + [1470] = {.entry = {.count = 1, .reusable = false}}, SHIFT(157), + [1472] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__heredoc_pipeline, 2, 0, 0), + [1474] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 1, 0, 0), SHIFT(2311), + [1477] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__heredoc_expression, 2, 0, 49), + [1479] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1525), + [1481] = {.entry = {.count = 1, .reusable = false}}, SHIFT(856), + [1483] = {.entry = {.count = 1, .reusable = false}}, SHIFT(926), + [1485] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1869), + [1487] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1851), + [1489] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1795), + [1491] = {.entry = {.count = 1, .reusable = false}}, SHIFT(91), + [1493] = {.entry = {.count = 1, .reusable = false}}, SHIFT(85), + [1495] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(856), + [1498] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(926), + [1501] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1869), + [1504] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1851), + [1507] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1795), + [1510] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(91), + [1513] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(85), + [1516] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1398), + [1518] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1399), + [1520] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 10), + [1522] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__statements, 3, 0, 32), + [1524] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__statements_repeat1, 2, 0, 10), + [1526] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_command_repeat1, 1, 0, 5), + [1528] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), + [1530] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(2096), + [1533] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), REDUCE(aux_sym_command_repeat1, 1, 0, 5), + [1536] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), REDUCE(aux_sym_command_repeat1, 1, 0, 5), + [1539] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 1, 0, 5), + [1541] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1978), + [1544] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(819), + [1547] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(604), + [1550] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1659), + [1553] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(634), + [1556] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(387), + [1559] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(866), + [1562] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), + [1564] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1437), + [1566] = {.entry = {.count = 1, .reusable = false}}, SHIFT(940), + [1568] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1852), + [1570] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1836), + [1572] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1786), + [1574] = {.entry = {.count = 1, .reusable = false}}, SHIFT(83), + [1576] = {.entry = {.count = 1, .reusable = false}}, SHIFT(82), + [1578] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_command_repeat2, 1, 0, 12), + [1580] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_command_repeat2, 1, 0, 12), + [1582] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__statements, 2, 0, 10), + [1584] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(2006), + [1587] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1417), + [1589] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(554), + [1592] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_negated_command, 2, 0, 0), + [1594] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_negated_command, 2, 0, 0), + [1596] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1518), + [1598] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1973), + [1601] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(374), + [1604] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1104), + [1607] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(514), + [1610] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1412), + [1613] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1199), + [1616] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(623), + [1619] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1457), + [1622] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(330), + [1625] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 1, 0, 0), SHIFT(2146), + [1628] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__case_item_last_repeat2, 2, 0, 0), + [1630] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__case_item_last_repeat2, 2, 0, 0), SHIFT_REPEAT(709), + [1633] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__case_item_last_repeat2, 2, 0, 0), + [1635] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(855), + [1638] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1077), + [1641] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_command_name, 1, 0, 0), SHIFT(2290), + [1644] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1294), + [1647] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(582), + [1650] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1691), + [1653] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(396), + [1656] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1272), + [1658] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1257), + [1660] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1257), + [1662] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(457), + [1665] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(641), + [1668] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(921), + [1671] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(484), + [1674] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(975), + [1677] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(541), + [1680] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(1036), + [1683] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 1, 0, 0), SHIFT(2022), + [1686] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1517), + [1688] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__statements, 2, 0, 10), + [1690] = {.entry = {.count = 2, .reusable = false}}, REDUCE(sym_command_name, 1, 0, 0), SHIFT(2246), + [1693] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1466), + [1695] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1466), + [1697] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__statements, 3, 0, 32), + [1699] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1516), + [1701] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1466), + [1704] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1466), + [1707] = {.entry = {.count = 1, .reusable = false}}, SHIFT(950), + [1709] = {.entry = {.count = 1, .reusable = false}}, SHIFT(890), + [1711] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1866), + [1713] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1893), + [1715] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1777), + [1717] = {.entry = {.count = 1, .reusable = false}}, SHIFT(101), + [1719] = {.entry = {.count = 1, .reusable = false}}, SHIFT(103), + [1721] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1565), + [1723] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(950), + [1726] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(890), + [1729] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1866), + [1732] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1893), + [1735] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1777), + [1738] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(101), + [1741] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(103), + [1744] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1554), + [1746] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1548), + [1748] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1554), + [1751] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1554), + [1754] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1545), + [1756] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1539), + [1758] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1545), + [1761] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1545), + [1764] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1554), + [1766] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1545), + [1768] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1552), + [1770] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1486), + [1772] = {.entry = {.count = 1, .reusable = false}}, SHIFT(892), + [1774] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1879), + [1776] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1906), + [1778] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1780), + [1780] = {.entry = {.count = 1, .reusable = false}}, SHIFT(108), + [1782] = {.entry = {.count = 1, .reusable = false}}, SHIFT(115), + [1784] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1468), + [1786] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1423), + [1788] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1430), + [1790] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1430), + [1792] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1527), + [1794] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1527), + [1796] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1527), + [1799] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1527), + [1802] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1464), + [1804] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1454), + [1806] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1454), + [1808] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1109), + [1811] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(891), + [1814] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1916), + [1817] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1914), + [1820] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1774), + [1823] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(55), + [1826] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(54), + [1829] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1520), + [1831] = {.entry = {.count = 1, .reusable = true}}, SHIFT(999), + [1833] = {.entry = {.count = 1, .reusable = true}}, SHIFT(998), + [1835] = {.entry = {.count = 1, .reusable = true}}, SHIFT(488), + [1837] = {.entry = {.count = 1, .reusable = true}}, SHIFT(997), + [1839] = {.entry = {.count = 1, .reusable = false}}, SHIFT(996), + [1841] = {.entry = {.count = 1, .reusable = true}}, SHIFT(996), + [1843] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1807), + [1845] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1913), + [1847] = {.entry = {.count = 1, .reusable = false}}, SHIFT(370), + [1849] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1773), + [1851] = {.entry = {.count = 1, .reusable = true}}, SHIFT(66), + [1853] = {.entry = {.count = 1, .reusable = true}}, SHIFT(64), + [1855] = {.entry = {.count = 1, .reusable = true}}, SHIFT(370), + [1857] = {.entry = {.count = 1, .reusable = true}}, SHIFT(818), + [1859] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1020), + [1861] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1276), + [1863] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1591), + [1865] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1576), + [1868] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1576), + [1871] = {.entry = {.count = 1, .reusable = true}}, SHIFT(310), + [1873] = {.entry = {.count = 1, .reusable = true}}, SHIFT(398), + [1875] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2004), + [1877] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1366), + [1879] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1511), + [1881] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1856), + [1883] = {.entry = {.count = 1, .reusable = false}}, SHIFT(933), + [1885] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1829), + [1887] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1830), + [1889] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1785), + [1891] = {.entry = {.count = 1, .reusable = false}}, SHIFT(80), + [1893] = {.entry = {.count = 1, .reusable = false}}, SHIFT(84), + [1895] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1955), + [1897] = {.entry = {.count = 1, .reusable = true}}, SHIFT(442), + [1899] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1961), + [1901] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1624), + [1903] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1618), + [1905] = {.entry = {.count = 1, .reusable = true}}, SHIFT(877), + [1907] = {.entry = {.count = 1, .reusable = true}}, SHIFT(874), + [1909] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1701), + [1911] = {.entry = {.count = 1, .reusable = true}}, SHIFT(532), + [1913] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1172), + [1915] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1053), + [1917] = {.entry = {.count = 1, .reusable = true}}, SHIFT(602), + [1919] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1438), + [1921] = {.entry = {.count = 1, .reusable = true}}, SHIFT(560), + [1923] = {.entry = {.count = 1, .reusable = true}}, SHIFT(418), + [1925] = {.entry = {.count = 1, .reusable = true}}, SHIFT(520), + [1927] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1250), + [1929] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1225), + [1931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(938), + [1933] = {.entry = {.count = 1, .reusable = true}}, SHIFT(994), + [1935] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1987), + [1937] = {.entry = {.count = 1, .reusable = true}}, SHIFT(609), + [1939] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2070), + [1941] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1387), + [1943] = {.entry = {.count = 1, .reusable = true}}, SHIFT(652), + [1945] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1252), + [1947] = {.entry = {.count = 1, .reusable = true}}, SHIFT(605), + [1949] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1451), + [1951] = {.entry = {.count = 1, .reusable = true}}, SHIFT(959), + [1953] = {.entry = {.count = 1, .reusable = true}}, SHIFT(986), + [1955] = {.entry = {.count = 1, .reusable = true}}, SHIFT(976), + [1957] = {.entry = {.count = 1, .reusable = false}}, SHIFT(942), + [1959] = {.entry = {.count = 1, .reusable = true}}, SHIFT(942), + [1961] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1894), + [1963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1890), + [1965] = {.entry = {.count = 1, .reusable = false}}, SHIFT(462), + [1967] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1776), + [1969] = {.entry = {.count = 1, .reusable = true}}, SHIFT(52), + [1971] = {.entry = {.count = 1, .reusable = true}}, SHIFT(50), + [1973] = {.entry = {.count = 1, .reusable = true}}, SHIFT(462), + [1975] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1568), + [1978] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1568), + [1981] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1537), + [1984] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1537), + [1987] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1568), + [1989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1568), + [1991] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1585), + [1993] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1583), + [1995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1583), + [1997] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1570), + [1999] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1668), + [2001] = {.entry = {.count = 1, .reusable = false}}, SHIFT(282), + [2003] = {.entry = {.count = 1, .reusable = true}}, SHIFT(716), + [2005] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1826), + [2007] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1485), + [2010] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1485), + [2013] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1638), + [2015] = {.entry = {.count = 1, .reusable = false}}, SHIFT(268), + [2017] = {.entry = {.count = 1, .reusable = true}}, SHIFT(782), + [2019] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1847), + [2021] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1485), + [2023] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1485), + [2025] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1471), + [2027] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1677), + [2029] = {.entry = {.count = 1, .reusable = false}}, SHIFT(304), + [2031] = {.entry = {.count = 1, .reusable = true}}, SHIFT(437), + [2033] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1808), + [2035] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1576), + [2037] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1513), + [2039] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1643), + [2041] = {.entry = {.count = 1, .reusable = false}}, SHIFT(258), + [2043] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1872), + [2045] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1501), + [2047] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1555), + [2049] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1576), + [2051] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1500), + [2053] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1500), + [2055] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__variable_assignments_repeat1, 2, 0, 0), + [2057] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__variable_assignments_repeat1, 2, 0, 0), + [2059] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__variable_assignments_repeat1, 2, 0, 0), SHIFT_REPEAT(2301), + [2062] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1664), + [2064] = {.entry = {.count = 1, .reusable = false}}, SHIFT(290), + [2066] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1831), + [2068] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), + [2070] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1668), + [2073] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(282), + [2076] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(2255), + [2079] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), + [2081] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1826), + [2084] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__variable_assignments_repeat1, 2, 0, 0), SHIFT_REPEAT(2149), + [2087] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_command_repeat1, 2, 0, 18), + [2089] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat1, 2, 0, 18), SHIFT_REPEAT(1598), + [2092] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_command_repeat1, 2, 0, 18), SHIFT_REPEAT(927), + [2095] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 2, 0, 18), SHIFT_REPEAT(1939), + [2098] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_command_repeat1, 2, 0, 18), SHIFT_REPEAT(2133), + [2101] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1537), + [2103] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1537), + [2105] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1502), + [2107] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1643), + [2110] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(258), + [2113] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(2312), + [2116] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1872), + [2119] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_redirected_statement, 2, -1, 11), + [2121] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_redirected_statement, 2, -1, 11), + [2123] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1682), + [2125] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1683), + [2127] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1683), + [2129] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1522), + [2131] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__variable_assignments, 2, 0, 0), + [2133] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__variable_assignments, 2, 0, 0), + [2135] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2148), + [2137] = {.entry = {.count = 1, .reusable = true}}, SHIFT(781), + [2139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2149), + [2141] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1478), + [2143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(664), + [2145] = {.entry = {.count = 1, .reusable = true}}, SHIFT(776), + [2147] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2306), + [2149] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2301), + [2151] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__variable_assignments_repeat1, 2, 0, 0), SHIFT_REPEAT(2306), + [2154] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1553), + [2156] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1557), + [2158] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1557), + [2160] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1492), + [2162] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__variable_assignments_repeat1, 2, 0, 0), SHIFT_REPEAT(2148), + [2165] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1638), + [2168] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(268), + [2171] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1847), + [2174] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1500), + [2177] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1500), + [2180] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1557), + [2183] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1557), + [2186] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_pipeline_repeat1, 2, 0, 0), + [2188] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_pipeline_repeat1, 2, 0, 0), SHIFT(143), + [2191] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_pipeline_repeat1, 2, 0, 0), + [2193] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1515), + [2195] = {.entry = {.count = 1, .reusable = true}}, SHIFT(805), + [2197] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1677), + [2200] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(304), + [2203] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1808), + [2206] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, 0, 45), + [2208] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, 0, 45), + [2210] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), + [2212] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1677), + [2215] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(304), + [2218] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), + [2220] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1940), + [2223] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_while_statement, 3, 0, 21), + [2225] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_while_statement, 3, 0, 21), + [2227] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_redirected_statement, 1, -1, 5), + [2229] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_redirected_statement, 1, -1, 5), + [2231] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1951), + [2233] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1638), + [2236] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(268), + [2239] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1949), + [2242] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 4, 0, 1), + [2244] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 4, 0, 1), + [2246] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1668), + [2249] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(282), + [2252] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1948), + [2255] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_subshell, 3, 0, 22), + [2257] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_subshell, 3, 0, 22), + [2259] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, 0, 51), + [2261] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, 0, 51), + [2263] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, 0, 52), + [2265] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, 0, 52), + [2267] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_command, 3, 0, 17), + [2269] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_command, 3, 0, 17), + [2271] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 6, 0, 53), + [2273] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 6, 0, 53), + [2275] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1940), + [2277] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_do_group, 2, 0, 0), + [2279] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_do_group, 2, 0, 0), + [2281] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_compound_statement, 3, 0, 22), + [2283] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_compound_statement, 3, 0, 22), + [2285] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_statement, 6, 0, 56), + [2287] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_statement, 6, 0, 56), + [2289] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_statement, 6, 0, 57), + [2291] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_statement, 6, 0, 57), + [2293] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1948), + [2295] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1643), + [2298] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(258), + [2301] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1951), + [2304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1949), + [2306] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_statement, 6, 0, 36), + [2308] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_statement, 6, 0, 36), + [2310] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 4, 0, 35), + [2312] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 4, 0, 35), + [2314] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 5, 0, 6), + [2316] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 5, 0, 6), + [2318] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_statement, 4, 0, 36), + [2320] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_statement, 4, 0, 36), + [2322] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__simple_heredoc_body, 2, 0, 0), + [2324] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__simple_heredoc_body, 2, 0, 0), + [2326] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__heredoc_body, 2, 0, 0), + [2328] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__heredoc_body, 2, 0, 0), + [2330] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 5, 0, 1), + [2332] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 5, 0, 1), + [2334] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 5, 0, 59), + [2336] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 5, 0, 59), + [2338] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 5, 0, 60), + [2340] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 5, 0, 60), + [2342] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 5, 0, 61), + [2344] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 5, 0, 61), + [2346] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 7, 0, 62), + [2348] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 7, 0, 62), + [2350] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function_definition, 4, 0, 42), + [2352] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function_definition, 4, 0, 42), + [2354] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_statement, 7, 0, 66), + [2356] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_statement, 7, 0, 66), + [2358] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_statement, 7, 0, 67), + [2360] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_statement, 7, 0, 67), + [2362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1549), + [2364] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_statement, 5, 0, 36), + [2366] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_statement, 5, 0, 36), + [2368] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_statement, 5, 0, 47), + [2370] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_statement, 5, 0, 47), + [2372] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 6, 0, 6), + [2374] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 6, 0, 6), + [2376] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 6, 0, 68), + [2378] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 6, 0, 68), + [2380] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, 0, 46), + [2382] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, 0, 46), + [2384] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 4, 0, 34), + [2386] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 4, 0, 34), + [2388] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_if_statement, 5, 0, 44), + [2390] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_if_statement, 5, 0, 44), + [2392] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_do_group, 3, 0, 22), + [2394] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_do_group, 3, 0, 22), + [2396] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_command, 2, 0, 4), + [2398] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_command, 2, 0, 4), + [2400] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1664), + [2403] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(290), + [2406] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1831), + [2409] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2251), + [2411] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 6, 0, 69), + [2413] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 6, 0, 69), + [2415] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 6, 0, 70), + [2417] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 6, 0, 70), + [2419] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 6, 0, 71), + [2421] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 6, 0, 71), + [2423] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_redirect, 7, 0, 76), + [2425] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_heredoc_redirect, 7, 0, 76), + [2427] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_for_statement, 6, 0, 50), + [2429] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_for_statement, 6, 0, 50), + [2431] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__variable_assignments_repeat1, 2, 0, 0), SHIFT_REPEAT(2251), + [2434] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_statement, 8, 0, 75), + [2436] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_statement, 8, 0, 75), + [2438] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1337), + [2440] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_pipeline, 2, 0, 0), + [2442] = {.entry = {.count = 1, .reusable = false}}, SHIFT(156), + [2444] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_pipeline, 2, 0, 0), + [2446] = {.entry = {.count = 1, .reusable = false}}, SHIFT(147), + [2448] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1664), + [2451] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(290), + [2454] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1937), + [2457] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_pipeline_repeat1, 2, 0, 0), SHIFT_REPEAT(156), + [2460] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1220), + [2462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1937), + [2464] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_pipeline_repeat1, 2, 0, 0), SHIFT_REPEAT(147), + [2467] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_pipeline_repeat1, 2, 0, 0), SHIFT_REPEAT(149), + [2470] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1633), + [2472] = {.entry = {.count = 1, .reusable = false}}, SHIFT(150), + [2474] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_pipeline_repeat1, 2, 0, 0), SHIFT_REPEAT(150), + [2477] = {.entry = {.count = 1, .reusable = false}}, SHIFT(149), + [2479] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1669), + [2481] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2111), + [2483] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_pipeline_repeat1, 2, 0, 0), SHIFT_REPEAT(154), + [2486] = {.entry = {.count = 1, .reusable = false}}, SHIFT(154), + [2488] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1481), + [2490] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1615), + [2492] = {.entry = {.count = 1, .reusable = false}}, SHIFT(665), + [2494] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__heredoc_pipeline, 2, 0, 0), + [2496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1877), + [2498] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_case_statement_repeat1, 2, 0, 48), SHIFT_REPEAT(1995), + [2501] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_case_statement_repeat1, 2, 0, 48), SHIFT_REPEAT(1559), + [2504] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_case_statement_repeat1, 2, 0, 48), SHIFT_REPEAT(933), + [2507] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_case_statement_repeat1, 2, 0, 48), SHIFT_REPEAT(1829), + [2510] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_case_statement_repeat1, 2, 0, 48), SHIFT_REPEAT(1830), + [2513] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_case_statement_repeat1, 2, 0, 48), SHIFT_REPEAT(1785), + [2516] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_case_statement_repeat1, 2, 0, 48), SHIFT_REPEAT(80), + [2519] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_case_statement_repeat1, 2, 0, 48), SHIFT_REPEAT(84), + [2522] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_case_statement_repeat1, 2, 0, 48), SHIFT_REPEAT(1955), + [2525] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1535), + [2528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1482), + [2530] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1669), + [2533] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(910), + [2536] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1810), + [2539] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1811), + [2542] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1798), + [2545] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(74), + [2548] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_for_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(51), + [2551] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__variable_assignments_repeat1, 2, 0, 0), SHIFT_REPEAT(2311), + [2554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2311), + [2556] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1535), + [2558] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__heredoc_expression, 2, 0, 49), + [2560] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1615), + [2563] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(665), + [2566] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1877), + [2569] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1483), + [2571] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1524), + [2574] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1952), + [2576] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1524), + [2578] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1506), + [2580] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__variable_assignments_repeat1, 2, 0, 0), SHIFT_REPEAT(2146), + [2583] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1674), + [2586] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1674), + [2589] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(686), + [2592] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(2205), + [2595] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(2205), + [2598] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(1887), + [2601] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2146), + [2603] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1674), + [2605] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1674), + [2607] = {.entry = {.count = 1, .reusable = true}}, SHIFT(686), + [2609] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2205), + [2611] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2205), + [2613] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1887), + [2615] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1615), + [2618] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(665), + [2621] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1952), + [2624] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1935), + [2626] = {.entry = {.count = 1, .reusable = true}}, SHIFT(142), + [2628] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1643), + [2630] = {.entry = {.count = 1, .reusable = true}}, SHIFT(258), + [2632] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2312), + [2634] = {.entry = {.count = 1, .reusable = true}}, SHIFT(148), + [2636] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1668), + [2638] = {.entry = {.count = 1, .reusable = true}}, SHIFT(282), + [2640] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2255), + [2642] = {.entry = {.count = 1, .reusable = true}}, SHIFT(144), + [2644] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1677), + [2646] = {.entry = {.count = 1, .reusable = true}}, SHIFT(304), + [2648] = {.entry = {.count = 1, .reusable = true}}, SHIFT(152), + [2650] = {.entry = {.count = 1, .reusable = false}}, SHIFT(151), + [2652] = {.entry = {.count = 1, .reusable = true}}, SHIFT(157), + [2654] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1615), + [2656] = {.entry = {.count = 1, .reusable = true}}, SHIFT(665), + [2658] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1674), + [2661] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1674), + [2664] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(686), + [2667] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1935), + [2670] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_pipeline_repeat1, 2, 0, 0), SHIFT_REPEAT(151), + [2673] = {.entry = {.count = 1, .reusable = true}}, SHIFT(155), + [2675] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1664), + [2677] = {.entry = {.count = 1, .reusable = true}}, SHIFT(290), + [2679] = {.entry = {.count = 1, .reusable = true}}, SHIFT(153), + [2681] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1638), + [2683] = {.entry = {.count = 1, .reusable = true}}, SHIFT(268), + [2685] = {.entry = {.count = 1, .reusable = false}}, SHIFT(823), + [2687] = {.entry = {.count = 1, .reusable = true}}, SHIFT(823), + [2689] = {.entry = {.count = 1, .reusable = false}}, SHIFT(551), + [2691] = {.entry = {.count = 1, .reusable = false}}, SHIFT(174), + [2693] = {.entry = {.count = 1, .reusable = true}}, SHIFT(551), + [2695] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1564), + [2697] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1564), + [2699] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1405), + [2701] = {.entry = {.count = 1, .reusable = false}}, SHIFT(916), + [2703] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1824), + [2705] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1844), + [2707] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1770), + [2709] = {.entry = {.count = 1, .reusable = false}}, SHIFT(70), + [2711] = {.entry = {.count = 1, .reusable = false}}, SHIFT(69), + [2713] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1503), + [2715] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1503), + [2717] = {.entry = {.count = 1, .reusable = false}}, SHIFT(504), + [2719] = {.entry = {.count = 1, .reusable = false}}, SHIFT(911), + [2721] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1895), + [2723] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1875), + [2725] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1794), + [2727] = {.entry = {.count = 1, .reusable = false}}, SHIFT(59), + [2729] = {.entry = {.count = 1, .reusable = false}}, SHIFT(58), + [2731] = {.entry = {.count = 1, .reusable = false}}, SHIFT(697), + [2733] = {.entry = {.count = 1, .reusable = true}}, SHIFT(697), + [2735] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1177), + [2737] = {.entry = {.count = 1, .reusable = false}}, SHIFT(913), + [2739] = {.entry = {.count = 1, .reusable = false}}, SHIFT(531), + [2741] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1860), + [2743] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1772), + [2745] = {.entry = {.count = 1, .reusable = false}}, SHIFT(68), + [2747] = {.entry = {.count = 1, .reusable = false}}, SHIFT(67), + [2749] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1177), + [2751] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1981), + [2753] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1976), + [2755] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1976), + [2757] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2060), + [2759] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2056), + [2761] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2047), + [2763] = {.entry = {.count = 1, .reusable = false}}, SHIFT(524), + [2765] = {.entry = {.count = 1, .reusable = true}}, SHIFT(524), + [2767] = {.entry = {.count = 1, .reusable = false}}, SHIFT(380), + [2769] = {.entry = {.count = 1, .reusable = true}}, SHIFT(380), + [2771] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1183), + [2773] = {.entry = {.count = 1, .reusable = false}}, SHIFT(891), + [2775] = {.entry = {.count = 1, .reusable = false}}, SHIFT(735), + [2777] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1914), + [2779] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1774), + [2781] = {.entry = {.count = 1, .reusable = false}}, SHIFT(55), + [2783] = {.entry = {.count = 1, .reusable = false}}, SHIFT(54), + [2785] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1183), + [2787] = {.entry = {.count = 1, .reusable = false}}, SHIFT(336), + [2789] = {.entry = {.count = 1, .reusable = false}}, SHIFT(915), + [2791] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1901), + [2793] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1806), + [2795] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1800), + [2797] = {.entry = {.count = 1, .reusable = false}}, SHIFT(109), + [2799] = {.entry = {.count = 1, .reusable = false}}, SHIFT(104), + [2801] = {.entry = {.count = 1, .reusable = false}}, SHIFT(695), + [2803] = {.entry = {.count = 1, .reusable = true}}, SHIFT(695), + [2805] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2043), + [2807] = {.entry = {.count = 1, .reusable = false}}, SHIFT(992), + [2809] = {.entry = {.count = 1, .reusable = false}}, SHIFT(930), + [2811] = {.entry = {.count = 1, .reusable = false}}, SHIFT(843), + [2813] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1854), + [2815] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1775), + [2817] = {.entry = {.count = 1, .reusable = false}}, SHIFT(87), + [2819] = {.entry = {.count = 1, .reusable = false}}, SHIFT(89), + [2821] = {.entry = {.count = 1, .reusable = true}}, SHIFT(992), + [2823] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1040), + [2825] = {.entry = {.count = 1, .reusable = false}}, SHIFT(841), + [2827] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1040), + [2829] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1436), + [2831] = {.entry = {.count = 1, .reusable = false}}, SHIFT(853), + [2833] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1436), + [2835] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2032), + [2837] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1912), + [2839] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1329), + [2841] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1840), + [2843] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1101), + [2845] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1101), + [2847] = {.entry = {.count = 1, .reusable = false}}, SHIFT(477), + [2849] = {.entry = {.count = 1, .reusable = true}}, SHIFT(477), + [2851] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2033), + [2853] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1090), + [2855] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2036), + [2857] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1227), + [2859] = {.entry = {.count = 1, .reusable = false}}, SHIFT(547), + [2861] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1227), + [2863] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2019), + [2865] = {.entry = {.count = 1, .reusable = false}}, SHIFT(369), + [2867] = {.entry = {.count = 1, .reusable = false}}, SHIFT(166), + [2869] = {.entry = {.count = 1, .reusable = true}}, SHIFT(369), + [2871] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1082), + [2873] = {.entry = {.count = 1, .reusable = false}}, SHIFT(607), + [2875] = {.entry = {.count = 1, .reusable = false}}, SHIFT(175), + [2877] = {.entry = {.count = 1, .reusable = true}}, SHIFT(607), + [2879] = {.entry = {.count = 1, .reusable = false}}, SHIFT(842), + [2881] = {.entry = {.count = 1, .reusable = false}}, SHIFT(907), + [2883] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1905), + [2885] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1911), + [2887] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1792), + [2889] = {.entry = {.count = 1, .reusable = false}}, SHIFT(124), + [2891] = {.entry = {.count = 1, .reusable = false}}, SHIFT(125), + [2893] = {.entry = {.count = 1, .reusable = false}}, SHIFT(989), + [2895] = {.entry = {.count = 1, .reusable = true}}, SHIFT(989), + [2897] = {.entry = {.count = 1, .reusable = false}}, SHIFT(662), + [2899] = {.entry = {.count = 1, .reusable = false}}, SHIFT(173), + [2901] = {.entry = {.count = 1, .reusable = true}}, SHIFT(662), + [2903] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1916), + [2905] = {.entry = {.count = 1, .reusable = false}}, SHIFT(464), + [2907] = {.entry = {.count = 1, .reusable = false}}, SHIFT(525), + [2909] = {.entry = {.count = 1, .reusable = false}}, SHIFT(454), + [2911] = {.entry = {.count = 1, .reusable = false}}, SHIFT(897), + [2913] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1882), + [2915] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1883), + [2917] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1784), + [2919] = {.entry = {.count = 1, .reusable = false}}, SHIFT(88), + [2921] = {.entry = {.count = 1, .reusable = false}}, SHIFT(76), + [2923] = {.entry = {.count = 1, .reusable = true}}, SHIFT(454), + [2925] = {.entry = {.count = 1, .reusable = false}}, SHIFT(182), + [2927] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1450), + [2929] = {.entry = {.count = 1, .reusable = false}}, SHIFT(876), + [2931] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1450), + [2933] = {.entry = {.count = 1, .reusable = false}}, SHIFT(799), + [2935] = {.entry = {.count = 1, .reusable = false}}, SHIFT(171), + [2937] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1092), + [2939] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1341), + [2941] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1341), + [2943] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1998), + [2945] = {.entry = {.count = 1, .reusable = false}}, SHIFT(143), + [2947] = {.entry = {.count = 1, .reusable = false}}, SHIFT(481), + [2949] = {.entry = {.count = 1, .reusable = false}}, SHIFT(431), + [2951] = {.entry = {.count = 1, .reusable = false}}, SHIFT(204), + [2953] = {.entry = {.count = 1, .reusable = false}}, SHIFT(232), + [2955] = {.entry = {.count = 1, .reusable = false}}, SHIFT(188), + [2957] = {.entry = {.count = 1, .reusable = false}}, SHIFT(168), + [2959] = {.entry = {.count = 1, .reusable = false}}, SHIFT(923), + [2961] = {.entry = {.count = 1, .reusable = false}}, SHIFT(265), + [2963] = {.entry = {.count = 1, .reusable = true}}, SHIFT(923), + [2965] = {.entry = {.count = 1, .reusable = false}}, SHIFT(540), + [2967] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1693), + [2969] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1126), + [2971] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1693), + [2973] = {.entry = {.count = 1, .reusable = false}}, SHIFT(625), + [2975] = {.entry = {.count = 1, .reusable = false}}, SHIFT(181), + [2977] = {.entry = {.count = 1, .reusable = true}}, SHIFT(625), + [2979] = {.entry = {.count = 1, .reusable = false}}, SHIFT(546), + [2981] = {.entry = {.count = 1, .reusable = false}}, SHIFT(169), + [2983] = {.entry = {.count = 1, .reusable = true}}, SHIFT(546), + [2985] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2074), + [2987] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1744), + [2989] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2074), + [2991] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1007), + [2993] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1305), + [2995] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1305), + [2997] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2045), + [2999] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2044), + [3001] = {.entry = {.count = 1, .reusable = false}}, SHIFT(469), + [3003] = {.entry = {.count = 1, .reusable = false}}, SHIFT(178), + [3005] = {.entry = {.count = 1, .reusable = true}}, SHIFT(469), + [3007] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2037), + [3009] = {.entry = {.count = 1, .reusable = false}}, SHIFT(869), + [3011] = {.entry = {.count = 1, .reusable = false}}, SHIFT(231), + [3013] = {.entry = {.count = 1, .reusable = true}}, SHIFT(869), + [3015] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1159), + [3017] = {.entry = {.count = 1, .reusable = false}}, SHIFT(167), + [3019] = {.entry = {.count = 1, .reusable = false}}, SHIFT(172), + [3021] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_pipeline_repeat1, 2, 0, 0), SHIFT_REPEAT(143), + [3024] = {.entry = {.count = 1, .reusable = false}}, SHIFT(177), + [3026] = {.entry = {.count = 1, .reusable = false}}, SHIFT(170), + [3028] = {.entry = {.count = 1, .reusable = false}}, SHIFT(872), + [3030] = {.entry = {.count = 1, .reusable = false}}, SHIFT(270), + [3032] = {.entry = {.count = 1, .reusable = true}}, SHIFT(872), + [3034] = {.entry = {.count = 1, .reusable = false}}, SHIFT(637), + [3036] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1361), + [3038] = {.entry = {.count = 1, .reusable = false}}, SHIFT(343), + [3040] = {.entry = {.count = 1, .reusable = false}}, SHIFT(669), + [3042] = {.entry = {.count = 1, .reusable = true}}, SHIFT(669), + [3044] = {.entry = {.count = 1, .reusable = false}}, SHIFT(237), + [3046] = {.entry = {.count = 1, .reusable = false}}, SHIFT(663), + [3048] = {.entry = {.count = 1, .reusable = false}}, SHIFT(493), + [3050] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2025), + [3052] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1992), + [3054] = {.entry = {.count = 1, .reusable = false}}, SHIFT(352), + [3056] = {.entry = {.count = 1, .reusable = true}}, SHIFT(352), + [3058] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1982), + [3060] = {.entry = {.count = 1, .reusable = false}}, SHIFT(931), + [3062] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1472), + [3064] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1861), + [3066] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1793), + [3068] = {.entry = {.count = 1, .reusable = false}}, SHIFT(39), + [3070] = {.entry = {.count = 1, .reusable = false}}, SHIFT(106), + [3072] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1982), + [3074] = {.entry = {.count = 1, .reusable = false}}, SHIFT(165), + [3076] = {.entry = {.count = 1, .reusable = false}}, SHIFT(176), + [3078] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1596), + [3080] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1596), + [3082] = {.entry = {.count = 1, .reusable = false}}, SHIFT(209), + [3084] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1083), + [3086] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2050), + [3088] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1017), + [3090] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1017), + [3092] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1573), + [3094] = {.entry = {.count = 1, .reusable = false}}, SHIFT(358), + [3096] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1564), + [3099] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1564), + [3102] = {.entry = {.count = 1, .reusable = false}}, SHIFT(985), + [3104] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1873), + [3106] = {.entry = {.count = 1, .reusable = false}}, SHIFT(322), + [3108] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__heredoc_command, 2, 0, 31), SHIFT_REPEAT(1788), + [3111] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__heredoc_command, 2, 0, 31), + [3113] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__heredoc_command, 2, 0, 31), SHIFT_REPEAT(910), + [3116] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__heredoc_command, 2, 0, 31), SHIFT_REPEAT(1810), + [3119] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__heredoc_command, 2, 0, 31), SHIFT_REPEAT(1811), + [3122] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__heredoc_command, 2, 0, 31), SHIFT_REPEAT(1798), + [3125] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__heredoc_command, 2, 0, 31), SHIFT_REPEAT(74), + [3128] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__heredoc_command, 2, 0, 31), SHIFT_REPEAT(51), + [3131] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1540), + [3134] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1540), + [3137] = {.entry = {.count = 1, .reusable = false}}, SHIFT(377), + [3139] = {.entry = {.count = 1, .reusable = false}}, SHIFT(458), + [3141] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1540), + [3143] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1523), + [3145] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1109), + [3147] = {.entry = {.count = 1, .reusable = false}}, SHIFT(795), + [3149] = {.entry = {.count = 1, .reusable = false}}, SHIFT(339), + [3151] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1600), + [3154] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(846), + [3157] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_redirected_statement_repeat2, 2, 0, 0), SHIFT_REPEAT(1936), + [3160] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1540), + [3162] = {.entry = {.count = 1, .reusable = false}}, SHIFT(828), + [3164] = {.entry = {.count = 1, .reusable = false}}, SHIFT(361), + [3166] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1954), + [3168] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1956), + [3170] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2073), + [3172] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expansion_expression, 1, 0, 1), + [3174] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2077), + [3176] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2073), + [3178] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expansion_body, 1, 0, 9), + [3180] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1971), + [3182] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1971), + [3184] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1697), + [3186] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expansion_body, 1, 0, 4), + [3188] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1957), + [3190] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1966), + [3192] = {.entry = {.count = 1, .reusable = false}}, SHIFT(906), + [3194] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1960), + [3196] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1964), + [3198] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1964), + [3200] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1288), + [3202] = {.entry = {.count = 1, .reusable = false}}, SHIFT(530), + [3204] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1688), + [3206] = {.entry = {.count = 1, .reusable = false}}, SHIFT(901), + [3208] = {.entry = {.count = 1, .reusable = false}}, SHIFT(382), + [3210] = {.entry = {.count = 1, .reusable = false}}, SHIFT(429), + [3212] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1684), + [3214] = {.entry = {.count = 1, .reusable = false}}, SHIFT(613), + [3216] = {.entry = {.count = 1, .reusable = false}}, SHIFT(521), + [3218] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1975), + [3220] = {.entry = {.count = 1, .reusable = false}}, SHIFT(537), + [3222] = {.entry = {.count = 1, .reusable = false}}, SHIFT(549), + [3224] = {.entry = {.count = 1, .reusable = false}}, SHIFT(854), + [3226] = {.entry = {.count = 1, .reusable = false}}, SHIFT(497), + [3228] = {.entry = {.count = 1, .reusable = false}}, SHIFT(362), + [3230] = {.entry = {.count = 1, .reusable = false}}, SHIFT(861), + [3232] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1089), + [3234] = {.entry = {.count = 1, .reusable = false}}, SHIFT(435), + [3236] = {.entry = {.count = 1, .reusable = false}}, SHIFT(556), + [3238] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1974), + [3240] = {.entry = {.count = 1, .reusable = false}}, SHIFT(648), + [3242] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2064), + [3244] = {.entry = {.count = 1, .reusable = false}}, SHIFT(864), + [3246] = {.entry = {.count = 1, .reusable = false}}, SHIFT(394), + [3248] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1465), + [3250] = {.entry = {.count = 1, .reusable = false}}, SHIFT(852), + [3252] = {.entry = {.count = 1, .reusable = false}}, SHIFT(593), + [3254] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1463), + [3256] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1080), + [3258] = {.entry = {.count = 1, .reusable = false}}, SHIFT(389), + [3260] = {.entry = {.count = 1, .reusable = false}}, SHIFT(332), + [3262] = {.entry = {.count = 1, .reusable = false}}, SHIFT(367), + [3264] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2054), + [3266] = {.entry = {.count = 1, .reusable = false}}, SHIFT(597), + [3268] = {.entry = {.count = 1, .reusable = false}}, SHIFT(642), + [3270] = {.entry = {.count = 1, .reusable = false}}, SHIFT(611), + [3272] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1672), + [3274] = {.entry = {.count = 1, .reusable = false}}, SHIFT(656), + [3276] = {.entry = {.count = 1, .reusable = false}}, SHIFT(363), + [3278] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2052), + [3280] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2053), + [3282] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2053), + [3284] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2007), + [3286] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1597), + [3288] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1248), + [3290] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2002), + [3292] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1234), + [3294] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1039), + [3296] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1212), + [3298] = {.entry = {.count = 1, .reusable = false}}, SHIFT(661), + [3300] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1030), + [3302] = {.entry = {.count = 1, .reusable = false}}, SHIFT(448), + [3304] = {.entry = {.count = 1, .reusable = false}}, SHIFT(324), + [3306] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1426), + [3308] = {.entry = {.count = 1, .reusable = false}}, SHIFT(466), + [3310] = {.entry = {.count = 1, .reusable = false}}, SHIFT(821), + [3312] = {.entry = {.count = 1, .reusable = false}}, SHIFT(812), + [3314] = {.entry = {.count = 1, .reusable = false}}, SHIFT(941), + [3316] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1416), + [3318] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1121), + [3320] = {.entry = {.count = 1, .reusable = false}}, SHIFT(518), + [3322] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2084), + [3324] = {.entry = {.count = 1, .reusable = false}}, SHIFT(516), + [3326] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2086), + [3328] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1002), + [3330] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1124), + [3332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2076), + [3334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1698), + [3336] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1699), + [3338] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1698), + [3340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1699), + [3342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1421), + [3344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(811), + [3346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1120), + [3348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(321), + [3350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1281), + [3352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(972), + [3354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(492), + [3356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1029), + [3358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(645), + [3360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1209), + [3362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1592), + [3364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1550), + [3366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(606), + [3368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(586), + [3370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(438), + [3372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2051), + [3374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1441), + [3376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2090), + [3378] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2090), + [3380] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__heredoc_command, 1, 0, 13), + [3382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(359), + [3384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(627), + [3386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(885), + [3388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1989), + [3390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(566), + [3392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(908), + [3394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(323), + [3396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(862), + [3398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1686), + [3400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(399), + [3402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(491), + [3404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(490), + [3406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(544), + [3408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1085), + [3410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2011), + [3412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1967), + [3414] = {.entry = {.count = 1, .reusable = false}}, SHIFT(902), + [3416] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1708), + [3418] = {.entry = {.count = 1, .reusable = false}}, SHIFT(427), + [3420] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1963), + [3422] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1805), + [3424] = {.entry = {.count = 1, .reusable = false}}, SHIFT(63), + [3426] = {.entry = {.count = 1, .reusable = false}}, SHIFT(62), + [3428] = {.entry = {.count = 1, .reusable = false}}, SHIFT(317), + [3430] = {.entry = {.count = 1, .reusable = false}}, SHIFT(316), + [3432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(316), + [3434] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1675), + [3436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1675), + [3438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(284), + [3440] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2295), + [3442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2295), + [3444] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1705), + [3446] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1690), + [3448] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_item, 6, 0, 74), + [3450] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__case_item_last, 6, 0, 74), + [3452] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_item, 6, 0, 74), + [3454] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1709), + [3456] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1685), + [3458] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1717), + [3460] = {.entry = {.count = 1, .reusable = false}}, SHIFT(315), + [3462] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_item, 4, 0, 54), + [3464] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__case_item_last, 4, 0, 54), + [3466] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_item, 4, 0, 54), + [3468] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1751), + [3470] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1221), + [3472] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_item, 7, 0, 77), + [3474] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__case_item_last, 7, 0, 77), + [3476] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_item, 7, 0, 77), + [3478] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1710), + [3480] = {.entry = {.count = 1, .reusable = false}}, SHIFT(632), + [3482] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1749), + [3484] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1237), + [3486] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1723), + [3488] = {.entry = {.count = 1, .reusable = false}}, SHIFT(631), + [3490] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1742), + [3492] = {.entry = {.count = 1, .reusable = false}}, SHIFT(608), + [3494] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1650), + [3496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1650), + [3498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(249), + [3500] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2257), + [3502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2257), + [3504] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1740), + [3506] = {.entry = {.count = 1, .reusable = false}}, SHIFT(612), + [3508] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1724), + [3510] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2067), + [3512] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1670), + [3514] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1670), + [3516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(303), + [3518] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1737), + [3520] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2059), + [3522] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1732), + [3524] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1462), + [3526] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1711), + [3528] = {.entry = {.count = 1, .reusable = false}}, SHIFT(496), + [3530] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1728), + [3532] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1459), + [3534] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1719), + [3536] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1081), + [3538] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1733), + [3540] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1076), + [3542] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1745), + [3544] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2010), + [3546] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1727), + [3548] = {.entry = {.count = 1, .reusable = false}}, SHIFT(365), + [3550] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1756), + [3552] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1422), + [3554] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1748), + [3556] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2017), + [3558] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1735), + [3560] = {.entry = {.count = 1, .reusable = false}}, SHIFT(326), + [3562] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1644), + [3564] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1644), + [3566] = {.entry = {.count = 1, .reusable = true}}, SHIFT(272), + [3568] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1761), + [3570] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1413), + [3572] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1702), + [3574] = {.entry = {.count = 1, .reusable = false}}, SHIFT(903), + [3576] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1704), + [3578] = {.entry = {.count = 1, .reusable = false}}, SHIFT(522), + [3580] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1706), + [3582] = {.entry = {.count = 1, .reusable = false}}, SHIFT(900), + [3584] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1760), + [3586] = {.entry = {.count = 1, .reusable = false}}, SHIFT(953), + [3588] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1739), + [3590] = {.entry = {.count = 1, .reusable = false}}, SHIFT(657), + [3592] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1752), + [3594] = {.entry = {.count = 1, .reusable = false}}, SHIFT(660), + [3596] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1767), + [3598] = {.entry = {.count = 1, .reusable = false}}, SHIFT(946), + [3600] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1768), + [3602] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1125), + [3604] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1712), + [3606] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1984), + [3608] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1762), + [3610] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1122), + [3612] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, 0, 0), SHIFT_REPEAT(902), + [3615] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, 0, 0), SHIFT_REPEAT(1791), + [3618] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, 0, 0), + [3620] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, 0, 0), SHIFT_REPEAT(1963), + [3623] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, 0, 0), SHIFT_REPEAT(1805), + [3626] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, 0, 0), SHIFT_REPEAT(63), + [3629] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 2, 0, 0), SHIFT_REPEAT(62), + [3632] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1713), + [3634] = {.entry = {.count = 1, .reusable = false}}, SHIFT(498), + [3636] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_item, 5, 0, 63), + [3638] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__case_item_last, 5, 0, 63), + [3640] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_item, 5, 0, 63), + [3642] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1766), + [3644] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2091), + [3646] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1716), + [3648] = {.entry = {.count = 1, .reusable = false}}, SHIFT(424), + [3650] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_item, 5, 0, 64), + [3652] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__case_item_last, 5, 0, 64), + [3654] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_item, 5, 0, 64), + [3656] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1764), + [3658] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2082), + [3660] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1641), + [3662] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1641), + [3664] = {.entry = {.count = 1, .reusable = true}}, SHIFT(260), + [3666] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1720), + [3668] = {.entry = {.count = 1, .reusable = false}}, SHIFT(430), + [3670] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1714), + [3672] = {.entry = {.count = 1, .reusable = false}}, SHIFT(536), + [3674] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_item, 5, 0, 65), + [3676] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__case_item_last, 5, 0, 65), + [3678] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_item, 5, 0, 65), + [3680] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1614), + [3682] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1614), + [3684] = {.entry = {.count = 1, .reusable = true}}, SHIFT(658), + [3686] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1722), + [3688] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1988), + [3690] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1759), + [3692] = {.entry = {.count = 1, .reusable = false}}, SHIFT(809), + [3694] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1765), + [3696] = {.entry = {.count = 1, .reusable = false}}, SHIFT(517), + [3698] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1754), + [3700] = {.entry = {.count = 1, .reusable = false}}, SHIFT(439), + [3702] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1758), + [3704] = {.entry = {.count = 1, .reusable = false}}, SHIFT(813), + [3706] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1757), + [3708] = {.entry = {.count = 1, .reusable = false}}, SHIFT(450), + [3710] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1673), + [3712] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1673), + [3714] = {.entry = {.count = 1, .reusable = true}}, SHIFT(690), + [3716] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2207), + [3718] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2207), + [3720] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_item, 6, 0, 73), + [3722] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__case_item_last, 6, 0, 73), + [3724] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_item, 6, 0, 73), + [3726] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1721), + [3728] = {.entry = {.count = 1, .reusable = false}}, SHIFT(550), + [3730] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1763), + [3732] = {.entry = {.count = 1, .reusable = false}}, SHIFT(523), + [3734] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1753), + [3736] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1028), + [3738] = {.entry = {.count = 1, .reusable = false}}, SHIFT(494), + [3740] = {.entry = {.count = 1, .reusable = false}}, SHIFT(495), + [3742] = {.entry = {.count = 1, .reusable = true}}, SHIFT(495), + [3744] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1715), + [3746] = {.entry = {.count = 1, .reusable = false}}, SHIFT(860), + [3748] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1750), + [3750] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1032), + [3752] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1707), + [3754] = {.entry = {.count = 1, .reusable = false}}, SHIFT(401), + [3756] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_case_item, 6, 0, 72), + [3758] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym__case_item_last, 6, 0, 72), + [3760] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_case_item, 6, 0, 72), + [3762] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1718), + [3764] = {.entry = {.count = 1, .reusable = false}}, SHIFT(863), + [3766] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1731), + [3768] = {.entry = {.count = 1, .reusable = false}}, SHIFT(563), + [3770] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1746), + [3772] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1589), + [3774] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1725), + [3776] = {.entry = {.count = 1, .reusable = false}}, SHIFT(887), + [3778] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1738), + [3780] = {.entry = {.count = 1, .reusable = false}}, SHIFT(596), + [3782] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1703), + [3784] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1245), + [3786] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1741), + [3788] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1601), + [3790] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1729), + [3792] = {.entry = {.count = 1, .reusable = false}}, SHIFT(882), + [3794] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1755), + [3796] = {.entry = {.count = 1, .reusable = false}}, SHIFT(318), + [3798] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1747), + [3800] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1284), + [3802] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1743), + [3804] = {.entry = {.count = 1, .reusable = false}}, SHIFT(381), + [3806] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2001), + [3808] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2005), + [3810] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2005), + [3812] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1736), + [3814] = {.entry = {.count = 1, .reusable = false}}, SHIFT(356), + [3816] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1734), + [3818] = {.entry = {.count = 1, .reusable = false}}, SHIFT(368), + [3820] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_case_statement_repeat1, 1, 0, 37), + [3822] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_case_statement_repeat1, 1, 0, 37), + [3824] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1593), + [3826] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1593), + [3828] = {.entry = {.count = 1, .reusable = true}}, SHIFT(850), + [3830] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1594), + [3832] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1594), + [3834] = {.entry = {.count = 1, .reusable = true}}, SHIFT(595), + [3836] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1590), + [3838] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1590), + [3840] = {.entry = {.count = 1, .reusable = true}}, SHIFT(929), + [3842] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1602), + [3844] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1602), + [3846] = {.entry = {.count = 1, .reusable = true}}, SHIFT(240), + [3848] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1917), + [3850] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1804), + [3852] = {.entry = {.count = 1, .reusable = true}}, SHIFT(119), + [3854] = {.entry = {.count = 1, .reusable = true}}, SHIFT(110), + [3856] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1944), + [3858] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_body, 1, 0, 0), + [3860] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1584), + [3862] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1584), + [3864] = {.entry = {.count = 1, .reusable = true}}, SHIFT(233), + [3866] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1945), + [3868] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_heredoc_body, 2, 0, 0), + [3870] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_heredoc_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1917), + [3873] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_heredoc_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1804), + [3876] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_heredoc_body_repeat1, 2, 0, 0), SHIFT_REPEAT(119), + [3879] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_heredoc_body_repeat1, 2, 0, 0), SHIFT_REPEAT(110), + [3882] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_heredoc_body_repeat1, 2, 0, 0), SHIFT_REPEAT(1945), + [3885] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_heredoc_body_repeat1, 2, 0, 0), + [3887] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1679), + [3889] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1679), + [3891] = {.entry = {.count = 1, .reusable = true}}, SHIFT(222), + [3893] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1678), + [3895] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1678), + [3897] = {.entry = {.count = 1, .reusable = true}}, SHIFT(638), + [3899] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1586), + [3901] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1586), + [3903] = {.entry = {.count = 1, .reusable = true}}, SHIFT(271), + [3905] = {.entry = {.count = 1, .reusable = false}}, SHIFT(905), + [3907] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2111), + [3909] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1574), + [3911] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1574), + [3913] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__extglob_blob, 1, 0, 0), + [3915] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1867), + [3917] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1769), + [3919] = {.entry = {.count = 1, .reusable = true}}, SHIFT(90), + [3921] = {.entry = {.count = 1, .reusable = true}}, SHIFT(94), + [3923] = {.entry = {.count = 1, .reusable = false}}, SHIFT(934), + [3925] = {.entry = {.count = 1, .reusable = false}}, SHIFT(925), + [3927] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2008), + [3929] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expansion_regex, 2, 0, 23), + [3931] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1841), + [3933] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1972), + [3935] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2008), + [3937] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1972), + [3939] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1983), + [3941] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1561), + [3943] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 1, 0, 0), + [3945] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1980), + [3947] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1574), + [3950] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1574), + [3953] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_expansion_regex, 1, 0, 23), + [3955] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1959), + [3957] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1959), + [3959] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_expansion_regex_repeat1, 2, 0, 0), SHIFT_REPEAT(2008), + [3962] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_expansion_regex_repeat1, 2, 0, 0), + [3964] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_expansion_regex_repeat1, 2, 0, 0), SHIFT_REPEAT(1841), + [3967] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_expansion_regex_repeat1, 2, 0, 0), SHIFT_REPEAT(1972), + [3970] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_expansion_regex_repeat1, 2, 0, 0), SHIFT_REPEAT(2008), + [3973] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_expansion_regex_repeat1, 2, 0, 0), SHIFT_REPEAT(1972), + [3976] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_string_repeat1, 3, 0, 0), + [3978] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1588), + [3980] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1203), + [3982] = {.entry = {.count = 1, .reusable = true}}, SHIFT(128), + [3984] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), + [3986] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1536), + [3988] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), + [3990] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1572), + [3992] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1604), + [3994] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), + [3996] = {.entry = {.count = 1, .reusable = false}}, SHIFT(1599), + [3998] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1376), + [4000] = {.entry = {.count = 1, .reusable = true}}, SHIFT(31), + [4002] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1628), + [4004] = {.entry = {.count = 1, .reusable = true}}, SHIFT(33), + [4006] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_expansion_regex_repeat1, 1, 0, 41), + [4008] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_expansion_regex_repeat1, 1, 0, 41), + [4010] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1258), + [4012] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1321), + [4014] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1622), + [4016] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2243), + [4018] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1942), + [4020] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2137), + [4022] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2165), + [4024] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1528), + [4026] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__case_item_last_repeat1, 2, 0, 36), + [4028] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 2, 0, 0), + [4030] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_if_statement_repeat1, 2, 0, 0), SHIFT_REPEAT(128), + [4033] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_concatenation_repeat1, 2, 0, 0), SHIFT_REPEAT(1572), + [4036] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__concatenation_in_expansion_repeat1, 2, 0, 0), + [4038] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__concatenation_in_expansion_repeat1, 2, 0, 0), SHIFT_REPEAT(1787), + [4041] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__concatenation_in_expansion, 2, 0, 0), + [4043] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1787), + [4045] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expansion_expression, 2, 0, 1), + [4047] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__extglob_blob, 2, 0, 0), + [4049] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2102), + [4051] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [4053] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29), + [4055] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28), + [4057] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), + [4059] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [4061] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__case_item_last_repeat1, 2, 0, 55), SHIFT_REPEAT(1536), + [4064] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__case_item_last_repeat1, 2, 0, 55), + [4066] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), + [4068] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), + [4070] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), + [4072] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__case_item_last, 5, 0, 72), + [4074] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1899), + [4076] = {.entry = {.count = 1, .reusable = true}}, SHIFT(143), + [4078] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__extglob_blob, 3, 0, 0), + [4080] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__case_item_last, 3, 0, 54), + [4082] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1816), + [4084] = {.entry = {.count = 1, .reusable = true}}, SHIFT(86), + [4086] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__case_item_last, 4, 0, 65), + [4088] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1920), + [4090] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__case_item_last, 5, 0, 73), + [4092] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1888), + [4094] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1876), + [4096] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__case_item_last, 4, 0, 64), + [4098] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1870), + [4100] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1891), + [4102] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__case_item_last, 4, 0, 63), + [4104] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1865), + [4106] = {.entry = {.count = 1, .reusable = true}}, SHIFT(117), + [4108] = {.entry = {.count = 1, .reusable = true}}, SHIFT(150), + [4110] = {.entry = {.count = 1, .reusable = true}}, SHIFT(147), + [4112] = {.entry = {.count = 1, .reusable = true}}, SHIFT(154), + [4114] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__case_item_last, 6, 0, 77), + [4116] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1819), + [4118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), + [4120] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__case_item_last, 5, 0, 74), + [4122] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1812), + [4124] = {.entry = {.count = 1, .reusable = true}}, SHIFT(149), + [4126] = {.entry = {.count = 1, .reusable = true}}, SHIFT(151), + [4128] = {.entry = {.count = 1, .reusable = true}}, SHIFT(156), + [4130] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1818), + [4132] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1814), + [4134] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2061), + [4136] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1370), + [4138] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2058), + [4140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(459), + [4142] = {.entry = {.count = 1, .reusable = true}}, SHIFT(896), + [4144] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1510), + [4146] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1652), + [4148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1653), + [4150] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1357), + [4152] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1349), + [4154] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1498), + [4156] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1632), + [4158] = {.entry = {.count = 1, .reusable = true}}, SHIFT(456), + [4160] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1335), + [4162] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2029), + [4164] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1479), + [4166] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1325), + [4168] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1333), + [4170] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1469), + [4172] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2030), + [4174] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1566), + [4176] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1531), + [4178] = {.entry = {.count = 1, .reusable = true}}, SHIFT(455), + [4180] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2026), + [4182] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1927), + [4184] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1348), + [4186] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1928), + [4188] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2034), + [4190] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2035), + [4192] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1931), + [4194] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1322), + [4196] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1933), + [4198] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1649), + [4200] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2039), + [4202] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1934), + [4204] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1922), + [4206] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1932), + [4208] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1635), + [4210] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2040), + [4212] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1636), + [4214] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1930), + [4216] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1929), + [4218] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1926), + [4220] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1651), + [4222] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1925), + [4224] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1386), + [4226] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1383), + [4228] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1374), + [4230] = {.entry = {.count = 1, .reusable = true}}, SHIFT(904), + [4232] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1631), + [4234] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2048), + [4236] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2049), + [4238] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1924), + [4240] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1630), + [4242] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1629), + [4244] = {.entry = {.count = 1, .reusable = true}}, SHIFT(621), + [4246] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2062), + [4248] = {.entry = {.count = 1, .reusable = true}}, SHIFT(331), + [4250] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1470), + [4252] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1103), + [4254] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1106), + [4256] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1108), + [4258] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1627), + [4260] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1427), + [4262] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1425), + [4264] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1424), + [4266] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1291), + [4268] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1623), + [4270] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1198), + [4272] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1202), + [4274] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1208), + [4276] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1621), + [4278] = {.entry = {.count = 1, .reusable = true}}, SHIFT(328), + [4280] = {.entry = {.count = 1, .reusable = true}}, SHIFT(646), + [4282] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1993), + [4284] = {.entry = {.count = 1, .reusable = true}}, SHIFT(614), + [4286] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1320), + [4288] = {.entry = {.count = 1, .reusable = true}}, SHIFT(269), + [4290] = {.entry = {.count = 1, .reusable = true}}, SHIFT(610), + [4292] = {.entry = {.count = 1, .reusable = true}}, SHIFT(274), + [4294] = {.entry = {.count = 1, .reusable = true}}, SHIFT(329), + [4296] = {.entry = {.count = 1, .reusable = true}}, SHIFT(878), + [4298] = {.entry = {.count = 1, .reusable = true}}, SHIFT(163), + [4300] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2041), + [4302] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1206), + [4304] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1455), + [4306] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1460), + [4308] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1461), + [4310] = {.entry = {.count = 1, .reusable = true}}, SHIFT(924), + [4312] = {.entry = {.count = 1, .reusable = true}}, SHIFT(917), + [4314] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1244), + [4316] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1241), + [4318] = {.entry = {.count = 1, .reusable = true}}, SHIFT(912), + [4320] = {.entry = {.count = 1, .reusable = true}}, SHIFT(160), + [4322] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1240), + [4324] = {.entry = {.count = 1, .reusable = true}}, SHIFT(373), + [4326] = {.entry = {.count = 1, .reusable = true}}, SHIFT(594), + [4328] = {.entry = {.count = 1, .reusable = true}}, SHIFT(375), + [4330] = {.entry = {.count = 1, .reusable = true}}, SHIFT(565), + [4332] = {.entry = {.count = 1, .reusable = true}}, SHIFT(564), + [4334] = {.entry = {.count = 1, .reusable = true}}, SHIFT(376), + [4336] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1969), + [4338] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1238), + [4340] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2038), + [4342] = {.entry = {.count = 1, .reusable = true}}, SHIFT(515), + [4344] = {.entry = {.count = 1, .reusable = true}}, SHIFT(510), + [4346] = {.entry = {.count = 1, .reusable = true}}, SHIFT(499), + [4348] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1986), + [4350] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1970), + [4352] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1958), + [4354] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2016), + [4356] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1228), + [4358] = {.entry = {.count = 1, .reusable = true}}, SHIFT(162), + [4360] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1994), + [4362] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2000), + [4364] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1226), + [4366] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2024), + [4368] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2027), + [4370] = {.entry = {.count = 1, .reusable = true}}, SHIFT(161), + [4372] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1611), + [4374] = {.entry = {.count = 1, .reusable = true}}, SHIFT(871), + [4376] = {.entry = {.count = 1, .reusable = true}}, SHIFT(552), + [4378] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1575), + [4380] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1541), + [4382] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1996), + [4384] = {.entry = {.count = 1, .reusable = true}}, SHIFT(857), + [4386] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1663), + [4388] = {.entry = {.count = 1, .reusable = true}}, SHIFT(275), + [4390] = {.entry = {.count = 1, .reusable = true}}, SHIFT(858), + [4392] = {.entry = {.count = 1, .reusable = true}}, SHIFT(278), + [4394] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1217), + [4396] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1214), + [4398] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1213), + [4400] = {.entry = {.count = 1, .reusable = true}}, SHIFT(553), + [4402] = {.entry = {.count = 1, .reusable = true}}, SHIFT(555), + [4404] = {.entry = {.count = 1, .reusable = true}}, SHIFT(865), + [4406] = {.entry = {.count = 1, .reusable = true}}, SHIFT(868), + [4408] = {.entry = {.count = 1, .reusable = true}}, SHIFT(633), + [4410] = {.entry = {.count = 1, .reusable = true}}, SHIFT(599), + [4412] = {.entry = {.count = 1, .reusable = true}}, SHIFT(603), + [4414] = {.entry = {.count = 1, .reusable = true}}, SHIFT(388), + [4416] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1201), + [4418] = {.entry = {.count = 1, .reusable = true}}, SHIFT(386), + [4420] = {.entry = {.count = 1, .reusable = true}}, SHIFT(384), + [4422] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2046), + [4424] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2018), + [4426] = {.entry = {.count = 1, .reusable = true}}, SHIFT(598), + [4428] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1671), + [4430] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1646), + [4432] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1642), + [4434] = {.entry = {.count = 1, .reusable = true}}, SHIFT(422), + [4436] = {.entry = {.count = 1, .reusable = true}}, SHIFT(542), + [4438] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1371), + [4440] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1038), + [4442] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1034), + [4444] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1033), + [4446] = {.entry = {.count = 1, .reusable = true}}, SHIFT(539), + [4448] = {.entry = {.count = 1, .reusable = true}}, SHIFT(820), + [4450] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1253), + [4452] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1377), + [4454] = {.entry = {.count = 1, .reusable = true}}, SHIFT(817), + [4456] = {.entry = {.count = 1, .reusable = true}}, SHIFT(164), + [4458] = {.entry = {.count = 1, .reusable = true}}, SHIFT(816), + [4460] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1296), + [4462] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2089), + [4464] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1182), + [4466] = {.entry = {.count = 1, .reusable = true}}, SHIFT(245), + [4468] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expansion_body, 2, 0, 27), + [4470] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expansion_body, 2, 0, 26), + [4472] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2079), + [4474] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2080), + [4476] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1507), + [4478] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1496), + [4480] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1295), + [4482] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1292), + [4484] = {.entry = {.count = 1, .reusable = true}}, SHIFT(981), + [4486] = {.entry = {.count = 1, .reusable = true}}, SHIFT(966), + [4488] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1490), + [4490] = {.entry = {.count = 1, .reusable = true}}, SHIFT(965), + [4492] = {.entry = {.count = 1, .reusable = true}}, SHIFT(937), + [4494] = {.entry = {.count = 1, .reusable = true}}, SHIFT(486), + [4496] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2021), + [4498] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1487), + [4500] = {.entry = {.count = 1, .reusable = true}}, SHIFT(273), + [4502] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2023), + [4504] = {.entry = {.count = 1, .reusable = true}}, SHIFT(159), + [4506] = {.entry = {.count = 1, .reusable = true}}, SHIFT(397), + [4508] = {.entry = {.count = 1, .reusable = true}}, SHIFT(395), + [4510] = {.entry = {.count = 1, .reusable = true}}, SHIFT(393), + [4512] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1389), + [4514] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2020), + [4516] = {.entry = {.count = 1, .reusable = true}}, SHIFT(485), + [4518] = {.entry = {.count = 1, .reusable = true}}, SHIFT(483), + [4520] = {.entry = {.count = 1, .reusable = true}}, SHIFT(640), + [4522] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1985), + [4524] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1196), + [4526] = {.entry = {.count = 1, .reusable = true}}, SHIFT(643), + [4528] = {.entry = {.count = 1, .reusable = true}}, SHIFT(644), + [4530] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1692), + [4532] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1689), + [4534] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1687), + [4536] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_program, 1, 0, 2), + [4538] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [4540] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1979), + [4542] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1075), + [4544] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1078), + [4546] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1079), + [4548] = {.entry = {.count = 1, .reusable = true}}, SHIFT(635), + [4550] = {.entry = {.count = 1, .reusable = true}}, SHIFT(158), + [4552] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1990), + [4554] = {.entry = {.count = 1, .reusable = true}}, SHIFT(1551), +}; + +enum ts_external_scanner_symbol_identifiers { + ts_external_token_heredoc_start = 0, + ts_external_token_simple_heredoc_body = 1, + ts_external_token__heredoc_body_beginning = 2, + ts_external_token_heredoc_content = 3, + ts_external_token_heredoc_end = 4, + ts_external_token_file_descriptor = 5, + ts_external_token__empty_value = 6, + ts_external_token__concat = 7, + ts_external_token_variable_name = 8, + ts_external_token_regex = 9, + ts_external_token__expansion_word = 10, + ts_external_token_extglob_pattern = 11, + ts_external_token__bare_dollar = 12, + ts_external_token__immediate_double_hash = 13, + ts_external_token_LT_LT = 14, + ts_external_token_LT_LT_DASH = 15, + ts_external_token_heredoc_redirect_token1 = 16, + ts_external_token_LPAREN = 17, + ts_external_token_esac = 18, + ts_external_token___error_recovery = 19, +}; + +static const TSSymbol ts_external_scanner_symbol_map[EXTERNAL_TOKEN_COUNT] = { + [ts_external_token_heredoc_start] = sym_heredoc_start, + [ts_external_token_simple_heredoc_body] = sym_simple_heredoc_body, + [ts_external_token__heredoc_body_beginning] = sym__heredoc_body_beginning, + [ts_external_token_heredoc_content] = sym_heredoc_content, + [ts_external_token_heredoc_end] = sym_heredoc_end, + [ts_external_token_file_descriptor] = sym_file_descriptor, + [ts_external_token__empty_value] = sym__empty_value, + [ts_external_token__concat] = sym__concat, + [ts_external_token_variable_name] = sym_variable_name, + [ts_external_token_regex] = sym_regex, + [ts_external_token__expansion_word] = sym__expansion_word, + [ts_external_token_extglob_pattern] = sym_extglob_pattern, + [ts_external_token__bare_dollar] = sym__bare_dollar, + [ts_external_token__immediate_double_hash] = sym__immediate_double_hash, + [ts_external_token_LT_LT] = anon_sym_LT_LT, + [ts_external_token_LT_LT_DASH] = anon_sym_LT_LT_DASH, + [ts_external_token_heredoc_redirect_token1] = aux_sym_heredoc_redirect_token1, + [ts_external_token_LPAREN] = anon_sym_LPAREN, + [ts_external_token_esac] = anon_sym_esac, + [ts_external_token___error_recovery] = sym___error_recovery, +}; + +static const bool ts_external_scanner_states[61][EXTERNAL_TOKEN_COUNT] = { + [1] = { + [ts_external_token_heredoc_start] = true, + [ts_external_token_simple_heredoc_body] = true, + [ts_external_token__heredoc_body_beginning] = true, + [ts_external_token_heredoc_content] = true, + [ts_external_token_heredoc_end] = true, + [ts_external_token_file_descriptor] = true, + [ts_external_token__empty_value] = true, + [ts_external_token__concat] = true, + [ts_external_token_variable_name] = true, + [ts_external_token_regex] = true, + [ts_external_token__expansion_word] = true, + [ts_external_token_extglob_pattern] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token__immediate_double_hash] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_LPAREN] = true, + [ts_external_token_esac] = true, + [ts_external_token___error_recovery] = true, + }, + [2] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token_LPAREN] = true, + }, + [3] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_LPAREN] = true, + [ts_external_token_esac] = true, + }, + [4] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_LPAREN] = true, + }, + [5] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_esac] = true, + }, + [6] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [7] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [8] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_esac] = true, + }, + [9] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_LPAREN] = true, + }, + [10] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_LPAREN] = true, + [ts_external_token_esac] = true, + }, + [11] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [12] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_esac] = true, + }, + [13] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_LPAREN] = true, + }, + [14] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_esac] = true, + }, + [15] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [16] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + }, + [17] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [18] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + }, + [19] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_LPAREN] = true, + }, + [20] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_LPAREN] = true, + }, + [21] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_LPAREN] = true, + [ts_external_token_esac] = true, + }, + [22] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [23] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token_variable_name] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [24] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token_variable_name] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_esac] = true, + }, + [25] = { + [ts_external_token_LT_LT] = true, + }, + [26] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_esac] = true, + }, + [27] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [28] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_esac] = true, + }, + [29] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + }, + [30] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [31] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + }, + [32] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + }, + [33] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token_variable_name] = true, + [ts_external_token_LPAREN] = true, + [ts_external_token_esac] = true, + }, + [34] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + [ts_external_token_LPAREN] = true, + }, + [35] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token_variable_name] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + }, + [36] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token__bare_dollar] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + }, + [37] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + }, + [38] = { + [ts_external_token_variable_name] = true, + [ts_external_token_LPAREN] = true, + }, + [39] = { + [ts_external_token_extglob_pattern] = true, + [ts_external_token_heredoc_redirect_token1] = true, + [ts_external_token_LPAREN] = true, + [ts_external_token_esac] = true, + }, + [40] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [41] = { + [ts_external_token_file_descriptor] = true, + [ts_external_token__concat] = true, + [ts_external_token_variable_name] = true, + }, + [42] = { + [ts_external_token_variable_name] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [43] = { + [ts_external_token_extglob_pattern] = true, + [ts_external_token_LPAREN] = true, + [ts_external_token_esac] = true, + }, + [44] = { + [ts_external_token_extglob_pattern] = true, + [ts_external_token_LPAREN] = true, + }, + [45] = { + [ts_external_token_heredoc_redirect_token1] = true, + }, + [46] = { + [ts_external_token__bare_dollar] = true, + }, + [47] = { + [ts_external_token__empty_value] = true, + }, + [48] = { + [ts_external_token_extglob_pattern] = true, + }, + [49] = { + [ts_external_token__concat] = true, + [ts_external_token_heredoc_redirect_token1] = true, + }, + [50] = { + [ts_external_token_variable_name] = true, + [ts_external_token__expansion_word] = true, + }, + [51] = { + [ts_external_token__immediate_double_hash] = true, + }, + [52] = { + [ts_external_token_variable_name] = true, + }, + [53] = { + [ts_external_token_LT_LT] = true, + [ts_external_token_LT_LT_DASH] = true, + }, + [54] = { + [ts_external_token_heredoc_content] = true, + [ts_external_token_heredoc_end] = true, + }, + [55] = { + [ts_external_token__concat] = true, + }, + [56] = { + [ts_external_token_regex] = true, + }, + [57] = { + [ts_external_token_simple_heredoc_body] = true, + [ts_external_token__heredoc_body_beginning] = true, + }, + [58] = { + [ts_external_token_esac] = true, + }, + [59] = { + [ts_external_token_heredoc_end] = true, + }, + [60] = { + [ts_external_token_heredoc_start] = true, + }, +}; + +#ifdef __cplusplus +extern "C" { +#endif +void *tree_sitter_sh_external_scanner_create(void); +void tree_sitter_sh_external_scanner_destroy(void *); +bool tree_sitter_sh_external_scanner_scan(void *, TSLexer *, const bool *); +unsigned tree_sitter_sh_external_scanner_serialize(void *, char *); +void tree_sitter_sh_external_scanner_deserialize(void *, const char *, unsigned); + +#ifdef TREE_SITTER_HIDE_SYMBOLS +#define TS_PUBLIC +#elif defined(_WIN32) +#define TS_PUBLIC __declspec(dllexport) +#else +#define TS_PUBLIC __attribute__((visibility("default"))) +#endif + +TS_PUBLIC const TSLanguage *tree_sitter_sh(void) { + static const TSLanguage language = { + .version = LANGUAGE_VERSION, + .symbol_count = SYMBOL_COUNT, + .alias_count = ALIAS_COUNT, + .token_count = TOKEN_COUNT, + .external_token_count = EXTERNAL_TOKEN_COUNT, + .state_count = STATE_COUNT, + .large_state_count = LARGE_STATE_COUNT, + .production_id_count = PRODUCTION_ID_COUNT, + .field_count = FIELD_COUNT, + .max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH, + .parse_table = &ts_parse_table[0][0], + .small_parse_table = ts_small_parse_table, + .small_parse_table_map = ts_small_parse_table_map, + .parse_actions = ts_parse_actions, + .symbol_names = ts_symbol_names, + .field_names = ts_field_names, + .field_map_slices = ts_field_map_slices, + .field_map_entries = ts_field_map_entries, + .symbol_metadata = ts_symbol_metadata, + .public_symbol_map = ts_symbol_map, + .alias_map = ts_non_terminal_alias_map, + .alias_sequences = &ts_alias_sequences[0][0], + .lex_modes = ts_lex_modes, + .lex_fn = ts_lex, + .keyword_lex_fn = ts_lex_keywords, + .keyword_capture_token = sym_word, + .external_scanner = { + &ts_external_scanner_states[0][0], + ts_external_scanner_symbol_map, + tree_sitter_sh_external_scanner_create, + tree_sitter_sh_external_scanner_destroy, + tree_sitter_sh_external_scanner_scan, + tree_sitter_sh_external_scanner_serialize, + tree_sitter_sh_external_scanner_deserialize, + }, + .primary_state_ids = ts_primary_state_ids, + }; + return &language; +} +#ifdef __cplusplus +} +#endif +#include +#include +#include +#include + +void dump_to_file(const char *filename, void *data, size_t size, size_t elem_size) +{ + int file = open(filename, O_CREAT | O_RDWR | O_TRUNC, 0666); + + if (file < 0) + return ((void)printf("[error] opening %s failed \n", filename)); + if (write(file, data, size) < size) + printf("[error] writing to %s failed \n", filename); + else + printf("wrote %zu (%zu elems) to %s!\n", size, size / elem_size, filename); + close(file); +} + +int main(void) +{ + dump_to_file("./parse_table", ts_parse_table, sizeof(ts_parse_table), sizeof(*ts_parse_table)); + dump_to_file("./small_parse_table", ts_small_parse_table, sizeof(ts_small_parse_table), sizeof(*ts_small_parse_table)); + dump_to_file("./small_parse_table_map", ts_small_parse_table_map, sizeof(ts_small_parse_table_map), sizeof(*ts_small_parse_table_map)); + dump_to_file("./parse_actions_entries", ts_parse_actions, sizeof(ts_parse_actions), sizeof(*ts_parse_actions)); + // dump_to_file("./symbols_names", (void *)create_symbols_names(), 0); + // dump_to_file("./field_names", (void *)create_field_names(), 0); + dump_to_file("./field_map_slices", ts_field_map_slices, sizeof(ts_field_map_slices), sizeof(*ts_field_map_slices)); + dump_to_file("./field_map_entries", ts_field_map_entries, sizeof(ts_field_map_entries), sizeof(*ts_field_map_entries)); + dump_to_file("./symbols_metadata", ts_symbol_metadata, sizeof(ts_symbol_metadata), sizeof(*ts_symbol_metadata)); + dump_to_file("./unique_symbols_map", ts_symbol_map, sizeof(ts_symbol_map), sizeof(*ts_symbol_map)); + dump_to_file("./non_terminal_alias_map", ts_non_terminal_alias_map, sizeof(ts_non_terminal_alias_map), sizeof(*ts_non_terminal_alias_map)); + dump_to_file("./alias_sequences", ts_alias_sequences, sizeof(ts_alias_sequences), sizeof(*ts_alias_sequences)); + dump_to_file("./lex_modes", ts_lex_modes, sizeof(ts_lex_modes), sizeof(*ts_lex_modes)); + dump_to_file("./primary_state_ids", ts_primary_state_ids, sizeof(ts_primary_state_ids), sizeof(*ts_primary_state_ids)); + dump_to_file("./external_scanner_states", ts_external_scanner_states, sizeof(ts_external_scanner_states), sizeof(*ts_external_scanner_states)); + dump_to_file("./external_scanner_symbol_map", ts_external_scanner_symbol_map, sizeof(ts_external_scanner_symbol_map), sizeof(*ts_external_scanner_symbol_map)); +} diff --git a/parser/Grammar.mk b/parser/Grammar.mk index c377e9e4..728b28f3 100644 --- a/parser/Grammar.mk +++ b/parser/Grammar.mk @@ -6,25 +6,31 @@ # By: maiboyer +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2023/11/03 13:20:01 by maiboyer #+# #+# # -# Updated: 2024/06/06 23:17:06 by maiboyer ### ########.fr # +# Updated: 2024/06/30 17:56:39 by maiboyer ### ########.fr # # # # **************************************************************************** # ANAME = gmr BUILD_DIR = ../build -SRC_DIR = ./static +SRC_DIR = ./static +#../tree-sitter-sh/src +#./static BONUS_FLAGS = NAME = lib$(ANAME).a LIB_NAME ?= TARGET = $(BUILD_DIR)/$(NAME) CC ?= cc -CFLAGS = -Wall -Wextra -Werror -MMD -I./includes -I../includes -I../output/include +CFLAGS = -Wall -Wextra -Werror -MMD -I./includes -I../includes -I../output/include -I../tree-sitter-sh/src #CFLAGS += -fsanitize=address -fno-omit-frame-pointer -fsanitize-address-use-after-return=runtime -fno-common -fsanitize-address-use-after-scope include ./Filelist.mk +SRC_FILES += +#scanner +#parser + SRC = $(addsuffix .c,$(addprefix $(SRC_DIR)/,$(SRC_FILES))) OBJ = $(addsuffix .o,$(addprefix $(BUILD_DIR)/$(ANAME)/,$(SRC_FILES))) DEPS = $(addsuffix .d,$(addprefix $(BUILD_DIR)/$(ANAME)/,$(SRC_FILES))) diff --git a/parser/Parser.mk b/parser/Parser.mk index c06fd250..7f64ce40 100644 --- a/parser/Parser.mk +++ b/parser/Parser.mk @@ -6,14 +6,14 @@ # By: maiboyer +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2023/11/03 13:20:01 by maiboyer #+# #+# # -# Updated: 2024/06/24 00:37:07 by maiboyer ### ########.fr # +# Updated: 2024/06/30 16:23:47 by maiboyer ### ########.fr # # # # **************************************************************************** # ANAME = parser BUILD_DIR = ../build -SRC_DIR = ./nsrc +SRC_DIR = ./nnsrc GEN_DIR = ./generic BONUS_FLAGS = @@ -21,7 +21,7 @@ NAME = lib$(ANAME).a LIB_NAME ?= TARGET = $(BUILD_DIR)/$(NAME) CC ?= cc -CFLAGS = -Wall -Wextra -Werror -MMD -I./includes -I../includes -I../output/include -g3 +CFLAGS = -Wall -Wextra -Werror -MMD -I./includes -I../includes -I../output/include -g3 -I$(SRC_DIR) #CFLAGS += -fsanitize=address -fno-omit-frame-pointer -fsanitize-address-use-after-return=runtime -fno-common -fsanitize-address-use-after-scope SRC_FILES = lib diff --git a/parser/includes/api.h b/parser/includes/api.h index 19e84259..1be78fe0 100644 --- a/parser/includes/api.h +++ b/parser/includes/api.h @@ -1,2 +1,23 @@ -#include "../src/api.h" -#include "../src/combined.h" +#include "../nnsrc/alloc.h" +#include "../nnsrc/api.h" +#include "../nnsrc/array.h" +#include "../nnsrc/clock.h" +#include "../nnsrc/host.h" +#include "../nnsrc/language.h" +#include "../nnsrc/length.h" +#include "../nnsrc/lexer.h" +#include "../nnsrc/parser.h" +#include "../nnsrc/stack.h" +#include "../nnsrc/subtree.h" +#include "../nnsrc/tree.h" +#include "../nnsrc/tree_cursor.h" +#include "me/mem/mem.h" +#include + +typedef TSNode t_parse_node; +typedef TSSymbol t_symbol; +typedef TSParser t_first_parser; +typedef TSTree t_first_tree; +typedef TSLanguage t_language; + +TSFieldId ts_node_field_id_for_child(TSNode self, uint32_t child_index); diff --git a/parser/nnsrc/alloc.c b/parser/nnsrc/alloc.c new file mode 100644 index 00000000..007972a1 --- /dev/null +++ b/parser/nnsrc/alloc.c @@ -0,0 +1,52 @@ +#include "alloc.h" +#include "me/mem/mem.h" +#include "api.h" +#include + +static void *ts_malloc_default(size_t size) +{ + void *result = malloc(size); + if (size > 0 && !result) + { + fprintf(stderr, "tree-sitter failed to allocate %zu bytes", size); + abort(); + } + return result; +} + +static void *ts_calloc_default(size_t count, size_t size) +{ + void *result = calloc(count, size); + if (count > 0 && !result) + { + fprintf(stderr, "tree-sitter failed to allocate %zu bytes", count * size); + abort(); + } + return result; +} + +static void *ts_realloc_default(void *buffer, size_t size) +{ + void *result = realloc(buffer, size); + if (size > 0 && !result) + { + fprintf(stderr, "tree-sitter failed to reallocate %zu bytes", size); + abort(); + } + return result; +} + +// Allow clients to override allocation functions dynamically +TS_PUBLIC void *(*ts_current_malloc)(size_t) = mem_alloc; +TS_PUBLIC void *(*ts_current_calloc)(size_t, size_t) = mem_alloc_array; +TS_PUBLIC void *(*ts_current_realloc)(void *, size_t) = mem_realloc; +TS_PUBLIC void (*ts_current_free)(void *) = mem_free; + +void ts_set_allocator(void *(*new_malloc)(size_t size), void *(*new_calloc)(size_t count, size_t size), + void *(*new_realloc)(void *ptr, size_t size), void (*new_free)(void *ptr)) +{ + ts_current_malloc = new_malloc ? new_malloc : ts_malloc_default; + ts_current_calloc = new_calloc ? new_calloc : ts_calloc_default; + ts_current_realloc = new_realloc ? new_realloc : ts_realloc_default; + ts_current_free = new_free ? new_free : free; +} diff --git a/parser/nnsrc/alloc.h b/parser/nnsrc/alloc.h new file mode 100644 index 00000000..a0eadb7a --- /dev/null +++ b/parser/nnsrc/alloc.h @@ -0,0 +1,41 @@ +#ifndef TREE_SITTER_ALLOC_H_ +#define TREE_SITTER_ALLOC_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#if defined(TREE_SITTER_HIDDEN_SYMBOLS) || defined(_WIN32) +#define TS_PUBLIC +#else +#define TS_PUBLIC __attribute__((visibility("default"))) +#endif + +TS_PUBLIC extern void *(*ts_current_malloc)(size_t); +TS_PUBLIC extern void *(*ts_current_calloc)(size_t, size_t); +TS_PUBLIC extern void *(*ts_current_realloc)(void *, size_t); +TS_PUBLIC extern void (*ts_current_free)(void *); + +// Allow clients to override allocation functions +#ifndef ts_malloc +#define ts_malloc ts_current_malloc +#endif +#ifndef ts_calloc +#define ts_calloc ts_current_calloc +#endif +#ifndef ts_realloc +#define ts_realloc ts_current_realloc +#endif +#ifndef ts_free +#define ts_free ts_current_free +#endif + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_ALLOC_H_ diff --git a/parser/nnsrc/api.h b/parser/nnsrc/api.h new file mode 100644 index 00000000..deb2364e --- /dev/null +++ b/parser/nnsrc/api.h @@ -0,0 +1,1273 @@ +#ifndef TREE_SITTER_API_H_ +#define TREE_SITTER_API_H_ + +#ifndef TREE_SITTER_HIDE_SYMBOLS +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC visibility push(default) +#endif +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +/****************************/ +/* Section - ABI Versioning */ +/****************************/ + +/** + * The latest ABI version that is supported by the current version of the + * library. When Languages are generated by the Tree-sitter CLI, they are + * assigned an ABI version number that corresponds to the current CLI version. + * The Tree-sitter library is generally backwards-compatible with languages + * generated using older CLI versions, but is not forwards-compatible. + */ +#define TREE_SITTER_LANGUAGE_VERSION 14 + +/** + * The earliest ABI version that is supported by the current version of the + * library. + */ +#define TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION 13 + +/*******************/ +/* Section - Types */ +/*******************/ + +typedef uint16_t TSStateId; +typedef uint16_t TSSymbol; +typedef uint16_t TSFieldId; +typedef struct TSLanguage TSLanguage; +typedef struct TSParser TSParser; +typedef struct TSTree TSTree; +typedef struct TSQuery TSQuery; +typedef struct TSQueryCursor TSQueryCursor; +typedef struct TSLookaheadIterator TSLookaheadIterator; + +typedef enum TSInputEncoding { + TSInputEncodingUTF8, + TSInputEncodingUTF16, +} TSInputEncoding; + +typedef enum TSSymbolType { + TSSymbolTypeRegular, + TSSymbolTypeAnonymous, + TSSymbolTypeAuxiliary, +} TSSymbolType; + +typedef struct TSPoint { + uint32_t row; + uint32_t column; +} TSPoint; + +typedef struct TSRange { + TSPoint start_point; + TSPoint end_point; + uint32_t start_byte; + uint32_t end_byte; +} TSRange; + +typedef struct TSInput { + void *payload; + const char *(*read)(void *payload, uint32_t byte_index, TSPoint position, uint32_t *bytes_read); + TSInputEncoding encoding; +} TSInput; + +typedef enum TSLogType { + TSLogTypeParse, + TSLogTypeLex, +} TSLogType; + +typedef struct TSLogger { + void *payload; + void (*log)(void *payload, TSLogType log_type, const char *buffer); +} TSLogger; + +typedef struct TSInputEdit { + uint32_t start_byte; + uint32_t old_end_byte; + uint32_t new_end_byte; + TSPoint start_point; + TSPoint old_end_point; + TSPoint new_end_point; +} TSInputEdit; + +typedef struct TSNode { + uint32_t context[4]; + const void *id; + const TSTree *tree; +} TSNode; + +typedef struct TSTreeCursor { + const void *tree; + const void *id; + uint32_t context[3]; +} TSTreeCursor; + +typedef struct TSQueryCapture { + TSNode node; + uint32_t index; +} TSQueryCapture; + +typedef enum TSQuantifier { + TSQuantifierZero = 0, // must match the array initialization value + TSQuantifierZeroOrOne, + TSQuantifierZeroOrMore, + TSQuantifierOne, + TSQuantifierOneOrMore, +} TSQuantifier; + +typedef struct TSQueryMatch { + uint32_t id; + uint16_t pattern_index; + uint16_t capture_count; + const TSQueryCapture *captures; +} TSQueryMatch; + +typedef enum TSQueryPredicateStepType { + TSQueryPredicateStepTypeDone, + TSQueryPredicateStepTypeCapture, + TSQueryPredicateStepTypeString, +} TSQueryPredicateStepType; + +typedef struct TSQueryPredicateStep { + TSQueryPredicateStepType type; + uint32_t value_id; +} TSQueryPredicateStep; + +typedef enum TSQueryError { + TSQueryErrorNone = 0, + TSQueryErrorSyntax, + TSQueryErrorNodeType, + TSQueryErrorField, + TSQueryErrorCapture, + TSQueryErrorStructure, + TSQueryErrorLanguage, +} TSQueryError; + +/********************/ +/* Section - Parser */ +/********************/ + +/** + * Create a new parser. + */ +TSParser *ts_parser_new(void); + +/** + * Delete the parser, freeing all of the memory that it used. + */ +void ts_parser_delete(TSParser *self); + +/** + * Get the parser's current language. + */ +const TSLanguage *ts_parser_language(const TSParser *self); + +/** + * Set the language that the parser should use for parsing. + * + * Returns a boolean indicating whether or not the language was successfully + * assigned. True means assignment succeeded. False means there was a version + * mismatch: the language was generated with an incompatible version of the + * Tree-sitter CLI. Check the language's version using [`ts_language_version`] + * and compare it to this library's [`TREE_SITTER_LANGUAGE_VERSION`] and + * [`TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION`] constants. + */ +bool ts_parser_set_language(TSParser *self, const TSLanguage *language); + +/** + * Set the ranges of text that the parser should include when parsing. + * + * By default, the parser will always include entire documents. This function + * allows you to parse only a *portion* of a document but still return a syntax + * tree whose ranges match up with the document as a whole. You can also pass + * multiple disjoint ranges. + * + * The second and third parameters specify the location and length of an array + * of ranges. The parser does *not* take ownership of these ranges; it copies + * the data, so it doesn't matter how these ranges are allocated. + * + * If `count` is zero, then the entire document will be parsed. Otherwise, + * the given ranges must be ordered from earliest to latest in the document, + * and they must not overlap. That is, the following must hold for all: + * + * `i < count - 1`: `ranges[i].end_byte <= ranges[i + 1].start_byte` + * + * If this requirement is not satisfied, the operation will fail, the ranges + * will not be assigned, and this function will return `false`. On success, + * this function returns `true` + */ +bool ts_parser_set_included_ranges( + TSParser *self, + const TSRange *ranges, + uint32_t count +); + +/** + * Get the ranges of text that the parser will include when parsing. + * + * The returned pointer is owned by the parser. The caller should not free it + * or write to it. The length of the array will be written to the given + * `count` pointer. + */ +const TSRange *ts_parser_included_ranges( + const TSParser *self, + uint32_t *count +); + +/** + * Use the parser to parse some source code and create a syntax tree. + * + * If you are parsing this document for the first time, pass `NULL` for the + * `old_tree` parameter. Otherwise, if you have already parsed an earlier + * version of this document and the document has since been edited, pass the + * previous syntax tree so that the unchanged parts of it can be reused. + * This will save time and memory. For this to work correctly, you must have + * already edited the old syntax tree using the [`ts_tree_edit`] function in a + * way that exactly matches the source code changes. + * + * The [`TSInput`] parameter lets you specify how to read the text. It has the + * following three fields: + * 1. [`read`]: A function to retrieve a chunk of text at a given byte offset + * and (row, column) position. The function should return a pointer to the + * text and write its length to the [`bytes_read`] pointer. The parser does + * not take ownership of this buffer; it just borrows it until it has + * finished reading it. The function should write a zero value to the + * [`bytes_read`] pointer to indicate the end of the document. + * 2. [`payload`]: An arbitrary pointer that will be passed to each invocation + * of the [`read`] function. + * 3. [`encoding`]: An indication of how the text is encoded. Either + * `TSInputEncodingUTF8` or `TSInputEncodingUTF16`. + * + * This function returns a syntax tree on success, and `NULL` on failure. There + * are three possible reasons for failure: + * 1. The parser does not have a language assigned. Check for this using the + [`ts_parser_language`] function. + * 2. Parsing was cancelled due to a timeout that was set by an earlier call to + * the [`ts_parser_set_timeout_micros`] function. You can resume parsing from + * where the parser left out by calling [`ts_parser_parse`] again with the + * same arguments. Or you can start parsing from scratch by first calling + * [`ts_parser_reset`]. + * 3. Parsing was cancelled using a cancellation flag that was set by an + * earlier call to [`ts_parser_set_cancellation_flag`]. You can resume parsing + * from where the parser left out by calling [`ts_parser_parse`] again with + * the same arguments. + * + * [`read`]: TSInput::read + * [`payload`]: TSInput::payload + * [`encoding`]: TSInput::encoding + * [`bytes_read`]: TSInput::read + */ +TSTree *ts_parser_parse( + TSParser *self, + const TSTree *old_tree, + TSInput input +); + +/** + * Use the parser to parse some source code stored in one contiguous buffer. + * The first two parameters are the same as in the [`ts_parser_parse`] function + * above. The second two parameters indicate the location of the buffer and its + * length in bytes. + */ +TSTree *ts_parser_parse_string( + TSParser *self, + const TSTree *old_tree, + const char *string, + uint32_t length +); + +/** + * Use the parser to parse some source code stored in one contiguous buffer with + * a given encoding. The first four parameters work the same as in the + * [`ts_parser_parse_string`] method above. The final parameter indicates whether + * the text is encoded as UTF8 or UTF16. + */ +TSTree *ts_parser_parse_string_encoding( + TSParser *self, + const TSTree *old_tree, + const char *string, + uint32_t length, + TSInputEncoding encoding +); + +/** + * Instruct the parser to start the next parse from the beginning. + * + * If the parser previously failed because of a timeout or a cancellation, then + * by default, it will resume where it left off on the next call to + * [`ts_parser_parse`] or other parsing functions. If you don't want to resume, + * and instead intend to use this parser to parse some other document, you must + * call [`ts_parser_reset`] first. + */ +void ts_parser_reset(TSParser *self); + +/** + * Set the maximum duration in microseconds that parsing should be allowed to + * take before halting. + * + * If parsing takes longer than this, it will halt early, returning NULL. + * See [`ts_parser_parse`] for more information. + */ +void ts_parser_set_timeout_micros(TSParser *self, uint64_t timeout_micros); + +/** + * Get the duration in microseconds that parsing is allowed to take. + */ +uint64_t ts_parser_timeout_micros(const TSParser *self); + +/** + * Set the parser's current cancellation flag pointer. + * + * If a non-null pointer is assigned, then the parser will periodically read + * from this pointer during parsing. If it reads a non-zero value, it will + * halt early, returning NULL. See [`ts_parser_parse`] for more information. + */ +void ts_parser_set_cancellation_flag(TSParser *self, const size_t *flag); + +/** + * Get the parser's current cancellation flag pointer. + */ +const size_t *ts_parser_cancellation_flag(const TSParser *self); + +/** + * Set the logger that a parser should use during parsing. + * + * The parser does not take ownership over the logger payload. If a logger was + * previously assigned, the caller is responsible for releasing any memory + * owned by the previous logger. + */ +void ts_parser_set_logger(TSParser *self, TSLogger logger); + +/** + * Get the parser's current logger. + */ +TSLogger ts_parser_logger(const TSParser *self); + +/** + * Set the file descriptor to which the parser should write debugging graphs + * during parsing. The graphs are formatted in the DOT language. You may want + * to pipe these graphs directly to a `dot(1)` process in order to generate + * SVG output. You can turn off this logging by passing a negative number. + */ +void ts_parser_print_dot_graphs(TSParser *self, int fd); + +/******************/ +/* Section - Tree */ +/******************/ + +/** + * Create a shallow copy of the syntax tree. This is very fast. + * + * You need to copy a syntax tree in order to use it on more than one thread at + * a time, as syntax trees are not thread safe. + */ +TSTree *ts_tree_copy(const TSTree *self); + +/** + * Delete the syntax tree, freeing all of the memory that it used. + */ +void ts_tree_delete(TSTree *self); + +/** + * Get the root node of the syntax tree. + */ +TSNode ts_tree_root_node(const TSTree *self); + +/** + * Get the root node of the syntax tree, but with its position + * shifted forward by the given offset. + */ +TSNode ts_tree_root_node_with_offset( + const TSTree *self, + uint32_t offset_bytes, + TSPoint offset_extent +); + +/** + * Get the language that was used to parse the syntax tree. + */ +const TSLanguage *ts_tree_language(const TSTree *self); + +/** + * Get the array of included ranges that was used to parse the syntax tree. + * + * The returned pointer must be freed by the caller. + */ +TSRange *ts_tree_included_ranges(const TSTree *self, uint32_t *length); + +/** + * Edit the syntax tree to keep it in sync with source code that has been + * edited. + * + * You must describe the edit both in terms of byte offsets and in terms of + * (row, column) coordinates. + */ +void ts_tree_edit(TSTree *self, const TSInputEdit *edit); + +/** + * Compare an old edited syntax tree to a new syntax tree representing the same + * document, returning an array of ranges whose syntactic structure has changed. + * + * For this to work correctly, the old syntax tree must have been edited such + * that its ranges match up to the new tree. Generally, you'll want to call + * this function right after calling one of the [`ts_parser_parse`] functions. + * You need to pass the old tree that was passed to parse, as well as the new + * tree that was returned from that function. + * + * The returned array is allocated using `malloc` and the caller is responsible + * for freeing it using `free`. The length of the array will be written to the + * given `length` pointer. + */ +TSRange *ts_tree_get_changed_ranges( + const TSTree *old_tree, + const TSTree *new_tree, + uint32_t *length +); + +/** + * Write a DOT graph describing the syntax tree to the given file. + */ +void ts_tree_print_dot_graph(const TSTree *self, int file_descriptor); + +/******************/ +/* Section - Node */ +/******************/ + +/** + * Get the node's type as a null-terminated string. + */ +const char *ts_node_type(TSNode self); + +/** + * Get the node's type as a numerical id. + */ +TSSymbol ts_node_symbol(TSNode self); + +/** + * Get the node's language. + */ +const TSLanguage *ts_node_language(TSNode self); + +/** + * Get the node's type as it appears in the grammar ignoring aliases as a + * null-terminated string. + */ +const char *ts_node_grammar_type(TSNode self); + +/** + * Get the node's type as a numerical id as it appears in the grammar ignoring + * aliases. This should be used in [`ts_language_next_state`] instead of + * [`ts_node_symbol`]. + */ +TSSymbol ts_node_grammar_symbol(TSNode self); + +/** + * Get the node's start byte. + */ +uint32_t ts_node_start_byte(TSNode self); + +/** + * Get the node's start position in terms of rows and columns. + */ +TSPoint ts_node_start_point(TSNode self); + +/** + * Get the node's end byte. + */ +uint32_t ts_node_end_byte(TSNode self); + +/** + * Get the node's end position in terms of rows and columns. + */ +TSPoint ts_node_end_point(TSNode self); + +/** + * Get an S-expression representing the node as a string. + * + * This string is allocated with `malloc` and the caller is responsible for + * freeing it using `free`. + */ +char *ts_node_string(TSNode self); + +/** + * Check if the node is null. Functions like [`ts_node_child`] and + * [`ts_node_next_sibling`] will return a null node to indicate that no such node + * was found. + */ +bool ts_node_is_null(TSNode self); + +/** + * Check if the node is *named*. Named nodes correspond to named rules in the + * grammar, whereas *anonymous* nodes correspond to string literals in the + * grammar. + */ +bool ts_node_is_named(TSNode self); + +/** + * Check if the node is *missing*. Missing nodes are inserted by the parser in + * order to recover from certain kinds of syntax errors. + */ +bool ts_node_is_missing(TSNode self); + +/** + * Check if the node is *extra*. Extra nodes represent things like comments, + * which are not required the grammar, but can appear anywhere. + */ +bool ts_node_is_extra(TSNode self); + +/** + * Check if a syntax node has been edited. + */ +bool ts_node_has_changes(TSNode self); + +/** + * Check if the node is a syntax error or contains any syntax errors. + */ +bool ts_node_has_error(TSNode self); + +/** + * Check if the node is a syntax error. +*/ +bool ts_node_is_error(TSNode self); + +/** + * Get this node's parse state. +*/ +TSStateId ts_node_parse_state(TSNode self); + +/** + * Get the parse state after this node. +*/ +TSStateId ts_node_next_parse_state(TSNode self); + +/** + * Get the node's immediate parent. + * Prefer [`ts_node_child_containing_descendant`] for + * iterating over the node's ancestors. + */ +TSNode ts_node_parent(TSNode self); + +/** + * Get the node's child that contains `descendant`. + */ +TSNode ts_node_child_containing_descendant(TSNode self, TSNode descendant); + +/** + * Get the node's child at the given index, where zero represents the first + * child. + */ +TSNode ts_node_child(TSNode self, uint32_t child_index); + +/** + * Get the field name for node's child at the given index, where zero represents + * the first child. Returns NULL, if no field is found. + */ +const char *ts_node_field_name_for_child(TSNode self, uint32_t child_index); + +/** + * Get the node's number of children. + */ +uint32_t ts_node_child_count(TSNode self); + +/** + * Get the node's *named* child at the given index. + * + * See also [`ts_node_is_named`]. + */ +TSNode ts_node_named_child(TSNode self, uint32_t child_index); + +/** + * Get the node's number of *named* children. + * + * See also [`ts_node_is_named`]. + */ +uint32_t ts_node_named_child_count(TSNode self); + +/** + * Get the node's child with the given field name. + */ +TSNode ts_node_child_by_field_name( + TSNode self, + const char *name, + uint32_t name_length +); + +/** + * Get the node's child with the given numerical field id. + * + * You can convert a field name to an id using the + * [`ts_language_field_id_for_name`] function. + */ +TSNode ts_node_child_by_field_id(TSNode self, TSFieldId field_id); + +/** + * Get the node's next / previous sibling. + */ +TSNode ts_node_next_sibling(TSNode self); +TSNode ts_node_prev_sibling(TSNode self); + +/** + * Get the node's next / previous *named* sibling. + */ +TSNode ts_node_next_named_sibling(TSNode self); +TSNode ts_node_prev_named_sibling(TSNode self); + +/** + * Get the node's first child that extends beyond the given byte offset. + */ +TSNode ts_node_first_child_for_byte(TSNode self, uint32_t byte); + +/** + * Get the node's first named child that extends beyond the given byte offset. + */ +TSNode ts_node_first_named_child_for_byte(TSNode self, uint32_t byte); + +/** + * Get the node's number of descendants, including one for the node itself. + */ +uint32_t ts_node_descendant_count(TSNode self); + +/** + * Get the smallest node within this node that spans the given range of bytes + * or (row, column) positions. + */ +TSNode ts_node_descendant_for_byte_range(TSNode self, uint32_t start, uint32_t end); +TSNode ts_node_descendant_for_point_range(TSNode self, TSPoint start, TSPoint end); + +/** + * Get the smallest named node within this node that spans the given range of + * bytes or (row, column) positions. + */ +TSNode ts_node_named_descendant_for_byte_range(TSNode self, uint32_t start, uint32_t end); +TSNode ts_node_named_descendant_for_point_range(TSNode self, TSPoint start, TSPoint end); + +/** + * Edit the node to keep it in-sync with source code that has been edited. + * + * This function is only rarely needed. When you edit a syntax tree with the + * [`ts_tree_edit`] function, all of the nodes that you retrieve from the tree + * afterward will already reflect the edit. You only need to use [`ts_node_edit`] + * when you have a [`TSNode`] instance that you want to keep and continue to use + * after an edit. + */ +void ts_node_edit(TSNode *self, const TSInputEdit *edit); + +/** + * Check if two nodes are identical. + */ +bool ts_node_eq(TSNode self, TSNode other); + +/************************/ +/* Section - TreeCursor */ +/************************/ + +/** + * Create a new tree cursor starting from the given node. + * + * A tree cursor allows you to walk a syntax tree more efficiently than is + * possible using the [`TSNode`] functions. It is a mutable object that is always + * on a certain syntax node, and can be moved imperatively to different nodes. + */ +TSTreeCursor ts_tree_cursor_new(TSNode node); + +/** + * Delete a tree cursor, freeing all of the memory that it used. + */ +void ts_tree_cursor_delete(TSTreeCursor *self); + +/** + * Re-initialize a tree cursor to start at a different node. + */ +void ts_tree_cursor_reset(TSTreeCursor *self, TSNode node); + +/** + * Re-initialize a tree cursor to the same position as another cursor. + * + * Unlike [`ts_tree_cursor_reset`], this will not lose parent information and + * allows reusing already created cursors. +*/ +void ts_tree_cursor_reset_to(TSTreeCursor *dst, const TSTreeCursor *src); + +/** + * Get the tree cursor's current node. + */ +TSNode ts_tree_cursor_current_node(const TSTreeCursor *self); + +/** + * Get the field name of the tree cursor's current node. + * + * This returns `NULL` if the current node doesn't have a field. + * See also [`ts_node_child_by_field_name`]. + */ +const char *ts_tree_cursor_current_field_name(const TSTreeCursor *self); + +/** + * Get the field id of the tree cursor's current node. + * + * This returns zero if the current node doesn't have a field. + * See also [`ts_node_child_by_field_id`], [`ts_language_field_id_for_name`]. + */ +TSFieldId ts_tree_cursor_current_field_id(const TSTreeCursor *self); + +/** + * Move the cursor to the parent of its current node. + * + * This returns `true` if the cursor successfully moved, and returns `false` + * if there was no parent node (the cursor was already on the root node). + */ +bool ts_tree_cursor_goto_parent(TSTreeCursor *self); + +/** + * Move the cursor to the next sibling of its current node. + * + * This returns `true` if the cursor successfully moved, and returns `false` + * if there was no next sibling node. + */ +bool ts_tree_cursor_goto_next_sibling(TSTreeCursor *self); + +/** + * Move the cursor to the previous sibling of its current node. + * + * This returns `true` if the cursor successfully moved, and returns `false` if + * there was no previous sibling node. + * + * Note, that this function may be slower than + * [`ts_tree_cursor_goto_next_sibling`] due to how node positions are stored. In + * the worst case, this will need to iterate through all the children upto the + * previous sibling node to recalculate its position. + */ +bool ts_tree_cursor_goto_previous_sibling(TSTreeCursor *self); + +/** + * Move the cursor to the first child of its current node. + * + * This returns `true` if the cursor successfully moved, and returns `false` + * if there were no children. + */ +bool ts_tree_cursor_goto_first_child(TSTreeCursor *self); + +/** + * Move the cursor to the last child of its current node. + * + * This returns `true` if the cursor successfully moved, and returns `false` if + * there were no children. + * + * Note that this function may be slower than [`ts_tree_cursor_goto_first_child`] + * because it needs to iterate through all the children to compute the child's + * position. + */ +bool ts_tree_cursor_goto_last_child(TSTreeCursor *self); + +/** + * Move the cursor to the node that is the nth descendant of + * the original node that the cursor was constructed with, where + * zero represents the original node itself. + */ +void ts_tree_cursor_goto_descendant(TSTreeCursor *self, uint32_t goal_descendant_index); + +/** + * Get the index of the cursor's current node out of all of the + * descendants of the original node that the cursor was constructed with. + */ +uint32_t ts_tree_cursor_current_descendant_index(const TSTreeCursor *self); + +/** + * Get the depth of the cursor's current node relative to the original + * node that the cursor was constructed with. + */ +uint32_t ts_tree_cursor_current_depth(const TSTreeCursor *self); + +/** + * Move the cursor to the first child of its current node that extends beyond + * the given byte offset or point. + * + * This returns the index of the child node if one was found, and returns -1 + * if no such child was found. + */ +int64_t ts_tree_cursor_goto_first_child_for_byte(TSTreeCursor *self, uint32_t goal_byte); +int64_t ts_tree_cursor_goto_first_child_for_point(TSTreeCursor *self, TSPoint goal_point); + +TSTreeCursor ts_tree_cursor_copy(const TSTreeCursor *cursor); + +/*******************/ +/* Section - Query */ +/*******************/ + +/** + * Create a new query from a string containing one or more S-expression + * patterns. The query is associated with a particular language, and can + * only be run on syntax nodes parsed with that language. + * + * If all of the given patterns are valid, this returns a [`TSQuery`]. + * If a pattern is invalid, this returns `NULL`, and provides two pieces + * of information about the problem: + * 1. The byte offset of the error is written to the `error_offset` parameter. + * 2. The type of error is written to the `error_type` parameter. + */ +TSQuery *ts_query_new( + const TSLanguage *language, + const char *source, + uint32_t source_len, + uint32_t *error_offset, + TSQueryError *error_type +); + +/** + * Delete a query, freeing all of the memory that it used. + */ +void ts_query_delete(TSQuery *self); + +/** + * Get the number of patterns, captures, or string literals in the query. + */ +uint32_t ts_query_pattern_count(const TSQuery *self); +uint32_t ts_query_capture_count(const TSQuery *self); +uint32_t ts_query_string_count(const TSQuery *self); + +/** + * Get the byte offset where the given pattern starts in the query's source. + * + * This can be useful when combining queries by concatenating their source + * code strings. + */ +uint32_t ts_query_start_byte_for_pattern(const TSQuery *self, uint32_t pattern_index); + +/** + * Get all of the predicates for the given pattern in the query. + * + * The predicates are represented as a single array of steps. There are three + * types of steps in this array, which correspond to the three legal values for + * the `type` field: + * - `TSQueryPredicateStepTypeCapture` - Steps with this type represent names + * of captures. Their `value_id` can be used with the + * [`ts_query_capture_name_for_id`] function to obtain the name of the capture. + * - `TSQueryPredicateStepTypeString` - Steps with this type represent literal + * strings. Their `value_id` can be used with the + * [`ts_query_string_value_for_id`] function to obtain their string value. + * - `TSQueryPredicateStepTypeDone` - Steps with this type are *sentinels* + * that represent the end of an individual predicate. If a pattern has two + * predicates, then there will be two steps with this `type` in the array. + */ +const TSQueryPredicateStep *ts_query_predicates_for_pattern( + const TSQuery *self, + uint32_t pattern_index, + uint32_t *step_count +); + +/* + * Check if the given pattern in the query has a single root node. + */ +bool ts_query_is_pattern_rooted(const TSQuery *self, uint32_t pattern_index); + +/* + * Check if the given pattern in the query is 'non local'. + * + * A non-local pattern has multiple root nodes and can match within a + * repeating sequence of nodes, as specified by the grammar. Non-local + * patterns disable certain optimizations that would otherwise be possible + * when executing a query on a specific range of a syntax tree. + */ +bool ts_query_is_pattern_non_local(const TSQuery *self, uint32_t pattern_index); + +/* + * Check if a given pattern is guaranteed to match once a given step is reached. + * The step is specified by its byte offset in the query's source code. + */ +bool ts_query_is_pattern_guaranteed_at_step(const TSQuery *self, uint32_t byte_offset); + +/** + * Get the name and length of one of the query's captures, or one of the + * query's string literals. Each capture and string is associated with a + * numeric id based on the order that it appeared in the query's source. + */ +const char *ts_query_capture_name_for_id( + const TSQuery *self, + uint32_t index, + uint32_t *length +); + +/** + * Get the quantifier of the query's captures. Each capture is * associated + * with a numeric id based on the order that it appeared in the query's source. + */ +TSQuantifier ts_query_capture_quantifier_for_id( + const TSQuery *self, + uint32_t pattern_index, + uint32_t capture_index +); + +const char *ts_query_string_value_for_id( + const TSQuery *self, + uint32_t index, + uint32_t *length +); + +/** + * Disable a certain capture within a query. + * + * This prevents the capture from being returned in matches, and also avoids + * any resource usage associated with recording the capture. Currently, there + * is no way to undo this. + */ +void ts_query_disable_capture(TSQuery *self, const char *name, uint32_t length); + +/** + * Disable a certain pattern within a query. + * + * This prevents the pattern from matching and removes most of the overhead + * associated with the pattern. Currently, there is no way to undo this. + */ +void ts_query_disable_pattern(TSQuery *self, uint32_t pattern_index); + +/** + * Create a new cursor for executing a given query. + * + * The cursor stores the state that is needed to iteratively search + * for matches. To use the query cursor, first call [`ts_query_cursor_exec`] + * to start running a given query on a given syntax node. Then, there are + * two options for consuming the results of the query: + * 1. Repeatedly call [`ts_query_cursor_next_match`] to iterate over all of the + * *matches* in the order that they were found. Each match contains the + * index of the pattern that matched, and an array of captures. Because + * multiple patterns can match the same set of nodes, one match may contain + * captures that appear *before* some of the captures from a previous match. + * 2. Repeatedly call [`ts_query_cursor_next_capture`] to iterate over all of the + * individual *captures* in the order that they appear. This is useful if + * don't care about which pattern matched, and just want a single ordered + * sequence of captures. + * + * If you don't care about consuming all of the results, you can stop calling + * [`ts_query_cursor_next_match`] or [`ts_query_cursor_next_capture`] at any point. + * You can then start executing another query on another node by calling + * [`ts_query_cursor_exec`] again. + */ +TSQueryCursor *ts_query_cursor_new(void); + +/** + * Delete a query cursor, freeing all of the memory that it used. + */ +void ts_query_cursor_delete(TSQueryCursor *self); + +/** + * Start running a given query on a given node. + */ +void ts_query_cursor_exec(TSQueryCursor *self, const TSQuery *query, TSNode node); + +/** + * Manage the maximum number of in-progress matches allowed by this query + * cursor. + * + * Query cursors have an optional maximum capacity for storing lists of + * in-progress captures. If this capacity is exceeded, then the + * earliest-starting match will silently be dropped to make room for further + * matches. This maximum capacity is optional — by default, query cursors allow + * any number of pending matches, dynamically allocating new space for them as + * needed as the query is executed. + */ +bool ts_query_cursor_did_exceed_match_limit(const TSQueryCursor *self); +uint32_t ts_query_cursor_match_limit(const TSQueryCursor *self); +void ts_query_cursor_set_match_limit(TSQueryCursor *self, uint32_t limit); + +/** + * Set the range of bytes or (row, column) positions in which the query + * will be executed. + */ +void ts_query_cursor_set_byte_range(TSQueryCursor *self, uint32_t start_byte, uint32_t end_byte); +void ts_query_cursor_set_point_range(TSQueryCursor *self, TSPoint start_point, TSPoint end_point); + +/** + * Advance to the next match of the currently running query. + * + * If there is a match, write it to `*match` and return `true`. + * Otherwise, return `false`. + */ +bool ts_query_cursor_next_match(TSQueryCursor *self, TSQueryMatch *match); +void ts_query_cursor_remove_match(TSQueryCursor *self, uint32_t match_id); + +/** + * Advance to the next capture of the currently running query. + * + * If there is a capture, write its match to `*match` and its index within + * the matche's capture list to `*capture_index`. Otherwise, return `false`. + */ +bool ts_query_cursor_next_capture( + TSQueryCursor *self, + TSQueryMatch *match, + uint32_t *capture_index +); + +/** + * Set the maximum start depth for a query cursor. + * + * This prevents cursors from exploring children nodes at a certain depth. + * Note if a pattern includes many children, then they will still be checked. + * + * The zero max start depth value can be used as a special behavior and + * it helps to destructure a subtree by staying on a node and using captures + * for interested parts. Note that the zero max start depth only limit a search + * depth for a pattern's root node but other nodes that are parts of the pattern + * may be searched at any depth what defined by the pattern structure. + * + * Set to `UINT32_MAX` to remove the maximum start depth. + */ +void ts_query_cursor_set_max_start_depth(TSQueryCursor *self, uint32_t max_start_depth); + +/**********************/ +/* Section - Language */ +/**********************/ + +/** + * Get another reference to the given language. + */ +const TSLanguage *ts_language_copy(const TSLanguage *self); + +/** + * Free any dynamically-allocated resources for this language, if + * this is the last reference. + */ +void ts_language_delete(const TSLanguage *self); + +/** + * Get the number of distinct node types in the language. + */ +uint32_t ts_language_symbol_count(const TSLanguage *self); + +/** + * Get the number of valid states in this language. +*/ +uint32_t ts_language_state_count(const TSLanguage *self); + +/** + * Get a node type string for the given numerical id. + */ +const char *ts_language_symbol_name(const TSLanguage *self, TSSymbol symbol); + +/** + * Get the numerical id for the given node type string. + */ +TSSymbol ts_language_symbol_for_name( + const TSLanguage *self, + const char *string, + uint32_t length, + bool is_named +); + +/** + * Get the number of distinct field names in the language. + */ +uint32_t ts_language_field_count(const TSLanguage *self); + +/** + * Get the field name string for the given numerical id. + */ +const char *ts_language_field_name_for_id(const TSLanguage *self, TSFieldId id); + +/** + * Get the numerical id for the given field name string. + */ +TSFieldId ts_language_field_id_for_name(const TSLanguage *self, const char *name, uint32_t name_length); + +/** + * Check whether the given node type id belongs to named nodes, anonymous nodes, + * or a hidden nodes. + * + * See also [`ts_node_is_named`]. Hidden nodes are never returned from the API. + */ +TSSymbolType ts_language_symbol_type(const TSLanguage *self, TSSymbol symbol); + +/** + * Get the ABI version number for this language. This version number is used + * to ensure that languages were generated by a compatible version of + * Tree-sitter. + * + * See also [`ts_parser_set_language`]. + */ +uint32_t ts_language_version(const TSLanguage *self); + +/** + * Get the next parse state. Combine this with lookahead iterators to generate + * completion suggestions or valid symbols in error nodes. Use + * [`ts_node_grammar_symbol`] for valid symbols. +*/ +TSStateId ts_language_next_state(const TSLanguage *self, TSStateId state, TSSymbol symbol); + +/********************************/ +/* Section - Lookahead Iterator */ +/********************************/ + +/** + * Create a new lookahead iterator for the given language and parse state. + * + * This returns `NULL` if state is invalid for the language. + * + * Repeatedly using [`ts_lookahead_iterator_next`] and + * [`ts_lookahead_iterator_current_symbol`] will generate valid symbols in the + * given parse state. Newly created lookahead iterators will contain the `ERROR` + * symbol. + * + * Lookahead iterators can be useful to generate suggestions and improve syntax + * error diagnostics. To get symbols valid in an ERROR node, use the lookahead + * iterator on its first leaf node state. For `MISSING` nodes, a lookahead + * iterator created on the previous non-extra leaf node may be appropriate. +*/ +TSLookaheadIterator *ts_lookahead_iterator_new(const TSLanguage *self, TSStateId state); + +/** + * Delete a lookahead iterator freeing all the memory used. +*/ +void ts_lookahead_iterator_delete(TSLookaheadIterator *self); + +/** + * Reset the lookahead iterator to another state. + * + * This returns `true` if the iterator was reset to the given state and `false` + * otherwise. +*/ +bool ts_lookahead_iterator_reset_state(TSLookaheadIterator *self, TSStateId state); + +/** + * Reset the lookahead iterator. + * + * This returns `true` if the language was set successfully and `false` + * otherwise. +*/ +bool ts_lookahead_iterator_reset(TSLookaheadIterator *self, const TSLanguage *language, TSStateId state); + +/** + * Get the current language of the lookahead iterator. +*/ +const TSLanguage *ts_lookahead_iterator_language(const TSLookaheadIterator *self); + +/** + * Advance the lookahead iterator to the next symbol. + * + * This returns `true` if there is a new symbol and `false` otherwise. +*/ +bool ts_lookahead_iterator_next(TSLookaheadIterator *self); + +/** + * Get the current symbol of the lookahead iterator; +*/ +TSSymbol ts_lookahead_iterator_current_symbol(const TSLookaheadIterator *self); + +/** + * Get the current symbol type of the lookahead iterator as a null terminated + * string. +*/ +const char *ts_lookahead_iterator_current_symbol_name(const TSLookaheadIterator *self); + +/*************************************/ +/* Section - WebAssembly Integration */ +/************************************/ + +typedef struct wasm_engine_t TSWasmEngine; +typedef struct TSWasmStore TSWasmStore; + +typedef enum { + TSWasmErrorKindNone = 0, + TSWasmErrorKindParse, + TSWasmErrorKindCompile, + TSWasmErrorKindInstantiate, + TSWasmErrorKindAllocate, +} TSWasmErrorKind; + +typedef struct { + TSWasmErrorKind kind; + char *message; +} TSWasmError; + +/** + * Create a Wasm store. + */ +TSWasmStore *ts_wasm_store_new( + TSWasmEngine *engine, + TSWasmError *error +); + +/** + * Free the memory associated with the given Wasm store. + */ +void ts_wasm_store_delete(TSWasmStore *); + +/** + * Create a language from a buffer of Wasm. The resulting language behaves + * like any other Tree-sitter language, except that in order to use it with + * a parser, that parser must have a Wasm store. Note that the language + * can be used with any Wasm store, it doesn't need to be the same store that + * was used to originally load it. + */ +const TSLanguage *ts_wasm_store_load_language( + TSWasmStore *, + const char *name, + const char *wasm, + uint32_t wasm_len, + TSWasmError *error +); + +/** + * Get the number of languages instantiated in the given wasm store. + */ +size_t ts_wasm_store_language_count(const TSWasmStore *); + +/** + * Check if the language came from a Wasm module. If so, then in order to use + * this language with a Parser, that parser must have a Wasm store assigned. + */ +bool ts_language_is_wasm(const TSLanguage *); + +/** + * Assign the given Wasm store to the parser. A parser must have a Wasm store + * in order to use Wasm languages. + */ +void ts_parser_set_wasm_store(TSParser *, TSWasmStore *); + +/** + * Remove the parser's current Wasm store and return it. This returns NULL if + * the parser doesn't have a Wasm store. + */ +TSWasmStore *ts_parser_take_wasm_store(TSParser *); + +/**********************************/ +/* Section - Global Configuration */ +/**********************************/ + +/** + * Set the allocation functions used by the library. + * + * By default, Tree-sitter uses the standard libc allocation functions, + * but aborts the process when an allocation fails. This function lets + * you supply alternative allocation functions at runtime. + * + * If you pass `NULL` for any parameter, Tree-sitter will switch back to + * its default implementation of that function. + * + * If you call this function after the library has already been used, then + * you must ensure that either: + * 1. All the existing objects have been freed. + * 2. The new allocator shares its state with the old one, so it is capable + * of freeing memory that was allocated by the old allocator. + */ +void ts_set_allocator( + void *(*new_malloc)(size_t), + void *(*new_calloc)(size_t, size_t), + void *(*new_realloc)(void *, size_t), + void (*new_free)(void *) +); + +#ifdef __cplusplus +} +#endif + +#ifndef TREE_SITTER_HIDE_SYMBOLS +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC visibility pop +#endif +#endif + +#endif // TREE_SITTER_API_H_ diff --git a/parser/nnsrc/array.h b/parser/nnsrc/array.h new file mode 100644 index 00000000..15a3b233 --- /dev/null +++ b/parser/nnsrc/array.h @@ -0,0 +1,290 @@ +#ifndef TREE_SITTER_ARRAY_H_ +#define TREE_SITTER_ARRAY_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "./alloc.h" + +#include +#include +#include +#include +#include + +#ifdef _MSC_VER +#pragma warning(disable : 4101) +#elif defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-variable" +#endif + +#define Array(T) \ + struct { \ + T *contents; \ + uint32_t size; \ + uint32_t capacity; \ + } + +/// Initialize an array. +#define array_init(self) \ + ((self)->size = 0, (self)->capacity = 0, (self)->contents = NULL) + +/// Create an empty array. +#define array_new() \ + { NULL, 0, 0 } + +/// Get a pointer to the element at a given `index` in the array. +#define array_get(self, _index) \ + (assert((uint32_t)(_index) < (self)->size), &(self)->contents[_index]) + +/// Get a pointer to the first element in the array. +#define array_front(self) array_get(self, 0) + +/// Get a pointer to the last element in the array. +#define array_back(self) array_get(self, (self)->size - 1) + +/// Clear the array, setting its size to zero. Note that this does not free any +/// memory allocated for the array's contents. +#define array_clear(self) ((self)->size = 0) + +/// Reserve `new_capacity` elements of space in the array. If `new_capacity` is +/// less than the array's current capacity, this function has no effect. +#define array_reserve(self, new_capacity) \ + _array__reserve((Array *)(self), array_elem_size(self), new_capacity) + +/// Free any memory allocated for this array. Note that this does not free any +/// memory allocated for the array's contents. +#define array_delete(self) _array__delete((Array *)(self)) + +/// Push a new `element` onto the end of the array. +#define array_push(self, element) \ + (_array__grow((Array *)(self), 1, array_elem_size(self)), \ + (self)->contents[(self)->size++] = (element)) + +/// Increase the array's size by `count` elements. +/// New elements are zero-initialized. +#define array_grow_by(self, count) \ + do { \ + if ((count) == 0) break; \ + _array__grow((Array *)(self), count, array_elem_size(self)); \ + memset((self)->contents + (self)->size, 0, (count) * array_elem_size(self)); \ + (self)->size += (count); \ + } while (0) + +/// Append all elements from one array to the end of another. +#define array_push_all(self, other) \ + array_extend((self), (other)->size, (other)->contents) + +/// Append `count` elements to the end of the array, reading their values from the +/// `contents` pointer. +#define array_extend(self, count, contents) \ + _array__splice( \ + (Array *)(self), array_elem_size(self), (self)->size, \ + 0, count, contents \ + ) + +/// Remove `old_count` elements from the array starting at the given `index`. At +/// the same index, insert `new_count` new elements, reading their values from the +/// `new_contents` pointer. +#define array_splice(self, _index, old_count, new_count, new_contents) \ + _array__splice( \ + (Array *)(self), array_elem_size(self), _index, \ + old_count, new_count, new_contents \ + ) + +/// Insert one `element` into the array at the given `index`. +#define array_insert(self, _index, element) \ + _array__splice((Array *)(self), array_elem_size(self), _index, 0, 1, &(element)) + +/// Remove one element from the array at the given `index`. +#define array_erase(self, _index) \ + _array__erase((Array *)(self), array_elem_size(self), _index) + +/// Pop the last element off the array, returning the element by value. +#define array_pop(self) ((self)->contents[--(self)->size]) + +/// Assign the contents of one array to another, reallocating if necessary. +#define array_assign(self, other) \ + _array__assign((Array *)(self), (const Array *)(other), array_elem_size(self)) + +/// Swap one array with another +#define array_swap(self, other) \ + _array__swap((Array *)(self), (Array *)(other)) + +/// Get the size of the array contents +#define array_elem_size(self) (sizeof *(self)->contents) + +/// Search a sorted array for a given `needle` value, using the given `compare` +/// callback to determine the order. +/// +/// If an existing element is found to be equal to `needle`, then the `index` +/// out-parameter is set to the existing value's index, and the `exists` +/// out-parameter is set to true. Otherwise, `index` is set to an index where +/// `needle` should be inserted in order to preserve the sorting, and `exists` +/// is set to false. +#define array_search_sorted_with(self, compare, needle, _index, _exists) \ + _array__search_sorted(self, 0, compare, , needle, _index, _exists) + +/// Search a sorted array for a given `needle` value, using integer comparisons +/// of a given struct field (specified with a leading dot) to determine the order. +/// +/// See also `array_search_sorted_with`. +#define array_search_sorted_by(self, field, needle, _index, _exists) \ + _array__search_sorted(self, 0, _compare_int, field, needle, _index, _exists) + +/// Insert a given `value` into a sorted array, using the given `compare` +/// callback to determine the order. +#define array_insert_sorted_with(self, compare, value) \ + do { \ + unsigned _index, _exists; \ + array_search_sorted_with(self, compare, &(value), &_index, &_exists); \ + if (!_exists) array_insert(self, _index, value); \ + } while (0) + +/// Insert a given `value` into a sorted array, using integer comparisons of +/// a given struct field (specified with a leading dot) to determine the order. +/// +/// See also `array_search_sorted_by`. +#define array_insert_sorted_by(self, field, value) \ + do { \ + unsigned _index, _exists; \ + array_search_sorted_by(self, field, (value) field, &_index, &_exists); \ + if (!_exists) array_insert(self, _index, value); \ + } while (0) + +// Private + +typedef Array(void) Array; + +/// This is not what you're looking for, see `array_delete`. +static inline void _array__delete(Array *self) { + if (self->contents) { + ts_free(self->contents); + self->contents = NULL; + self->size = 0; + self->capacity = 0; + } +} + +/// This is not what you're looking for, see `array_erase`. +static inline void _array__erase(Array *self, size_t element_size, + uint32_t index) { + assert(index < self->size); + char *contents = (char *)self->contents; + memmove(contents + index * element_size, contents + (index + 1) * element_size, + (self->size - index - 1) * element_size); + self->size--; +} + +/// This is not what you're looking for, see `array_reserve`. +static inline void _array__reserve(Array *self, size_t element_size, uint32_t new_capacity) { + if (new_capacity > self->capacity) { + if (self->contents) { + self->contents = ts_realloc(self->contents, new_capacity * element_size); + } else { + self->contents = ts_malloc(new_capacity * element_size); + } + self->capacity = new_capacity; + } +} + +/// This is not what you're looking for, see `array_assign`. +static inline void _array__assign(Array *self, const Array *other, size_t element_size) { + _array__reserve(self, element_size, other->size); + self->size = other->size; + memcpy(self->contents, other->contents, self->size * element_size); +} + +/// This is not what you're looking for, see `array_swap`. +static inline void _array__swap(Array *self, Array *other) { + Array swap = *other; + *other = *self; + *self = swap; +} + +/// This is not what you're looking for, see `array_push` or `array_grow_by`. +static inline void _array__grow(Array *self, uint32_t count, size_t element_size) { + uint32_t new_size = self->size + count; + if (new_size > self->capacity) { + uint32_t new_capacity = self->capacity * 2; + if (new_capacity < 8) new_capacity = 8; + if (new_capacity < new_size) new_capacity = new_size; + _array__reserve(self, element_size, new_capacity); + } +} + +/// This is not what you're looking for, see `array_splice`. +static inline void _array__splice(Array *self, size_t element_size, + uint32_t index, uint32_t old_count, + uint32_t new_count, const void *elements) { + uint32_t new_size = self->size + new_count - old_count; + uint32_t old_end = index + old_count; + uint32_t new_end = index + new_count; + assert(old_end <= self->size); + + _array__reserve(self, element_size, new_size); + + char *contents = (char *)self->contents; + if (self->size > old_end) { + memmove( + contents + new_end * element_size, + contents + old_end * element_size, + (self->size - old_end) * element_size + ); + } + if (new_count > 0) { + if (elements) { + memcpy( + (contents + index * element_size), + elements, + new_count * element_size + ); + } else { + memset( + (contents + index * element_size), + 0, + new_count * element_size + ); + } + } + self->size += new_count - old_count; +} + +/// A binary search routine, based on Rust's `std::slice::binary_search_by`. +/// This is not what you're looking for, see `array_search_sorted_with` or `array_search_sorted_by`. +#define _array__search_sorted(self, start, compare, suffix, needle, _index, _exists) \ + do { \ + *(_index) = start; \ + *(_exists) = false; \ + uint32_t size = (self)->size - *(_index); \ + if (size == 0) break; \ + int comparison; \ + while (size > 1) { \ + uint32_t half_size = size / 2; \ + uint32_t mid_index = *(_index) + half_size; \ + comparison = compare(&((self)->contents[mid_index] suffix), (needle)); \ + if (comparison <= 0) *(_index) = mid_index; \ + size -= half_size; \ + } \ + comparison = compare(&((self)->contents[*(_index)] suffix), (needle)); \ + if (comparison == 0) *(_exists) = true; \ + else if (comparison < 0) *(_index) += 1; \ + } while (0) + +/// Helper macro for the `_sorted_by` routines below. This takes the left (existing) +/// parameter by reference in order to work with the generic sorting function above. +#define _compare_int(a, b) ((int)*(a) - (int)(b)) + +#ifdef _MSC_VER +#pragma warning(default : 4101) +#elif defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic pop +#endif + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_ARRAY_H_ diff --git a/parser/nnsrc/atomic.h b/parser/nnsrc/atomic.h new file mode 100644 index 00000000..e680b60e --- /dev/null +++ b/parser/nnsrc/atomic.h @@ -0,0 +1,68 @@ +#ifndef TREE_SITTER_ATOMIC_H_ +#define TREE_SITTER_ATOMIC_H_ + +#include +#include +#include + +#ifdef __TINYC__ + +static inline size_t atomic_load(const volatile size_t *p) { + return *p; +} + +static inline uint32_t atomic_inc(volatile uint32_t *p) { + *p += 1; + return *p; +} + +static inline uint32_t atomic_dec(volatile uint32_t *p) { + *p-= 1; + return *p; +} + +#elif defined(_WIN32) + +#include + +static inline size_t atomic_load(const volatile size_t *p) { + return *p; +} + +static inline uint32_t atomic_inc(volatile uint32_t *p) { + return InterlockedIncrement((long volatile *)p); +} + +static inline uint32_t atomic_dec(volatile uint32_t *p) { + return InterlockedDecrement((long volatile *)p); +} + +#else + +static inline size_t atomic_load(const volatile size_t *p) { +#ifdef __ATOMIC_RELAXED + return __atomic_load_n(p, __ATOMIC_RELAXED); +#else + return __sync_fetch_and_add((volatile size_t *)p, 0); +#endif +} + +static inline uint32_t atomic_inc(volatile uint32_t *p) { + #ifdef __ATOMIC_RELAXED + return __atomic_add_fetch(p, 1U, __ATOMIC_SEQ_CST); + #else + return __sync_add_and_fetch(p, 1U); + #endif +} + +static inline uint32_t atomic_dec(volatile uint32_t *p) { + #ifdef __ATOMIC_RELAXED + return __atomic_sub_fetch(p, 1U, __ATOMIC_SEQ_CST); + #else + return __sync_sub_and_fetch(p, 1U); + #endif +} + +#endif + +#endif // TREE_SITTER_ATOMIC_H_ diff --git a/parser/nnsrc/clock.h b/parser/nnsrc/clock.h new file mode 100644 index 00000000..5d246ca7 --- /dev/null +++ b/parser/nnsrc/clock.h @@ -0,0 +1,146 @@ +#ifndef TREE_SITTER_CLOCK_H_ +#define TREE_SITTER_CLOCK_H_ + +#include +#include + +typedef uint64_t TSDuration; + +#ifdef _WIN32 + +// Windows: +// * Represent a time as a performance counter value. +// * Represent a duration as a number of performance counter ticks. + +#include +typedef uint64_t TSClock; + +static inline TSDuration duration_from_micros(uint64_t micros) { + LARGE_INTEGER frequency; + QueryPerformanceFrequency(&frequency); + return micros * (uint64_t)frequency.QuadPart / 1000000; +} + +static inline uint64_t duration_to_micros(TSDuration self) { + LARGE_INTEGER frequency; + QueryPerformanceFrequency(&frequency); + return self * 1000000 / (uint64_t)frequency.QuadPart; +} + +static inline TSClock clock_null(void) { + return 0; +} + +static inline TSClock clock_now(void) { + LARGE_INTEGER result; + QueryPerformanceCounter(&result); + return (uint64_t)result.QuadPart; +} + +static inline TSClock clock_after(TSClock base, TSDuration duration) { + return base + duration; +} + +static inline bool clock_is_null(TSClock self) { + return !self; +} + +static inline bool clock_is_gt(TSClock self, TSClock other) { + return self > other; +} + +#elif defined(CLOCK_MONOTONIC) && !defined(__APPLE__) + +// POSIX with monotonic clock support (Linux) +// * Represent a time as a monotonic (seconds, nanoseconds) pair. +// * Represent a duration as a number of microseconds. +// +// On these platforms, parse timeouts will correspond accurately to +// real time, regardless of what other processes are running. + +#include +typedef struct timespec TSClock; + +static inline TSDuration duration_from_micros(uint64_t micros) { + return micros; +} + +static inline uint64_t duration_to_micros(TSDuration self) { + return self; +} + +static inline TSClock clock_now(void) { + TSClock result; + clock_gettime(CLOCK_MONOTONIC, &result); + return result; +} + +static inline TSClock clock_null(void) { + return (TSClock) {0, 0}; +} + +static inline TSClock clock_after(TSClock base, TSDuration duration) { + TSClock result = base; + result.tv_sec += duration / 1000000; + result.tv_nsec += (duration % 1000000) * 1000; + if (result.tv_nsec >= 1000000000) { + result.tv_nsec -= 1000000000; + ++(result.tv_sec); + } + return result; +} + +static inline bool clock_is_null(TSClock self) { + return !self.tv_sec && !self.tv_nsec; +} + +static inline bool clock_is_gt(TSClock self, TSClock other) { + if (self.tv_sec > other.tv_sec) return true; + if (self.tv_sec < other.tv_sec) return false; + return self.tv_nsec > other.tv_nsec; +} + +#else + +// macOS or POSIX without monotonic clock support +// * Represent a time as a process clock value. +// * Represent a duration as a number of process clock ticks. +// +// On these platforms, parse timeouts may be affected by other processes, +// which is not ideal, but is better than using a non-monotonic time API +// like `gettimeofday`. + +#include +typedef uint64_t TSClock; + +static inline TSDuration duration_from_micros(uint64_t micros) { + return micros * (uint64_t)CLOCKS_PER_SEC / 1000000; +} + +static inline uint64_t duration_to_micros(TSDuration self) { + return self * 1000000 / (uint64_t)CLOCKS_PER_SEC; +} + +static inline TSClock clock_null(void) { + return 0; +} + +static inline TSClock clock_now(void) { + return (uint64_t)clock(); +} + +static inline TSClock clock_after(TSClock base, TSDuration duration) { + return base + duration; +} + +static inline bool clock_is_null(TSClock self) { + return !self; +} + +static inline bool clock_is_gt(TSClock self, TSClock other) { + return self > other; +} + +#endif + +#endif // TREE_SITTER_CLOCK_H_ diff --git a/parser/nnsrc/create_language.c b/parser/nnsrc/create_language.c new file mode 100644 index 00000000..d21f0c0a --- /dev/null +++ b/parser/nnsrc/create_language.c @@ -0,0 +1,99 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* create_language.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: maiboyer +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/04/25 16:13:52 by maiboyer #+# #+# */ +/* Updated: 2024/06/30 16:44:49 by maiboyer ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "../static/headers/constants.h" +#include "../static/headers/symbols.h" +#include "./parser.h" + +bool lex_keywords_main(TSLexer *lexer, TSStateId state); +bool lex_normal_main(TSLexer *lexer, TSStateId state); +bool tree_sitter_sh_external_scanner_scan(void *ctx, TSLexer *lexer, const bool *ret); +void *create_external_scanner_states(void); +void *create_field_names(void); +void *create_symbols_names(void); +void *create_field_map_entries(void); +void *create_field_map_slices(void); +void *create_lex_modes(void); +void *create_parse_actions_entries(void); +void *create_primary_state_ids(void); +void *create_alias_sequences(void); +void *create_external_scanner_symbol_map(void); +void *create_non_terminal_alias_map(void); +void *create_unique_symbols_map(void); +void *create_symbols_metadata(void); +void *create_parse_table(void); +void *create_small_parse_table(void); +void *create_small_parse_table_map(void); + +uint32_t tree_sitter_sh_external_scanner_serialize(void *ctx, char *s); +void tree_sitter_sh_external_scanner_deserialize(void *ctx, const char *s, uint32_t val); +void tree_sitter_sh_external_scanner_destroy(void *ctx); +void *tree_sitter_sh_external_scanner_create(void); + +static struct ExternalScannerDefinition init_scanner(void) +{ + return ((struct ExternalScannerDefinition){ + create_external_scanner_states(), + create_external_scanner_symbol_map(), + tree_sitter_sh_external_scanner_create, + tree_sitter_sh_external_scanner_destroy, + tree_sitter_sh_external_scanner_scan, + tree_sitter_sh_external_scanner_serialize, + tree_sitter_sh_external_scanner_deserialize, + }); +} + +static void init_language(TSLanguage *language) +{ + language->parse_table = create_parse_table(); + language->small_parse_table = create_small_parse_table(); + language->small_parse_table_map = create_small_parse_table_map(); + language->parse_actions = create_parse_actions_entries(); + language->symbol_names = create_symbols_names(); + language->field_names = create_field_names(); + language->field_map_slices = create_field_map_slices(); + language->field_map_entries = create_field_map_entries(); + language->symbol_metadata = create_symbols_metadata(); + language->public_symbol_map = create_unique_symbols_map(); + language->alias_map = create_non_terminal_alias_map(); + language->alias_sequences = create_alias_sequences(); + language->lex_modes = create_lex_modes(); + language->primary_state_ids = create_primary_state_ids(); + language->lex_fn = lex_normal_main; + language->keyword_lex_fn = lex_keywords_main; + language->keyword_capture_token = sym_word; + language->external_scanner = init_scanner(); +} + +const TSLanguage *tree_sitter_sh(void) +{ + static bool init = false; + static TSLanguage language = { + .version = LANGUAGE_VERSION, + .symbol_count = SYMBOL_COUNT, + .alias_count = ALIAS_COUNT, + .token_count = TOKEN_COUNT, + .external_token_count = EXTERNAL_TOKEN_COUNT, + .state_count = STATE_COUNT, + .large_state_count = LARGE_STATE_COUNT, + .production_id_count = PRODUCTION_ID_COUNT, + .field_count = FIELD_COUNT, + .max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH, + }; + + if (!init) + { + init_language(&language); + init = true; + } + return ((TSLanguage *)&language); +} diff --git a/parser/nnsrc/error_costs.h b/parser/nnsrc/error_costs.h new file mode 100644 index 00000000..32d3666a --- /dev/null +++ b/parser/nnsrc/error_costs.h @@ -0,0 +1,11 @@ +#ifndef TREE_SITTER_ERROR_COSTS_H_ +#define TREE_SITTER_ERROR_COSTS_H_ + +#define ERROR_STATE 0 +#define ERROR_COST_PER_RECOVERY 500 +#define ERROR_COST_PER_MISSING_TREE 110 +#define ERROR_COST_PER_SKIPPED_TREE 100 +#define ERROR_COST_PER_SKIPPED_LINE 30 +#define ERROR_COST_PER_SKIPPED_CHAR 1 + +#endif diff --git a/parser/nnsrc/get_changed_ranges.c b/parser/nnsrc/get_changed_ranges.c new file mode 100644 index 00000000..bcf8da94 --- /dev/null +++ b/parser/nnsrc/get_changed_ranges.c @@ -0,0 +1,501 @@ +#include "./get_changed_ranges.h" +#include "./subtree.h" +#include "./language.h" +#include "./error_costs.h" +#include "./tree_cursor.h" +#include + +// #define DEBUG_GET_CHANGED_RANGES + +static void ts_range_array_add( + TSRangeArray *self, + Length start, + Length end +) { + if (self->size > 0) { + TSRange *last_range = array_back(self); + if (start.bytes <= last_range->end_byte) { + last_range->end_byte = end.bytes; + last_range->end_point = end.extent; + return; + } + } + + if (start.bytes < end.bytes) { + TSRange range = { start.extent, end.extent, start.bytes, end.bytes }; + array_push(self, range); + } +} + +bool ts_range_array_intersects( + const TSRangeArray *self, + unsigned start_index, + uint32_t start_byte, + uint32_t end_byte +) { + for (unsigned i = start_index; i < self->size; i++) { + TSRange *range = &self->contents[i]; + if (range->end_byte > start_byte) { + if (range->start_byte >= end_byte) break; + return true; + } + } + return false; +} + +void ts_range_array_get_changed_ranges( + const TSRange *old_ranges, unsigned old_range_count, + const TSRange *new_ranges, unsigned new_range_count, + TSRangeArray *differences +) { + unsigned new_index = 0; + unsigned old_index = 0; + Length current_position = length_zero(); + bool in_old_range = false; + bool in_new_range = false; + + while (old_index < old_range_count || new_index < new_range_count) { + const TSRange *old_range = &old_ranges[old_index]; + const TSRange *new_range = &new_ranges[new_index]; + + Length next_old_position; + if (in_old_range) { + next_old_position = (Length) {old_range->end_byte, old_range->end_point}; + } else if (old_index < old_range_count) { + next_old_position = (Length) {old_range->start_byte, old_range->start_point}; + } else { + next_old_position = LENGTH_MAX; + } + + Length next_new_position; + if (in_new_range) { + next_new_position = (Length) {new_range->end_byte, new_range->end_point}; + } else if (new_index < new_range_count) { + next_new_position = (Length) {new_range->start_byte, new_range->start_point}; + } else { + next_new_position = LENGTH_MAX; + } + + if (next_old_position.bytes < next_new_position.bytes) { + if (in_old_range != in_new_range) { + ts_range_array_add(differences, current_position, next_old_position); + } + if (in_old_range) old_index++; + current_position = next_old_position; + in_old_range = !in_old_range; + } else if (next_new_position.bytes < next_old_position.bytes) { + if (in_old_range != in_new_range) { + ts_range_array_add(differences, current_position, next_new_position); + } + if (in_new_range) new_index++; + current_position = next_new_position; + in_new_range = !in_new_range; + } else { + if (in_old_range != in_new_range) { + ts_range_array_add(differences, current_position, next_new_position); + } + if (in_old_range) old_index++; + if (in_new_range) new_index++; + in_old_range = !in_old_range; + in_new_range = !in_new_range; + current_position = next_new_position; + } + } +} + +typedef struct { + TreeCursor cursor; + const TSLanguage *language; + unsigned visible_depth; + bool in_padding; +} Iterator; + +static Iterator iterator_new( + TreeCursor *cursor, + const Subtree *tree, + const TSLanguage *language +) { + array_clear(&cursor->stack); + array_push(&cursor->stack, ((TreeCursorEntry) { + .subtree = tree, + .position = length_zero(), + .child_index = 0, + .structural_child_index = 0, + })); + return (Iterator) { + .cursor = *cursor, + .language = language, + .visible_depth = 1, + .in_padding = false, + }; +} + +static bool iterator_done(Iterator *self) { + return self->cursor.stack.size == 0; +} + +static Length iterator_start_position(Iterator *self) { + TreeCursorEntry entry = *array_back(&self->cursor.stack); + if (self->in_padding) { + return entry.position; + } else { + return length_add(entry.position, ts_subtree_padding(*entry.subtree)); + } +} + +static Length iterator_end_position(Iterator *self) { + TreeCursorEntry entry = *array_back(&self->cursor.stack); + Length result = length_add(entry.position, ts_subtree_padding(*entry.subtree)); + if (self->in_padding) { + return result; + } else { + return length_add(result, ts_subtree_size(*entry.subtree)); + } +} + +static bool iterator_tree_is_visible(const Iterator *self) { + TreeCursorEntry entry = *array_back(&self->cursor.stack); + if (ts_subtree_visible(*entry.subtree)) return true; + if (self->cursor.stack.size > 1) { + Subtree parent = *self->cursor.stack.contents[self->cursor.stack.size - 2].subtree; + return ts_language_alias_at( + self->language, + parent.ptr->production_id, + entry.structural_child_index + ) != 0; + } + return false; +} + +static void iterator_get_visible_state( + const Iterator *self, + Subtree *tree, + TSSymbol *alias_symbol, + uint32_t *start_byte +) { + uint32_t i = self->cursor.stack.size - 1; + + if (self->in_padding) { + if (i == 0) return; + i--; + } + + for (; i + 1 > 0; i--) { + TreeCursorEntry entry = self->cursor.stack.contents[i]; + + if (i > 0) { + const Subtree *parent = self->cursor.stack.contents[i - 1].subtree; + *alias_symbol = ts_language_alias_at( + self->language, + parent->ptr->production_id, + entry.structural_child_index + ); + } + + if (ts_subtree_visible(*entry.subtree) || *alias_symbol) { + *tree = *entry.subtree; + *start_byte = entry.position.bytes; + break; + } + } +} + +static void iterator_ascend(Iterator *self) { + if (iterator_done(self)) return; + if (iterator_tree_is_visible(self) && !self->in_padding) self->visible_depth--; + if (array_back(&self->cursor.stack)->child_index > 0) self->in_padding = false; + self->cursor.stack.size--; +} + +static bool iterator_descend(Iterator *self, uint32_t goal_position) { + if (self->in_padding) return false; + + bool did_descend = false; + do { + did_descend = false; + TreeCursorEntry entry = *array_back(&self->cursor.stack); + Length position = entry.position; + uint32_t structural_child_index = 0; + for (uint32_t i = 0, n = ts_subtree_child_count(*entry.subtree); i < n; i++) { + const Subtree *child = &ts_subtree_children(*entry.subtree)[i]; + Length child_left = length_add(position, ts_subtree_padding(*child)); + Length child_right = length_add(child_left, ts_subtree_size(*child)); + + if (child_right.bytes > goal_position) { + array_push(&self->cursor.stack, ((TreeCursorEntry) { + .subtree = child, + .position = position, + .child_index = i, + .structural_child_index = structural_child_index, + })); + + if (iterator_tree_is_visible(self)) { + if (child_left.bytes > goal_position) { + self->in_padding = true; + } else { + self->visible_depth++; + } + return true; + } + + did_descend = true; + break; + } + + position = child_right; + if (!ts_subtree_extra(*child)) structural_child_index++; + } + } while (did_descend); + + return false; +} + +static void iterator_advance(Iterator *self) { + if (self->in_padding) { + self->in_padding = false; + if (iterator_tree_is_visible(self)) { + self->visible_depth++; + } else { + iterator_descend(self, 0); + } + return; + } + + for (;;) { + if (iterator_tree_is_visible(self)) self->visible_depth--; + TreeCursorEntry entry = array_pop(&self->cursor.stack); + if (iterator_done(self)) return; + + const Subtree *parent = array_back(&self->cursor.stack)->subtree; + uint32_t child_index = entry.child_index + 1; + if (ts_subtree_child_count(*parent) > child_index) { + Length position = length_add(entry.position, ts_subtree_total_size(*entry.subtree)); + uint32_t structural_child_index = entry.structural_child_index; + if (!ts_subtree_extra(*entry.subtree)) structural_child_index++; + const Subtree *next_child = &ts_subtree_children(*parent)[child_index]; + + array_push(&self->cursor.stack, ((TreeCursorEntry) { + .subtree = next_child, + .position = position, + .child_index = child_index, + .structural_child_index = structural_child_index, + })); + + if (iterator_tree_is_visible(self)) { + if (ts_subtree_padding(*next_child).bytes > 0) { + self->in_padding = true; + } else { + self->visible_depth++; + } + } else { + iterator_descend(self, 0); + } + break; + } + } +} + +typedef enum { + IteratorDiffers, + IteratorMayDiffer, + IteratorMatches, +} IteratorComparison; + +static IteratorComparison iterator_compare( + const Iterator *old_iter, + const Iterator *new_iter +) { + Subtree old_tree = NULL_SUBTREE; + Subtree new_tree = NULL_SUBTREE; + uint32_t old_start = 0; + uint32_t new_start = 0; + TSSymbol old_alias_symbol = 0; + TSSymbol new_alias_symbol = 0; + iterator_get_visible_state(old_iter, &old_tree, &old_alias_symbol, &old_start); + iterator_get_visible_state(new_iter, &new_tree, &new_alias_symbol, &new_start); + + if (!old_tree.ptr && !new_tree.ptr) return IteratorMatches; + if (!old_tree.ptr || !new_tree.ptr) return IteratorDiffers; + + if ( + old_alias_symbol == new_alias_symbol && + ts_subtree_symbol(old_tree) == ts_subtree_symbol(new_tree) + ) { + if (old_start == new_start && + !ts_subtree_has_changes(old_tree) && + ts_subtree_symbol(old_tree) != ts_builtin_sym_error && + ts_subtree_size(old_tree).bytes == ts_subtree_size(new_tree).bytes && + ts_subtree_parse_state(old_tree) != TS_TREE_STATE_NONE && + ts_subtree_parse_state(new_tree) != TS_TREE_STATE_NONE && + (ts_subtree_parse_state(old_tree) == ERROR_STATE) == + (ts_subtree_parse_state(new_tree) == ERROR_STATE)) { + return IteratorMatches; + } else { + return IteratorMayDiffer; + } + } + + return IteratorDiffers; +} + +#ifdef DEBUG_GET_CHANGED_RANGES +static inline void iterator_print_state(Iterator *self) { + TreeCursorEntry entry = *array_back(&self->cursor.stack); + TSPoint start = iterator_start_position(self).extent; + TSPoint end = iterator_end_position(self).extent; + const char *name = ts_language_symbol_name(self->language, ts_subtree_symbol(*entry.subtree)); + printf( + "(%-25s %s\t depth:%u [%u, %u] - [%u, %u])", + name, self->in_padding ? "(p)" : " ", + self->visible_depth, + start.row + 1, start.column, + end.row + 1, end.column + ); +} +#endif + +unsigned ts_subtree_get_changed_ranges( + const Subtree *old_tree, const Subtree *new_tree, + TreeCursor *cursor1, TreeCursor *cursor2, + const TSLanguage *language, + const TSRangeArray *included_range_differences, + TSRange **ranges +) { + TSRangeArray results = array_new(); + + Iterator old_iter = iterator_new(cursor1, old_tree, language); + Iterator new_iter = iterator_new(cursor2, new_tree, language); + + unsigned included_range_difference_index = 0; + + Length position = iterator_start_position(&old_iter); + Length next_position = iterator_start_position(&new_iter); + if (position.bytes < next_position.bytes) { + ts_range_array_add(&results, position, next_position); + position = next_position; + } else if (position.bytes > next_position.bytes) { + ts_range_array_add(&results, next_position, position); + next_position = position; + } + + do { + #ifdef DEBUG_GET_CHANGED_RANGES + printf("At [%-2u, %-2u] Compare ", position.extent.row + 1, position.extent.column); + iterator_print_state(&old_iter); + printf("\tvs\t"); + iterator_print_state(&new_iter); + puts(""); + #endif + + // Compare the old and new subtrees. + IteratorComparison comparison = iterator_compare(&old_iter, &new_iter); + + // Even if the two subtrees appear to be identical, they could differ + // internally if they contain a range of text that was previously + // excluded from the parse, and is now included, or vice-versa. + if (comparison == IteratorMatches && ts_range_array_intersects( + included_range_differences, + included_range_difference_index, + position.bytes, + iterator_end_position(&old_iter).bytes + )) { + comparison = IteratorMayDiffer; + } + + bool is_changed = false; + switch (comparison) { + // If the subtrees are definitely identical, move to the end + // of both subtrees. + case IteratorMatches: + next_position = iterator_end_position(&old_iter); + break; + + // If the subtrees might differ internally, descend into both + // subtrees, finding the first child that spans the current position. + case IteratorMayDiffer: + if (iterator_descend(&old_iter, position.bytes)) { + if (!iterator_descend(&new_iter, position.bytes)) { + is_changed = true; + next_position = iterator_end_position(&old_iter); + } + } else if (iterator_descend(&new_iter, position.bytes)) { + is_changed = true; + next_position = iterator_end_position(&new_iter); + } else { + next_position = length_min( + iterator_end_position(&old_iter), + iterator_end_position(&new_iter) + ); + } + break; + + // If the subtrees are different, record a change and then move + // to the end of both subtrees. + case IteratorDiffers: + is_changed = true; + next_position = length_min( + iterator_end_position(&old_iter), + iterator_end_position(&new_iter) + ); + break; + } + + // Ensure that both iterators are caught up to the current position. + while ( + !iterator_done(&old_iter) && + iterator_end_position(&old_iter).bytes <= next_position.bytes + ) iterator_advance(&old_iter); + while ( + !iterator_done(&new_iter) && + iterator_end_position(&new_iter).bytes <= next_position.bytes + ) iterator_advance(&new_iter); + + // Ensure that both iterators are at the same depth in the tree. + while (old_iter.visible_depth > new_iter.visible_depth) { + iterator_ascend(&old_iter); + } + while (new_iter.visible_depth > old_iter.visible_depth) { + iterator_ascend(&new_iter); + } + + if (is_changed) { + #ifdef DEBUG_GET_CHANGED_RANGES + printf( + " change: [[%u, %u] - [%u, %u]]\n", + position.extent.row + 1, position.extent.column, + next_position.extent.row + 1, next_position.extent.column + ); + #endif + + ts_range_array_add(&results, position, next_position); + } + + position = next_position; + + // Keep track of the current position in the included range differences + // array in order to avoid scanning the entire array on each iteration. + while (included_range_difference_index < included_range_differences->size) { + const TSRange *range = &included_range_differences->contents[ + included_range_difference_index + ]; + if (range->end_byte <= position.bytes) { + included_range_difference_index++; + } else { + break; + } + } + } while (!iterator_done(&old_iter) && !iterator_done(&new_iter)); + + Length old_size = ts_subtree_total_size(*old_tree); + Length new_size = ts_subtree_total_size(*new_tree); + if (old_size.bytes < new_size.bytes) { + ts_range_array_add(&results, old_size, new_size); + } else if (new_size.bytes < old_size.bytes) { + ts_range_array_add(&results, new_size, old_size); + } + + *cursor1 = old_iter.cursor; + *cursor2 = new_iter.cursor; + *ranges = results.contents; + return results.size; +} diff --git a/parser/nnsrc/get_changed_ranges.h b/parser/nnsrc/get_changed_ranges.h new file mode 100644 index 00000000..a1f1dbb4 --- /dev/null +++ b/parser/nnsrc/get_changed_ranges.h @@ -0,0 +1,36 @@ +#ifndef TREE_SITTER_GET_CHANGED_RANGES_H_ +#define TREE_SITTER_GET_CHANGED_RANGES_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "./tree_cursor.h" +#include "./subtree.h" + +typedef Array(TSRange) TSRangeArray; + +void ts_range_array_get_changed_ranges( + const TSRange *old_ranges, unsigned old_range_count, + const TSRange *new_ranges, unsigned new_range_count, + TSRangeArray *differences +); + +bool ts_range_array_intersects( + const TSRangeArray *self, unsigned start_index, + uint32_t start_byte, uint32_t end_byte +); + +unsigned ts_subtree_get_changed_ranges( + const Subtree *old_tree, const Subtree *new_tree, + TreeCursor *cursor1, TreeCursor *cursor2, + const TSLanguage *language, + const TSRangeArray *included_range_differences, + TSRange **ranges +); + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_GET_CHANGED_RANGES_H_ diff --git a/parser/nnsrc/host.h b/parser/nnsrc/host.h new file mode 100644 index 00000000..a07e9f89 --- /dev/null +++ b/parser/nnsrc/host.h @@ -0,0 +1,21 @@ + +// Determine endian and pointer size based on known defines. +// TS_BIG_ENDIAN and TS_PTR_SIZE can be set as -D compiler arguments +// to override this. + +#if !defined(TS_BIG_ENDIAN) +#if (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) \ + || (defined( __APPLE_CC__) && (defined(__ppc__) || defined(__ppc64__))) +#define TS_BIG_ENDIAN 1 +#else +#define TS_BIG_ENDIAN 0 +#endif +#endif + +#if !defined(TS_PTR_SIZE) +#if UINTPTR_MAX == 0xFFFFFFFF +#define TS_PTR_SIZE 32 +#else +#define TS_PTR_SIZE 64 +#endif +#endif diff --git a/parser/nnsrc/language.c b/parser/nnsrc/language.c new file mode 100644 index 00000000..84b15c01 --- /dev/null +++ b/parser/nnsrc/language.c @@ -0,0 +1,221 @@ +#include "./language.h" +#include "./wasm_store.h" +#include "api.h" +#include + +const TSLanguage *ts_language_copy(const TSLanguage *self) { + if (self && ts_language_is_wasm(self)) { + ts_wasm_language_retain(self); + } + return self; +} + +void ts_language_delete(const TSLanguage *self) { + if (self && ts_language_is_wasm(self)) { + ts_wasm_language_release(self); + } +} + +uint32_t ts_language_symbol_count(const TSLanguage *self) { + return self->symbol_count + self->alias_count; +} + +uint32_t ts_language_state_count(const TSLanguage *self) { + return self->state_count; +} + +uint32_t ts_language_version(const TSLanguage *self) { + return self->version; +} + +uint32_t ts_language_field_count(const TSLanguage *self) { + return self->field_count; +} + +void ts_language_table_entry( + const TSLanguage *self, + TSStateId state, + TSSymbol symbol, + TableEntry *result +) { + if (symbol == ts_builtin_sym_error || symbol == ts_builtin_sym_error_repeat) { + result->action_count = 0; + result->is_reusable = false; + result->actions = NULL; + } else { + assert(symbol < self->token_count); + uint32_t action_index = ts_language_lookup(self, state, symbol); + const TSParseActionEntry *entry = &self->parse_actions[action_index]; + result->action_count = entry->entry.count; + result->is_reusable = entry->entry.reusable; + result->actions = (const TSParseAction *)(entry + 1); + } +} + +TSSymbolMetadata ts_language_symbol_metadata( + const TSLanguage *self, + TSSymbol symbol +) { + if (symbol == ts_builtin_sym_error) { + return (TSSymbolMetadata) {.visible = true, .named = true}; + } else if (symbol == ts_builtin_sym_error_repeat) { + return (TSSymbolMetadata) {.visible = false, .named = false}; + } else { + return self->symbol_metadata[symbol]; + } +} + +TSSymbol ts_language_public_symbol( + const TSLanguage *self, + TSSymbol symbol +) { + if (symbol == ts_builtin_sym_error) return symbol; + return self->public_symbol_map[symbol]; +} + +TSStateId ts_language_next_state( + const TSLanguage *self, + TSStateId state, + TSSymbol symbol +) { + if (symbol == ts_builtin_sym_error || symbol == ts_builtin_sym_error_repeat) { + return 0; + } else if (symbol < self->token_count) { + uint32_t count; + const TSParseAction *actions = ts_language_actions(self, state, symbol, &count); + if (count > 0) { + TSParseAction action = actions[count - 1]; + if (action.type == TSParseActionTypeShift) { + return action.shift.extra ? state : action.shift.state; + } + } + return 0; + } else { + return ts_language_lookup(self, state, symbol); + } +} + +const char *ts_language_symbol_name( + const TSLanguage *self, + TSSymbol symbol +) { + if (symbol == ts_builtin_sym_error) { + return "ERROR"; + } else if (symbol == ts_builtin_sym_error_repeat) { + return "_ERROR"; + } else if (symbol < ts_language_symbol_count(self)) { + return self->symbol_names[symbol]; + } else { + return NULL; + } +} + +TSSymbol ts_language_symbol_for_name( + const TSLanguage *self, + const char *string, + uint32_t length, + bool is_named +) { + if (!strncmp(string, "ERROR", length)) return ts_builtin_sym_error; + uint16_t count = (uint16_t)ts_language_symbol_count(self); + for (TSSymbol i = 0; i < count; i++) { + TSSymbolMetadata metadata = ts_language_symbol_metadata(self, i); + if ((!metadata.visible && !metadata.supertype) || metadata.named != is_named) continue; + const char *symbol_name = self->symbol_names[i]; + if (!strncmp(symbol_name, string, length) && !symbol_name[length]) { + return self->public_symbol_map[i]; + } + } + return 0; +} + +TSSymbolType ts_language_symbol_type( + const TSLanguage *self, + TSSymbol symbol +) { + TSSymbolMetadata metadata = ts_language_symbol_metadata(self, symbol); + if (metadata.named && metadata.visible) { + return TSSymbolTypeRegular; + } else if (metadata.visible) { + return TSSymbolTypeAnonymous; + } else { + return TSSymbolTypeAuxiliary; + } +} + +const char *ts_language_field_name_for_id( + const TSLanguage *self, + TSFieldId id +) { + uint32_t count = ts_language_field_count(self); + if (count && id <= count) { + return self->field_names[id]; + } else { + return NULL; + } +} + +TSFieldId ts_language_field_id_for_name( + const TSLanguage *self, + const char *name, + uint32_t name_length +) { + uint16_t count = (uint16_t)ts_language_field_count(self); + for (TSSymbol i = 1; i < count + 1; i++) { + switch (strncmp(name, self->field_names[i], name_length)) { + case 0: + if (self->field_names[i][name_length] == 0) return i; + break; + case -1: + return 0; + default: + break; + } + } + return 0; +} + +TSLookaheadIterator *ts_lookahead_iterator_new(const TSLanguage *self, TSStateId state) { + if (state >= self->state_count) return NULL; + LookaheadIterator *iterator = ts_malloc(sizeof(LookaheadIterator)); + *iterator = ts_language_lookaheads(self, state); + return (TSLookaheadIterator *)iterator; +} + +void ts_lookahead_iterator_delete(TSLookaheadIterator *self) { + ts_free(self); +} + +bool ts_lookahead_iterator_reset_state(TSLookaheadIterator * self, TSStateId state) { + LookaheadIterator *iterator = (LookaheadIterator *)self; + if (state >= iterator->language->state_count) return false; + *iterator = ts_language_lookaheads(iterator->language, state); + return true; +} + +const TSLanguage *ts_lookahead_iterator_language(const TSLookaheadIterator *self) { + const LookaheadIterator *iterator = (const LookaheadIterator *)self; + return iterator->language; +} + +bool ts_lookahead_iterator_reset(TSLookaheadIterator *self, const TSLanguage *language, TSStateId state) { + if (state >= language->state_count) return false; + LookaheadIterator *iterator = (LookaheadIterator *)self; + *iterator = ts_language_lookaheads(language, state); + return true; +} + +bool ts_lookahead_iterator_next(TSLookaheadIterator *self) { + LookaheadIterator *iterator = (LookaheadIterator *)self; + return ts_lookahead_iterator__next(iterator); +} + +TSSymbol ts_lookahead_iterator_current_symbol(const TSLookaheadIterator *self) { + const LookaheadIterator *iterator = (const LookaheadIterator *)self; + return iterator->symbol; +} + +const char *ts_lookahead_iterator_current_symbol_name(const TSLookaheadIterator *self) { + const LookaheadIterator *iterator = (const LookaheadIterator *)self; + return ts_language_symbol_name(iterator->language, iterator->symbol); +} diff --git a/parser/nnsrc/language.h b/parser/nnsrc/language.h new file mode 100644 index 00000000..4e2769b4 --- /dev/null +++ b/parser/nnsrc/language.h @@ -0,0 +1,299 @@ +#ifndef TREE_SITTER_LANGUAGE_H_ +#define TREE_SITTER_LANGUAGE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "./subtree.h" +#include "./parser.h" + +#define ts_builtin_sym_error_repeat (ts_builtin_sym_error - 1) + +#define LANGUAGE_VERSION_WITH_PRIMARY_STATES 14 +#define LANGUAGE_VERSION_USABLE_VIA_WASM 13 + +typedef struct { + const TSParseAction *actions; + uint32_t action_count; + bool is_reusable; +} TableEntry; + +typedef struct { + const TSLanguage *language; + const uint16_t *data; + const uint16_t *group_end; + TSStateId state; + uint16_t table_value; + uint16_t section_index; + uint16_t group_count; + bool is_small_state; + + const TSParseAction *actions; + TSSymbol symbol; + TSStateId next_state; + uint16_t action_count; +} LookaheadIterator; + +void ts_language_table_entry(const TSLanguage *, TSStateId, TSSymbol, TableEntry *); + +TSSymbolMetadata ts_language_symbol_metadata(const TSLanguage *, TSSymbol); + +TSSymbol ts_language_public_symbol(const TSLanguage *, TSSymbol); + +TSStateId ts_language_next_state(const TSLanguage *self, TSStateId state, TSSymbol symbol); + +static inline bool ts_language_is_symbol_external(const TSLanguage *self, TSSymbol symbol) { + return 0 < symbol && symbol < self->external_token_count + 1; +} + +static inline const TSParseAction *ts_language_actions( + const TSLanguage *self, + TSStateId state, + TSSymbol symbol, + uint32_t *count +) { + TableEntry entry; + ts_language_table_entry(self, state, symbol, &entry); + *count = entry.action_count; + return entry.actions; +} + +static inline bool ts_language_has_reduce_action( + const TSLanguage *self, + TSStateId state, + TSSymbol symbol +) { + TableEntry entry; + ts_language_table_entry(self, state, symbol, &entry); + return entry.action_count > 0 && entry.actions[0].type == TSParseActionTypeReduce; +} + +// Lookup the table value for a given symbol and state. +// +// For non-terminal symbols, the table value represents a successor state. +// For terminal symbols, it represents an index in the actions table. +// For 'large' parse states, this is a direct lookup. For 'small' parse +// states, this requires searching through the symbol groups to find +// the given symbol. +static inline uint16_t ts_language_lookup( + const TSLanguage *self, + TSStateId state, + TSSymbol symbol +) { + if (state >= self->large_state_count) { + uint32_t index = self->small_parse_table_map[state - self->large_state_count]; + const uint16_t *data = &self->small_parse_table[index]; + uint16_t group_count = *(data++); + for (unsigned i = 0; i < group_count; i++) { + uint16_t section_value = *(data++); + uint16_t symbol_count = *(data++); + for (unsigned j = 0; j < symbol_count; j++) { + if (*(data++) == symbol) return section_value; + } + } + return 0; + } else { + return self->parse_table[state * self->symbol_count + symbol]; + } +} + +static inline bool ts_language_has_actions( + const TSLanguage *self, + TSStateId state, + TSSymbol symbol +) { + return ts_language_lookup(self, state, symbol) != 0; +} + +// Iterate over all of the symbols that are valid in the given state. +// +// For 'large' parse states, this just requires iterating through +// all possible symbols and checking the parse table for each one. +// For 'small' parse states, this exploits the structure of the +// table to only visit the valid symbols. +static inline LookaheadIterator ts_language_lookaheads( + const TSLanguage *self, + TSStateId state +) { + bool is_small_state = state >= self->large_state_count; + const uint16_t *data; + const uint16_t *group_end = NULL; + uint16_t group_count = 0; + if (is_small_state) { + uint32_t index = self->small_parse_table_map[state - self->large_state_count]; + data = &self->small_parse_table[index]; + group_end = data + 1; + group_count = *data; + } else { + data = &self->parse_table[state * self->symbol_count] - 1; + } + return (LookaheadIterator) { + .language = self, + .data = data, + .group_end = group_end, + .group_count = group_count, + .is_small_state = is_small_state, + .symbol = UINT16_MAX, + .next_state = 0, + }; +} + +static inline bool ts_lookahead_iterator__next(LookaheadIterator *self) { + // For small parse states, valid symbols are listed explicitly, + // grouped by their value. There's no need to look up the actions + // again until moving to the next group. + if (self->is_small_state) { + self->data++; + if (self->data == self->group_end) { + if (self->group_count == 0) return false; + self->group_count--; + self->table_value = *(self->data++); + unsigned symbol_count = *(self->data++); + self->group_end = self->data + symbol_count; + self->symbol = *self->data; + } else { + self->symbol = *self->data; + return true; + } + } + + // For large parse states, iterate through every symbol until one + // is found that has valid actions. + else { + do { + self->data++; + self->symbol++; + if (self->symbol >= self->language->symbol_count) return false; + self->table_value = *self->data; + } while (!self->table_value); + } + + // Depending on if the symbols is terminal or non-terminal, the table value either + // represents a list of actions or a successor state. + if (self->symbol < self->language->token_count) { + const TSParseActionEntry *entry = &self->language->parse_actions[self->table_value]; + self->action_count = entry->entry.count; + self->actions = (const TSParseAction *)(entry + 1); + self->next_state = 0; + } else { + self->action_count = 0; + self->next_state = self->table_value; + } + return true; +} + +// Whether the state is a "primary state". If this returns false, it indicates that there exists +// another state that behaves identically to this one with respect to query analysis. +static inline bool ts_language_state_is_primary( + const TSLanguage *self, + TSStateId state +) { + if (self->version >= LANGUAGE_VERSION_WITH_PRIMARY_STATES) { + return state == self->primary_state_ids[state]; + } else { + return true; + } +} + +static inline const bool *ts_language_enabled_external_tokens( + const TSLanguage *self, + unsigned external_scanner_state +) { + if (external_scanner_state == 0) { + return NULL; + } else { + return self->external_scanner.states + self->external_token_count * external_scanner_state; + } +} + +static inline const TSSymbol *ts_language_alias_sequence( + const TSLanguage *self, + uint32_t production_id +) { + return production_id ? + &self->alias_sequences[production_id * self->max_alias_sequence_length] : + NULL; +} + +static inline TSSymbol ts_language_alias_at( + const TSLanguage *self, + uint32_t production_id, + uint32_t child_index +) { + return production_id ? + self->alias_sequences[production_id * self->max_alias_sequence_length + child_index] : + 0; +} + +static inline void ts_language_field_map( + const TSLanguage *self, + uint32_t production_id, + const TSFieldMapEntry **start, + const TSFieldMapEntry **end +) { + if (self->field_count == 0) { + *start = NULL; + *end = NULL; + return; + } + + TSFieldMapSlice slice = self->field_map_slices[production_id]; + *start = &self->field_map_entries[slice.index]; + *end = &self->field_map_entries[slice.index] + slice.length; +} + +static inline void ts_language_aliases_for_symbol( + const TSLanguage *self, + TSSymbol original_symbol, + const TSSymbol **start, + const TSSymbol **end +) { + *start = &self->public_symbol_map[original_symbol]; + *end = *start + 1; + + unsigned idx = 0; + for (;;) { + TSSymbol symbol = self->alias_map[idx++]; + if (symbol == 0 || symbol > original_symbol) break; + uint16_t count = self->alias_map[idx++]; + if (symbol == original_symbol) { + *start = &self->alias_map[idx]; + *end = &self->alias_map[idx + count]; + break; + } + idx += count; + } +} + +static inline void ts_language_write_symbol_as_dot_string( + const TSLanguage *self, + FILE *f, + TSSymbol symbol +) { + const char *name = ts_language_symbol_name(self, symbol); + for (const char *chr = name; *chr; chr++) { + switch (*chr) { + case '"': + case '\\': + fputc('\\', f); + fputc(*chr, f); + break; + case '\n': + fputs("\\n", f); + break; + case '\t': + fputs("\\t", f); + break; + default: + fputc(*chr, f); + break; + } + } +} + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_LANGUAGE_H_ diff --git a/parser/nnsrc/length.h b/parser/nnsrc/length.h new file mode 100644 index 00000000..dbae5ced --- /dev/null +++ b/parser/nnsrc/length.h @@ -0,0 +1,52 @@ +#ifndef TREE_SITTER_LENGTH_H_ +#define TREE_SITTER_LENGTH_H_ + +#include +#include +#include "./point.h" +#include "api.h" + +typedef struct { + uint32_t bytes; + TSPoint extent; +} Length; + +static const Length LENGTH_UNDEFINED = {0, {0, 1}}; +static const Length LENGTH_MAX = {UINT32_MAX, {UINT32_MAX, UINT32_MAX}}; + +static inline bool length_is_undefined(Length length) { + return length.bytes == 0 && length.extent.column != 0; +} + +static inline Length length_min(Length len1, Length len2) { + return (len1.bytes < len2.bytes) ? len1 : len2; +} + +static inline Length length_add(Length len1, Length len2) { + Length result; + result.bytes = len1.bytes + len2.bytes; + result.extent = point_add(len1.extent, len2.extent); + return result; +} + +static inline Length length_sub(Length len1, Length len2) { + Length result; + result.bytes = len1.bytes - len2.bytes; + result.extent = point_sub(len1.extent, len2.extent); + return result; +} + +static inline Length length_zero(void) { + Length result = {0, {0, 0}}; + return result; +} + +static inline Length length_saturating_sub(Length len1, Length len2) { + if (len1.bytes > len2.bytes) { + return length_sub(len1, len2); + } else { + return length_zero(); + } +} + +#endif diff --git a/parser/nnsrc/lexer.c b/parser/nnsrc/lexer.c new file mode 100644 index 00000000..b32a9201 --- /dev/null +++ b/parser/nnsrc/lexer.c @@ -0,0 +1,419 @@ +#include +#include "./lexer.h" +#include "./subtree.h" +#include "./length.h" +#include "./unicode.h" + +#define LOG(message, character) \ + if (self->logger.log) { \ + snprintf( \ + self->debug_buffer, \ + TREE_SITTER_SERIALIZATION_BUFFER_SIZE, \ + 32 <= character && character < 127 ? \ + message " character:'%c'" : \ + message " character:%d", \ + character \ + ); \ + self->logger.log( \ + self->logger.payload, \ + TSLogTypeLex, \ + self->debug_buffer \ + ); \ + } + +static const int32_t BYTE_ORDER_MARK = 0xFEFF; + +static const TSRange DEFAULT_RANGE = { + .start_point = { + .row = 0, + .column = 0, + }, + .end_point = { + .row = UINT32_MAX, + .column = UINT32_MAX, + }, + .start_byte = 0, + .end_byte = UINT32_MAX +}; + +// Check if the lexer has reached EOF. This state is stored +// by setting the lexer's `current_included_range_index` such that +// it has consumed all of its available ranges. +static bool ts_lexer__eof(const TSLexer *_self) { + Lexer *self = (Lexer *)_self; + return self->current_included_range_index == self->included_range_count; +} + +// Clear the currently stored chunk of source code, because the lexer's +// position has changed. +static void ts_lexer__clear_chunk(Lexer *self) { + self->chunk = NULL; + self->chunk_size = 0; + self->chunk_start = 0; +} + +// Call the lexer's input callback to obtain a new chunk of source code +// for the current position. +static void ts_lexer__get_chunk(Lexer *self) { + self->chunk_start = self->current_position.bytes; + self->chunk = self->input.read( + self->input.payload, + self->current_position.bytes, + self->current_position.extent, + &self->chunk_size + ); + if (!self->chunk_size) { + self->current_included_range_index = self->included_range_count; + self->chunk = NULL; + } +} + +// Decode the next unicode character in the current chunk of source code. +// This assumes that the lexer has already retrieved a chunk of source +// code that spans the current position. +static void ts_lexer__get_lookahead(Lexer *self) { + uint32_t position_in_chunk = self->current_position.bytes - self->chunk_start; + uint32_t size = self->chunk_size - position_in_chunk; + + if (size == 0) { + self->lookahead_size = 1; + self->data.lookahead = '\0'; + return; + } + + const uint8_t *chunk = (const uint8_t *)self->chunk + position_in_chunk; + UnicodeDecodeFunction decode = self->input.encoding == TSInputEncodingUTF8 + ? ts_decode_utf8 + : ts_decode_utf16; + + self->lookahead_size = decode(chunk, size, &self->data.lookahead); + + // If this chunk ended in the middle of a multi-byte character, + // try again with a fresh chunk. + if (self->data.lookahead == TS_DECODE_ERROR && size < 4) { + ts_lexer__get_chunk(self); + chunk = (const uint8_t *)self->chunk; + size = self->chunk_size; + self->lookahead_size = decode(chunk, size, &self->data.lookahead); + } + + if (self->data.lookahead == TS_DECODE_ERROR) { + self->lookahead_size = 1; + } +} + +static void ts_lexer_goto(Lexer *self, Length position) { + self->current_position = position; + + // Move to the first valid position at or after the given position. + bool found_included_range = false; + for (unsigned i = 0; i < self->included_range_count; i++) { + TSRange *included_range = &self->included_ranges[i]; + if ( + included_range->end_byte > self->current_position.bytes && + included_range->end_byte > included_range->start_byte + ) { + if (included_range->start_byte >= self->current_position.bytes) { + self->current_position = (Length) { + .bytes = included_range->start_byte, + .extent = included_range->start_point, + }; + } + + self->current_included_range_index = i; + found_included_range = true; + break; + } + } + + if (found_included_range) { + // If the current position is outside of the current chunk of text, + // then clear out the current chunk of text. + if (self->chunk && ( + self->current_position.bytes < self->chunk_start || + self->current_position.bytes >= self->chunk_start + self->chunk_size + )) { + ts_lexer__clear_chunk(self); + } + + self->lookahead_size = 0; + self->data.lookahead = '\0'; + } + + // If the given position is beyond any of included ranges, move to the EOF + // state - past the end of the included ranges. + else { + self->current_included_range_index = self->included_range_count; + TSRange *last_included_range = &self->included_ranges[self->included_range_count - 1]; + self->current_position = (Length) { + .bytes = last_included_range->end_byte, + .extent = last_included_range->end_point, + }; + ts_lexer__clear_chunk(self); + self->lookahead_size = 1; + self->data.lookahead = '\0'; + } +} + +// Intended to be called only from functions that control logging. +static void ts_lexer__do_advance(Lexer *self, bool skip) { + if (self->lookahead_size) { + self->current_position.bytes += self->lookahead_size; + if (self->data.lookahead == '\n') { + self->current_position.extent.row++; + self->current_position.extent.column = 0; + } else { + self->current_position.extent.column += self->lookahead_size; + } + } + + const TSRange *current_range = &self->included_ranges[self->current_included_range_index]; + while ( + self->current_position.bytes >= current_range->end_byte || + current_range->end_byte == current_range->start_byte + ) { + if (self->current_included_range_index < self->included_range_count) { + self->current_included_range_index++; + } + if (self->current_included_range_index < self->included_range_count) { + current_range++; + self->current_position = (Length) { + current_range->start_byte, + current_range->start_point, + }; + } else { + current_range = NULL; + break; + } + } + + if (skip) self->token_start_position = self->current_position; + + if (current_range) { + if ( + self->current_position.bytes < self->chunk_start || + self->current_position.bytes >= self->chunk_start + self->chunk_size + ) { + ts_lexer__get_chunk(self); + } + ts_lexer__get_lookahead(self); + } else { + ts_lexer__clear_chunk(self); + self->data.lookahead = '\0'; + self->lookahead_size = 1; + } +} + +// Advance to the next character in the source code, retrieving a new +// chunk of source code if needed. +static void ts_lexer__advance(TSLexer *_self, bool skip) { + Lexer *self = (Lexer *)_self; + if (!self->chunk) return; + + if (skip) { + LOG("skip", self->data.lookahead) + } else { + LOG("consume", self->data.lookahead) + } + + ts_lexer__do_advance(self, skip); +} + +// Mark that a token match has completed. This can be called multiple +// times if a longer match is found later. +static void ts_lexer__mark_end(TSLexer *_self) { + Lexer *self = (Lexer *)_self; + if (!ts_lexer__eof(&self->data)) { + // If the lexer is right at the beginning of included range, + // then the token should be considered to end at the *end* of the + // previous included range, rather than here. + TSRange *current_included_range = &self->included_ranges[ + self->current_included_range_index + ]; + if ( + self->current_included_range_index > 0 && + self->current_position.bytes == current_included_range->start_byte + ) { + TSRange *previous_included_range = current_included_range - 1; + self->token_end_position = (Length) { + previous_included_range->end_byte, + previous_included_range->end_point, + }; + return; + } + } + self->token_end_position = self->current_position; +} + +static uint32_t ts_lexer__get_column(TSLexer *_self) { + Lexer *self = (Lexer *)_self; + + uint32_t goal_byte = self->current_position.bytes; + + self->did_get_column = true; + self->current_position.bytes -= self->current_position.extent.column; + self->current_position.extent.column = 0; + + if (self->current_position.bytes < self->chunk_start) { + ts_lexer__get_chunk(self); + } + + uint32_t result = 0; + if (!ts_lexer__eof(_self)) { + ts_lexer__get_lookahead(self); + while (self->current_position.bytes < goal_byte && self->chunk) { + result++; + ts_lexer__do_advance(self, false); + if (ts_lexer__eof(_self)) break; + } + } + + return result; +} + +// Is the lexer at a boundary between two disjoint included ranges of +// source code? This is exposed as an API because some languages' external +// scanners need to perform custom actions at these boundaries. +static bool ts_lexer__is_at_included_range_start(const TSLexer *_self) { + const Lexer *self = (const Lexer *)_self; + if (self->current_included_range_index < self->included_range_count) { + TSRange *current_range = &self->included_ranges[self->current_included_range_index]; + return self->current_position.bytes == current_range->start_byte; + } else { + return false; + } +} + +void ts_lexer_init(Lexer *self) { + *self = (Lexer) { + .data = { + // The lexer's methods are stored as struct fields so that generated + // parsers can call them without needing to be linked against this + // library. + .advance = ts_lexer__advance, + .mark_end = ts_lexer__mark_end, + .get_column = ts_lexer__get_column, + .is_at_included_range_start = ts_lexer__is_at_included_range_start, + .eof = ts_lexer__eof, + .lookahead = 0, + .result_symbol = 0, + }, + .chunk = NULL, + .chunk_size = 0, + .chunk_start = 0, + .current_position = {0, {0, 0}}, + .logger = { + .payload = NULL, + .log = NULL + }, + .included_ranges = NULL, + .included_range_count = 0, + .current_included_range_index = 0, + }; + ts_lexer_set_included_ranges(self, NULL, 0); +} + +void ts_lexer_delete(Lexer *self) { + ts_free(self->included_ranges); +} + +void ts_lexer_set_input(Lexer *self, TSInput input) { + self->input = input; + ts_lexer__clear_chunk(self); + ts_lexer_goto(self, self->current_position); +} + +// Move the lexer to the given position. This doesn't do any work +// if the parser is already at the given position. +void ts_lexer_reset(Lexer *self, Length position) { + if (position.bytes != self->current_position.bytes) { + ts_lexer_goto(self, position); + } +} + +void ts_lexer_start(Lexer *self) { + self->token_start_position = self->current_position; + self->token_end_position = LENGTH_UNDEFINED; + self->data.result_symbol = 0; + self->did_get_column = false; + if (!ts_lexer__eof(&self->data)) { + if (!self->chunk_size) ts_lexer__get_chunk(self); + if (!self->lookahead_size) ts_lexer__get_lookahead(self); + if ( + self->current_position.bytes == 0 && + self->data.lookahead == BYTE_ORDER_MARK + ) ts_lexer__advance(&self->data, true); + } +} + +void ts_lexer_finish(Lexer *self, uint32_t *lookahead_end_byte) { + if (length_is_undefined(self->token_end_position)) { + ts_lexer__mark_end(&self->data); + } + + // If the token ended at an included range boundary, then its end position + // will have been reset to the end of the preceding range. Reset the start + // position to match. + if (self->token_end_position.bytes < self->token_start_position.bytes) { + self->token_start_position = self->token_end_position; + } + + uint32_t current_lookahead_end_byte = self->current_position.bytes + 1; + + // In order to determine that a byte sequence is invalid UTF8 or UTF16, + // the character decoding algorithm may have looked at the following byte. + // Therefore, the next byte *after* the current (invalid) character + // affects the interpretation of the current character. + if (self->data.lookahead == TS_DECODE_ERROR) { + current_lookahead_end_byte += 4; // the maximum number of bytes read to identify an invalid code point + } + + if (current_lookahead_end_byte > *lookahead_end_byte) { + *lookahead_end_byte = current_lookahead_end_byte; + } +} + +void ts_lexer_advance_to_end(Lexer *self) { + while (self->chunk) { + ts_lexer__advance(&self->data, false); + } +} + +void ts_lexer_mark_end(Lexer *self) { + ts_lexer__mark_end(&self->data); +} + +bool ts_lexer_set_included_ranges( + Lexer *self, + const TSRange *ranges, + uint32_t count +) { + if (count == 0 || !ranges) { + ranges = &DEFAULT_RANGE; + count = 1; + } else { + uint32_t previous_byte = 0; + for (unsigned i = 0; i < count; i++) { + const TSRange *range = &ranges[i]; + if ( + range->start_byte < previous_byte || + range->end_byte < range->start_byte + ) return false; + previous_byte = range->end_byte; + } + } + + size_t size = count * sizeof(TSRange); + self->included_ranges = ts_realloc(self->included_ranges, size); + memcpy(self->included_ranges, ranges, size); + self->included_range_count = count; + ts_lexer_goto(self, self->current_position); + return true; +} + +TSRange *ts_lexer_included_ranges(const Lexer *self, uint32_t *count) { + *count = self->included_range_count; + return self->included_ranges; +} + +#undef LOG diff --git a/parser/nnsrc/lexer.h b/parser/nnsrc/lexer.h new file mode 100644 index 00000000..a8cc38f1 --- /dev/null +++ b/parser/nnsrc/lexer.h @@ -0,0 +1,49 @@ +#ifndef TREE_SITTER_LEXER_H_ +#define TREE_SITTER_LEXER_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "./length.h" +#include "./subtree.h" +#include "api.h" +#include "./parser.h" + +typedef struct { + TSLexer data; + Length current_position; + Length token_start_position; + Length token_end_position; + + TSRange *included_ranges; + const char *chunk; + TSInput input; + TSLogger logger; + + uint32_t included_range_count; + uint32_t current_included_range_index; + uint32_t chunk_start; + uint32_t chunk_size; + uint32_t lookahead_size; + bool did_get_column; + + char debug_buffer[TREE_SITTER_SERIALIZATION_BUFFER_SIZE]; +} Lexer; + +void ts_lexer_init(Lexer *); +void ts_lexer_delete(Lexer *); +void ts_lexer_set_input(Lexer *, TSInput); +void ts_lexer_reset(Lexer *, Length); +void ts_lexer_start(Lexer *); +void ts_lexer_finish(Lexer *, uint32_t *); +void ts_lexer_advance_to_end(Lexer *); +void ts_lexer_mark_end(Lexer *); +bool ts_lexer_set_included_ranges(Lexer *self, const TSRange *ranges, uint32_t count); +TSRange *ts_lexer_included_ranges(const Lexer *self, uint32_t *count); + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_LEXER_H_ diff --git a/parser/nnsrc/lib.c b/parser/nnsrc/lib.c new file mode 100644 index 00000000..f79f1ca0 --- /dev/null +++ b/parser/nnsrc/lib.c @@ -0,0 +1,17 @@ +#define _POSIX_C_SOURCE 200112L + +#include "./alloc.c" +#include "./get_changed_ranges.c" +#include "./language.c" +#include "./lexer.c" +#include "./node.c" +#include "./parser.c" +#include "./query.c" +#include "./stack.c" +#include "./subtree.c" +#include "./tree.c" +#include "./tree_cursor.c" +#include "./wasm_store.c" + +#include "./create_language.c" +#include "./scanner.c" diff --git a/parser/nnsrc/node.c b/parser/nnsrc/node.c new file mode 100644 index 00000000..0e7dffa3 --- /dev/null +++ b/parser/nnsrc/node.c @@ -0,0 +1,891 @@ +#include "./language.h" +#include "./subtree.h" +#include "./tree.h" +#include "api.h" +#include + +typedef struct +{ + Subtree parent; + const TSTree *tree; + Length position; + uint32_t child_index; + uint32_t structural_child_index; + const TSSymbol *alias_sequence; +} NodeChildIterator; + +// TSNode - constructors + +TSNode ts_node_new(const TSTree *tree, const Subtree *subtree, Length position, TSSymbol alias) +{ + return (TSNode){ + {position.bytes, position.extent.row, position.extent.column, alias}, + subtree, + tree, + }; +} + +static inline TSNode ts_node__null(void) +{ + return ts_node_new(NULL, NULL, length_zero(), 0); +} + +// TSNode - accessors + +uint32_t ts_node_start_byte(TSNode self) +{ + return self.context[0]; +} + +TSPoint ts_node_start_point(TSNode self) +{ + return (TSPoint){self.context[1], self.context[2]}; +} + +static inline uint32_t ts_node__alias(const TSNode *self) +{ + return self->context[3]; +} + +static inline Subtree ts_node__subtree(TSNode self) +{ + return *(const Subtree *)self.id; +} + +// NodeChildIterator + +static inline NodeChildIterator ts_node_iterate_children(const TSNode *node) +{ + Subtree subtree = ts_node__subtree(*node); + if (ts_subtree_child_count(subtree) == 0) + { + return (NodeChildIterator){NULL_SUBTREE, node->tree, length_zero(), 0, 0, NULL}; + } + const TSSymbol *alias_sequence = ts_language_alias_sequence(node->tree->language, subtree.ptr->production_id); + return (NodeChildIterator){ + .tree = node->tree, + .parent = subtree, + .position = {ts_node_start_byte(*node), ts_node_start_point(*node)}, + .child_index = 0, + .structural_child_index = 0, + .alias_sequence = alias_sequence, + }; +} + +static inline bool ts_node_child_iterator_done(NodeChildIterator *self) +{ + return self->child_index == self->parent.ptr->child_count; +} + +static inline bool ts_node_child_iterator_next(NodeChildIterator *self, TSNode *result) +{ + if (!self->parent.ptr || ts_node_child_iterator_done(self)) + return false; + const Subtree *child = &ts_subtree_children(self->parent)[self->child_index]; + TSSymbol alias_symbol = 0; + if (!ts_subtree_extra(*child)) + { + if (self->alias_sequence) + { + alias_symbol = self->alias_sequence[self->structural_child_index]; + } + self->structural_child_index++; + } + if (self->child_index > 0) + { + self->position = length_add(self->position, ts_subtree_padding(*child)); + } + *result = ts_node_new(self->tree, child, self->position, alias_symbol); + self->position = length_add(self->position, ts_subtree_size(*child)); + self->child_index++; + return true; +} + +// TSNode - private + +static inline bool ts_node__is_relevant(TSNode self, bool include_anonymous) +{ + Subtree tree = ts_node__subtree(self); + if (include_anonymous) + { + return ts_subtree_visible(tree) || ts_node__alias(&self); + } + else + { + TSSymbol alias = ts_node__alias(&self); + if (alias) + { + return ts_language_symbol_metadata(self.tree->language, alias).named; + } + else + { + return ts_subtree_visible(tree) && ts_subtree_named(tree); + } + } +} + +static inline uint32_t ts_node__relevant_child_count(TSNode self, bool include_anonymous) +{ + Subtree tree = ts_node__subtree(self); + if (ts_subtree_child_count(tree) > 0) + { + if (include_anonymous) + { + return tree.ptr->visible_child_count; + } + else + { + return tree.ptr->named_child_count; + } + } + else + { + return 0; + } +} + +static inline TSNode ts_node__child(TSNode self, uint32_t child_index, bool include_anonymous) +{ + TSNode result = self; + bool did_descend = true; + + while (did_descend) + { + did_descend = false; + + TSNode child; + uint32_t index = 0; + NodeChildIterator iterator = ts_node_iterate_children(&result); + while (ts_node_child_iterator_next(&iterator, &child)) + { + if (ts_node__is_relevant(child, include_anonymous)) + { + if (index == child_index) + { + return child; + } + index++; + } + else + { + uint32_t grandchild_index = child_index - index; + uint32_t grandchild_count = ts_node__relevant_child_count(child, include_anonymous); + if (grandchild_index < grandchild_count) + { + did_descend = true; + result = child; + child_index = grandchild_index; + break; + } + index += grandchild_count; + } + } + } + + return ts_node__null(); +} + +static bool ts_subtree_has_trailing_empty_descendant(Subtree self, Subtree other) +{ + for (unsigned i = ts_subtree_child_count(self) - 1; i + 1 > 0; i--) + { + Subtree child = ts_subtree_children(self)[i]; + if (ts_subtree_total_bytes(child) > 0) + break; + if (child.ptr == other.ptr || ts_subtree_has_trailing_empty_descendant(child, other)) + { + return true; + } + } + return false; +} + +static inline TSNode ts_node__prev_sibling(TSNode self, bool include_anonymous) +{ + Subtree self_subtree = ts_node__subtree(self); + bool self_is_empty = ts_subtree_total_bytes(self_subtree) == 0; + uint32_t target_end_byte = ts_node_end_byte(self); + + TSNode node = ts_node_parent(self); + TSNode earlier_node = ts_node__null(); + bool earlier_node_is_relevant = false; + + while (!ts_node_is_null(node)) + { + TSNode earlier_child = ts_node__null(); + bool earlier_child_is_relevant = false; + bool found_child_containing_target = false; + + TSNode child; + NodeChildIterator iterator = ts_node_iterate_children(&node); + while (ts_node_child_iterator_next(&iterator, &child)) + { + if (child.id == self.id) + break; + if (iterator.position.bytes > target_end_byte) + { + found_child_containing_target = true; + break; + } + + if (iterator.position.bytes == target_end_byte && + (!self_is_empty || ts_subtree_has_trailing_empty_descendant(ts_node__subtree(child), self_subtree))) + { + found_child_containing_target = true; + break; + } + + if (ts_node__is_relevant(child, include_anonymous)) + { + earlier_child = child; + earlier_child_is_relevant = true; + } + else if (ts_node__relevant_child_count(child, include_anonymous) > 0) + { + earlier_child = child; + earlier_child_is_relevant = false; + } + } + + if (found_child_containing_target) + { + if (!ts_node_is_null(earlier_child)) + { + earlier_node = earlier_child; + earlier_node_is_relevant = earlier_child_is_relevant; + } + node = child; + } + else if (earlier_child_is_relevant) + { + return earlier_child; + } + else if (!ts_node_is_null(earlier_child)) + { + node = earlier_child; + } + else if (earlier_node_is_relevant) + { + return earlier_node; + } + else + { + node = earlier_node; + earlier_node = ts_node__null(); + earlier_node_is_relevant = false; + } + } + + return ts_node__null(); +} + +static inline TSNode ts_node__next_sibling(TSNode self, bool include_anonymous) +{ + uint32_t target_end_byte = ts_node_end_byte(self); + + TSNode node = ts_node_parent(self); + TSNode later_node = ts_node__null(); + bool later_node_is_relevant = false; + + while (!ts_node_is_null(node)) + { + TSNode later_child = ts_node__null(); + bool later_child_is_relevant = false; + TSNode child_containing_target = ts_node__null(); + + TSNode child; + NodeChildIterator iterator = ts_node_iterate_children(&node); + while (ts_node_child_iterator_next(&iterator, &child)) + { + if (iterator.position.bytes < target_end_byte) + continue; + if (ts_node_start_byte(child) <= ts_node_start_byte(self)) + { + if (ts_node__subtree(child).ptr != ts_node__subtree(self).ptr) + { + child_containing_target = child; + } + } + else if (ts_node__is_relevant(child, include_anonymous)) + { + later_child = child; + later_child_is_relevant = true; + break; + } + else if (ts_node__relevant_child_count(child, include_anonymous) > 0) + { + later_child = child; + later_child_is_relevant = false; + break; + } + } + + if (!ts_node_is_null(child_containing_target)) + { + if (!ts_node_is_null(later_child)) + { + later_node = later_child; + later_node_is_relevant = later_child_is_relevant; + } + node = child_containing_target; + } + else if (later_child_is_relevant) + { + return later_child; + } + else if (!ts_node_is_null(later_child)) + { + node = later_child; + } + else if (later_node_is_relevant) + { + return later_node; + } + else + { + node = later_node; + } + } + + return ts_node__null(); +} + +static inline TSNode ts_node__first_child_for_byte(TSNode self, uint32_t goal, bool include_anonymous) +{ + TSNode node = self; + bool did_descend = true; + + while (did_descend) + { + did_descend = false; + + TSNode child; + NodeChildIterator iterator = ts_node_iterate_children(&node); + while (ts_node_child_iterator_next(&iterator, &child)) + { + if (ts_node_end_byte(child) > goal) + { + if (ts_node__is_relevant(child, include_anonymous)) + { + return child; + } + else if (ts_node_child_count(child) > 0) + { + did_descend = true; + node = child; + break; + } + } + } + } + + return ts_node__null(); +} + +static inline TSNode ts_node__descendant_for_byte_range(TSNode self, uint32_t range_start, uint32_t range_end, bool include_anonymous) +{ + TSNode node = self; + TSNode last_visible_node = self; + + bool did_descend = true; + while (did_descend) + { + did_descend = false; + + TSNode child; + NodeChildIterator iterator = ts_node_iterate_children(&node); + while (ts_node_child_iterator_next(&iterator, &child)) + { + uint32_t node_end = iterator.position.bytes; + + // The end of this node must extend far enough forward to touch + // the end of the range and exceed the start of the range. + if (node_end < range_end) + continue; + if (node_end <= range_start) + continue; + + // The start of this node must extend far enough backward to + // touch the start of the range. + if (range_start < ts_node_start_byte(child)) + break; + + node = child; + if (ts_node__is_relevant(node, include_anonymous)) + { + last_visible_node = node; + } + did_descend = true; + break; + } + } + + return last_visible_node; +} + +static inline TSNode ts_node__descendant_for_point_range(TSNode self, TSPoint range_start, TSPoint range_end, bool include_anonymous) +{ + TSNode node = self; + TSNode last_visible_node = self; + + bool did_descend = true; + while (did_descend) + { + did_descend = false; + + TSNode child; + NodeChildIterator iterator = ts_node_iterate_children(&node); + while (ts_node_child_iterator_next(&iterator, &child)) + { + TSPoint node_end = iterator.position.extent; + + // The end of this node must extend far enough forward to touch + // the end of the range and exceed the start of the range. + if (point_lt(node_end, range_end)) + continue; + if (point_lte(node_end, range_start)) + continue; + + // The start of this node must extend far enough backward to + // touch the start of the range. + if (point_lt(range_start, ts_node_start_point(child))) + break; + + node = child; + if (ts_node__is_relevant(node, include_anonymous)) + { + last_visible_node = node; + } + did_descend = true; + break; + } + } + + return last_visible_node; +} + +// TSNode - public + +uint32_t ts_node_end_byte(TSNode self) +{ + return ts_node_start_byte(self) + ts_subtree_size(ts_node__subtree(self)).bytes; +} + +TSPoint ts_node_end_point(TSNode self) +{ + return point_add(ts_node_start_point(self), ts_subtree_size(ts_node__subtree(self)).extent); +} + +TSSymbol ts_node_symbol(TSNode self) +{ + TSSymbol symbol = ts_node__alias(&self); + if (!symbol) + symbol = ts_subtree_symbol(ts_node__subtree(self)); + return ts_language_public_symbol(self.tree->language, symbol); +} + +const char *ts_node_type(TSNode self) +{ + TSSymbol symbol = ts_node__alias(&self); + if (!symbol) + symbol = ts_subtree_symbol(ts_node__subtree(self)); + return ts_language_symbol_name(self.tree->language, symbol); +} + +const TSLanguage *ts_node_language(TSNode self) +{ + return self.tree->language; +} + +TSSymbol ts_node_grammar_symbol(TSNode self) +{ + return ts_subtree_symbol(ts_node__subtree(self)); +} + +const char *ts_node_grammar_type(TSNode self) +{ + TSSymbol symbol = ts_subtree_symbol(ts_node__subtree(self)); + return ts_language_symbol_name(self.tree->language, symbol); +} + +char *ts_node_string(TSNode self) +{ + TSSymbol alias_symbol = ts_node__alias(&self); + return ts_subtree_string(ts_node__subtree(self), alias_symbol, ts_language_symbol_metadata(self.tree->language, alias_symbol).visible, + self.tree->language, false); +} + +bool ts_node_eq(TSNode self, TSNode other) +{ + return self.tree == other.tree && self.id == other.id; +} + +bool ts_node_is_null(TSNode self) +{ + return self.id == 0; +} + +bool ts_node_is_extra(TSNode self) +{ + return ts_subtree_extra(ts_node__subtree(self)); +} + +bool ts_node_is_named(TSNode self) +{ + TSSymbol alias = ts_node__alias(&self); + return alias ? ts_language_symbol_metadata(self.tree->language, alias).named : ts_subtree_named(ts_node__subtree(self)); +} + +bool ts_node_is_missing(TSNode self) +{ + return ts_subtree_missing(ts_node__subtree(self)); +} + +bool ts_node_has_changes(TSNode self) +{ + return ts_subtree_has_changes(ts_node__subtree(self)); +} + +bool ts_node_has_error(TSNode self) +{ + return ts_subtree_error_cost(ts_node__subtree(self)) > 0; +} + +bool ts_node_is_error(TSNode self) +{ + TSSymbol symbol = ts_node_symbol(self); + return symbol == ts_builtin_sym_error; +} + +uint32_t ts_node_descendant_count(TSNode self) +{ + return ts_subtree_visible_descendant_count(ts_node__subtree(self)) + 1; +} + +TSStateId ts_node_parse_state(TSNode self) +{ + return ts_subtree_parse_state(ts_node__subtree(self)); +} + +TSStateId ts_node_next_parse_state(TSNode self) +{ + const TSLanguage *language = self.tree->language; + uint16_t state = ts_node_parse_state(self); + if (state == TS_TREE_STATE_NONE) + { + return TS_TREE_STATE_NONE; + } + uint16_t symbol = ts_node_grammar_symbol(self); + return ts_language_next_state(language, state, symbol); +} + +TSNode ts_node_parent(TSNode self) +{ + TSNode node = ts_tree_root_node(self.tree); + if (node.id == self.id) + return ts_node__null(); + + while (true) + { + TSNode next_node = ts_node_child_containing_descendant(node, self); + if (ts_node_is_null(next_node)) + break; + node = next_node; + } + + return node; +} + +TSNode ts_node_child_containing_descendant(TSNode self, TSNode subnode) +{ + uint32_t start_byte = ts_node_start_byte(subnode); + uint32_t end_byte = ts_node_end_byte(subnode); + + do + { + NodeChildIterator iter = ts_node_iterate_children(&self); + do + { + if (!ts_node_child_iterator_next(&iter, &self) || ts_node_start_byte(self) > start_byte || self.id == subnode.id) + { + return ts_node__null(); + } + } while (iter.position.bytes < end_byte || ts_node_child_count(self) == 0); + } while (!ts_node__is_relevant(self, true)); + + return self; +} + +TSNode ts_node_child(TSNode self, uint32_t child_index) +{ + return ts_node__child(self, child_index, true); +} + +TSNode ts_node_named_child(TSNode self, uint32_t child_index) +{ + return ts_node__child(self, child_index, false); +} + +TSNode ts_node_child_by_field_id(TSNode self, TSFieldId field_id) +{ +recur: + if (!field_id || ts_node_child_count(self) == 0) + return ts_node__null(); + + const TSFieldMapEntry *field_map, *field_map_end; + ts_language_field_map(self.tree->language, ts_node__subtree(self).ptr->production_id, &field_map, &field_map_end); + if (field_map == field_map_end) + return ts_node__null(); + + // The field mappings are sorted by their field id. Scan all + // the mappings to find the ones for the given field id. + while (field_map->field_id < field_id) + { + field_map++; + if (field_map == field_map_end) + return ts_node__null(); + } + while (field_map_end[-1].field_id > field_id) + { + field_map_end--; + if (field_map == field_map_end) + return ts_node__null(); + } + + TSNode child; + NodeChildIterator iterator = ts_node_iterate_children(&self); + while (ts_node_child_iterator_next(&iterator, &child)) + { + if (!ts_subtree_extra(ts_node__subtree(child))) + { + uint32_t index = iterator.structural_child_index - 1; + if (index < field_map->child_index) + continue; + + // Hidden nodes' fields are "inherited" by their visible parent. + if (field_map->inherited) + { + + // If this is the *last* possible child node for this field, + // then perform a tail call to avoid recursion. + if (field_map + 1 == field_map_end) + { + self = child; + goto recur; + } + + // Otherwise, descend into this child, but if it doesn't contain + // the field, continue searching subsequent children. + else + { + TSNode result = ts_node_child_by_field_id(child, field_id); + if (result.id) + return result; + field_map++; + if (field_map == field_map_end) + return ts_node__null(); + } + } + + else if (ts_node__is_relevant(child, true)) + { + return child; + } + + // If the field refers to a hidden node with visible children, + // return the first visible child. + else if (ts_node_child_count(child) > 0) + { + return ts_node_child(child, 0); + } + + // Otherwise, continue searching subsequent children. + else + { + field_map++; + if (field_map == field_map_end) + return ts_node__null(); + } + } + } + + return ts_node__null(); +} + +static inline const char *ts_node__field_name_from_language(TSNode self, uint32_t structural_child_index) +{ + const TSFieldMapEntry *field_map, *field_map_end; + ts_language_field_map(self.tree->language, ts_node__subtree(self).ptr->production_id, &field_map, &field_map_end); + for (; field_map != field_map_end; field_map++) + { + if (!field_map->inherited && field_map->child_index == structural_child_index) + { + return self.tree->language->field_names[field_map->field_id]; + } + } + return NULL; +} + +const char *ts_node_field_name_for_child(TSNode self, uint32_t child_index) +{ + TSNode result = self; + bool did_descend = true; + const char *inherited_field_name = NULL; + + while (did_descend) + { + did_descend = false; + + TSNode child; + uint32_t index = 0; + NodeChildIterator iterator = ts_node_iterate_children(&result); + while (ts_node_child_iterator_next(&iterator, &child)) + { + if (ts_node__is_relevant(child, true)) + { + if (index == child_index) + { + if (ts_node_is_extra(child)) + { + return NULL; + } + const char *field_name = ts_node__field_name_from_language(result, iterator.structural_child_index - 1); + if (field_name) + return field_name; + return inherited_field_name; + } + index++; + } + else + { + uint32_t grandchild_index = child_index - index; + uint32_t grandchild_count = ts_node__relevant_child_count(child, true); + if (grandchild_index < grandchild_count) + { + const char *field_name = ts_node__field_name_from_language(result, iterator.structural_child_index - 1); + if (field_name) + inherited_field_name = field_name; + + did_descend = true; + result = child; + child_index = grandchild_index; + break; + } + index += grandchild_count; + } + } + } + + return NULL; +} + +TSNode ts_node_child_by_field_name(TSNode self, const char *name, uint32_t name_length) +{ + TSFieldId field_id = ts_language_field_id_for_name(self.tree->language, name, name_length); + return ts_node_child_by_field_id(self, field_id); +} + +uint32_t ts_node_child_count(TSNode self) +{ + Subtree tree = ts_node__subtree(self); + if (ts_subtree_child_count(tree) > 0) + { + return tree.ptr->visible_child_count; + } + else + { + return 0; + } +} + +uint32_t ts_node_named_child_count(TSNode self) +{ + Subtree tree = ts_node__subtree(self); + if (ts_subtree_child_count(tree) > 0) + { + return tree.ptr->named_child_count; + } + else + { + return 0; + } +} + +TSNode ts_node_next_sibling(TSNode self) +{ + return ts_node__next_sibling(self, true); +} + +TSNode ts_node_next_named_sibling(TSNode self) +{ + return ts_node__next_sibling(self, false); +} + +TSNode ts_node_prev_sibling(TSNode self) +{ + return ts_node__prev_sibling(self, true); +} + +TSNode ts_node_prev_named_sibling(TSNode self) +{ + return ts_node__prev_sibling(self, false); +} + +TSNode ts_node_first_child_for_byte(TSNode self, uint32_t byte) +{ + return ts_node__first_child_for_byte(self, byte, true); +} + +TSNode ts_node_first_named_child_for_byte(TSNode self, uint32_t byte) +{ + return ts_node__first_child_for_byte(self, byte, false); +} + +TSNode ts_node_descendant_for_byte_range(TSNode self, uint32_t start, uint32_t end) +{ + return ts_node__descendant_for_byte_range(self, start, end, true); +} + +TSNode ts_node_named_descendant_for_byte_range(TSNode self, uint32_t start, uint32_t end) +{ + return ts_node__descendant_for_byte_range(self, start, end, false); +} + +TSNode ts_node_descendant_for_point_range(TSNode self, TSPoint start, TSPoint end) +{ + return ts_node__descendant_for_point_range(self, start, end, true); +} + +TSNode ts_node_named_descendant_for_point_range(TSNode self, TSPoint start, TSPoint end) +{ + return ts_node__descendant_for_point_range(self, start, end, false); +} + +void ts_node_edit(TSNode *self, const TSInputEdit *edit) +{ + uint32_t start_byte = ts_node_start_byte(*self); + TSPoint start_point = ts_node_start_point(*self); + + if (start_byte >= edit->old_end_byte) + { + start_byte = edit->new_end_byte + (start_byte - edit->old_end_byte); + start_point = point_add(edit->new_end_point, point_sub(start_point, edit->old_end_point)); + } + else if (start_byte > edit->start_byte) + { + start_byte = edit->new_end_byte; + start_point = edit->new_end_point; + } + + self->context[0] = start_byte; + self->context[1] = start_point.row; + self->context[2] = start_point.column; +} + +TSSymbol ts_node_field_id_for_child(TSNode self, uint32_t child_index) +{ + const char *name = ts_node_field_name_for_child(self, child_index); + if (name == NULL) + return (0); + return (ts_language_field_id_for_name(ts_node_language(self), name, strlen(name))); +} diff --git a/parser/nnsrc/parser.c b/parser/nnsrc/parser.c new file mode 100644 index 00000000..5dbf93d2 --- /dev/null +++ b/parser/nnsrc/parser.c @@ -0,0 +1,2172 @@ +#define _POSIX_C_SOURCE 200112L + +#include "./alloc.h" +#include "./array.h" +#include "./atomic.h" +#include "./clock.h" +#include "./error_costs.h" +#include "./get_changed_ranges.h" +#include "./language.h" +#include "./length.h" +#include "./lexer.h" +#include "./reduce_action.h" +#include "./reusable_node.h" +#include "./stack.h" +#include "./subtree.h" +#include "./tree.h" +#include "./wasm_store.h" +#include "api.h" +#include +#include +#include +#include +#include +#include + +#define LOG(...) \ + if (self->lexer.logger.log || self->dot_graph_file) \ + { \ + snprintf(self->lexer.debug_buffer, TREE_SITTER_SERIALIZATION_BUFFER_SIZE, __VA_ARGS__); \ + ts_parser__log(self); \ + } + +#define LOG_LOOKAHEAD(symbol_name, size) \ + if (self->lexer.logger.log || self->dot_graph_file) \ + { \ + char *buf = self->lexer.debug_buffer; \ + const char *symbol = symbol_name; \ + int off = snprintf(buf, TREE_SITTER_SERIALIZATION_BUFFER_SIZE, "lexed_lookahead sym:"); \ + for (int i = 0; symbol[i] != '\0' && off < TREE_SITTER_SERIALIZATION_BUFFER_SIZE; i++) \ + { \ + switch (symbol[i]) \ + { \ + case '\t': \ + buf[off++] = '\\'; \ + buf[off++] = 't'; \ + break; \ + case '\n': \ + buf[off++] = '\\'; \ + buf[off++] = 'n'; \ + break; \ + case '\v': \ + buf[off++] = '\\'; \ + buf[off++] = 'v'; \ + break; \ + case '\f': \ + buf[off++] = '\\'; \ + buf[off++] = 'f'; \ + break; \ + case '\r': \ + buf[off++] = '\\'; \ + buf[off++] = 'r'; \ + break; \ + case '\\': \ + buf[off++] = '\\'; \ + buf[off++] = '\\'; \ + break; \ + default: \ + buf[off++] = symbol[i]; \ + break; \ + } \ + } \ + snprintf(buf + off, TREE_SITTER_SERIALIZATION_BUFFER_SIZE - off, ", size:%u", size); \ + ts_parser__log(self); \ + } + +#define LOG_STACK() \ + if (self->dot_graph_file) \ + { \ + ts_stack_print_dot_graph(self->stack, self->language, self->dot_graph_file); \ + fputs("\n\n", self->dot_graph_file); \ + } + +#define LOG_TREE(tree) \ + if (self->dot_graph_file) \ + { \ + ts_subtree_print_dot_graph(tree, self->language, self->dot_graph_file); \ + fputs("\n", self->dot_graph_file); \ + } + +#define SYM_NAME(symbol) ts_language_symbol_name(self->language, symbol) + +#define TREE_NAME(tree) SYM_NAME(ts_subtree_symbol(tree)) + +static const unsigned MAX_VERSION_COUNT = 6; +static const unsigned MAX_VERSION_COUNT_OVERFLOW = 4; +static const unsigned MAX_SUMMARY_DEPTH = 16; +static const unsigned MAX_COST_DIFFERENCE = 16 * ERROR_COST_PER_SKIPPED_TREE; +static const unsigned OP_COUNT_PER_TIMEOUT_CHECK = 100; + +typedef struct +{ + Subtree token; + Subtree last_external_token; + uint32_t byte_index; +} TokenCache; + +struct TSParser +{ + Lexer lexer; + Stack *stack; + SubtreePool tree_pool; + const TSLanguage *language; + TSWasmStore *wasm_store; + ReduceActionSet reduce_actions; + Subtree finished_tree; + SubtreeArray trailing_extras; + SubtreeArray trailing_extras2; + SubtreeArray scratch_trees; + TokenCache token_cache; + ReusableNode reusable_node; + void *external_scanner_payload; + FILE *dot_graph_file; + TSClock end_clock; + TSDuration timeout_duration; + unsigned accept_count; + unsigned operation_count; + const volatile size_t *cancellation_flag; + Subtree old_tree; + TSRangeArray included_range_differences; + unsigned included_range_difference_index; + bool has_scanner_error; +}; + +typedef struct +{ + unsigned cost; + unsigned node_count; + int dynamic_precedence; + bool is_in_error; +} ErrorStatus; + +typedef enum +{ + ErrorComparisonTakeLeft, + ErrorComparisonPreferLeft, + ErrorComparisonNone, + ErrorComparisonPreferRight, + ErrorComparisonTakeRight, +} ErrorComparison; + +typedef struct +{ + const char *string; + uint32_t length; +} TSStringInput; + +// StringInput + +static const char *ts_string_input_read(void *_self, uint32_t byte, TSPoint point, uint32_t *length) +{ + (void)point; + TSStringInput *self = (TSStringInput *)_self; + if (byte >= self->length) + { + *length = 0; + return ""; + } + else + { + *length = self->length - byte; + return self->string + byte; + } +} + +// Parser - Private + +static void ts_parser__log(TSParser *self) +{ + if (self->lexer.logger.log) + { + self->lexer.logger.log(self->lexer.logger.payload, TSLogTypeParse, self->lexer.debug_buffer); + } + + if (self->dot_graph_file) + { + fprintf(self->dot_graph_file, "graph {\nlabel=\""); + for (char *chr = &self->lexer.debug_buffer[0]; *chr != 0; chr++) + { + if (*chr == '"' || *chr == '\\') + fputc('\\', self->dot_graph_file); + fputc(*chr, self->dot_graph_file); + } + fprintf(self->dot_graph_file, "\"\n}\n\n"); + } +} + +static bool ts_parser__breakdown_top_of_stack(TSParser *self, StackVersion version) +{ + bool did_break_down = false; + bool pending = false; + + do + { + StackSliceArray pop = ts_stack_pop_pending(self->stack, version); + if (!pop.size) + break; + + did_break_down = true; + pending = false; + for (uint32_t i = 0; i < pop.size; i++) + { + StackSlice slice = pop.contents[i]; + TSStateId state = ts_stack_state(self->stack, slice.version); + Subtree parent = *array_front(&slice.subtrees); + + for (uint32_t j = 0, n = ts_subtree_child_count(parent); j < n; j++) + { + Subtree child = ts_subtree_children(parent)[j]; + pending = ts_subtree_child_count(child) > 0; + + if (ts_subtree_is_error(child)) + { + state = ERROR_STATE; + } + else if (!ts_subtree_extra(child)) + { + state = ts_language_next_state(self->language, state, ts_subtree_symbol(child)); + } + + ts_subtree_retain(child); + ts_stack_push(self->stack, slice.version, child, pending, state); + } + + for (uint32_t j = 1; j < slice.subtrees.size; j++) + { + Subtree tree = slice.subtrees.contents[j]; + ts_stack_push(self->stack, slice.version, tree, false, state); + } + + ts_subtree_release(&self->tree_pool, parent); + array_delete(&slice.subtrees); + + LOG("breakdown_top_of_stack tree:%s", TREE_NAME(parent)); + LOG_STACK(); + } + } while (pending); + + return did_break_down; +} + +static void ts_parser__breakdown_lookahead(TSParser *self, Subtree *lookahead, TSStateId state, ReusableNode *reusable_node) +{ + bool did_descend = false; + Subtree tree = reusable_node_tree(reusable_node); + while (ts_subtree_child_count(tree) > 0 && ts_subtree_parse_state(tree) != state) + { + LOG("state_mismatch sym:%s", TREE_NAME(tree)); + reusable_node_descend(reusable_node); + tree = reusable_node_tree(reusable_node); + did_descend = true; + } + + if (did_descend) + { + ts_subtree_release(&self->tree_pool, *lookahead); + *lookahead = tree; + ts_subtree_retain(*lookahead); + } +} + +static ErrorComparison ts_parser__compare_versions(TSParser *self, ErrorStatus a, ErrorStatus b) +{ + (void)self; + if (!a.is_in_error && b.is_in_error) + { + if (a.cost < b.cost) + { + return ErrorComparisonTakeLeft; + } + else + { + return ErrorComparisonPreferLeft; + } + } + + if (a.is_in_error && !b.is_in_error) + { + if (b.cost < a.cost) + { + return ErrorComparisonTakeRight; + } + else + { + return ErrorComparisonPreferRight; + } + } + + if (a.cost < b.cost) + { + if ((b.cost - a.cost) * (1 + a.node_count) > MAX_COST_DIFFERENCE) + { + return ErrorComparisonTakeLeft; + } + else + { + return ErrorComparisonPreferLeft; + } + } + + if (b.cost < a.cost) + { + if ((a.cost - b.cost) * (1 + b.node_count) > MAX_COST_DIFFERENCE) + { + return ErrorComparisonTakeRight; + } + else + { + return ErrorComparisonPreferRight; + } + } + + if (a.dynamic_precedence > b.dynamic_precedence) + return ErrorComparisonPreferLeft; + if (b.dynamic_precedence > a.dynamic_precedence) + return ErrorComparisonPreferRight; + return ErrorComparisonNone; +} + +static ErrorStatus ts_parser__version_status(TSParser *self, StackVersion version) +{ + unsigned cost = ts_stack_error_cost(self->stack, version); + bool is_paused = ts_stack_is_paused(self->stack, version); + if (is_paused) + cost += ERROR_COST_PER_SKIPPED_TREE; + return (ErrorStatus){.cost = cost, + .node_count = ts_stack_node_count_since_error(self->stack, version), + .dynamic_precedence = ts_stack_dynamic_precedence(self->stack, version), + .is_in_error = is_paused || ts_stack_state(self->stack, version) == ERROR_STATE}; +} + +static bool ts_parser__better_version_exists(TSParser *self, StackVersion version, bool is_in_error, unsigned cost) +{ + if (self->finished_tree.ptr && ts_subtree_error_cost(self->finished_tree) <= cost) + { + return true; + } + + Length position = ts_stack_position(self->stack, version); + ErrorStatus status = { + .cost = cost, + .is_in_error = is_in_error, + .dynamic_precedence = ts_stack_dynamic_precedence(self->stack, version), + .node_count = ts_stack_node_count_since_error(self->stack, version), + }; + + for (StackVersion i = 0, n = ts_stack_version_count(self->stack); i < n; i++) + { + if (i == version || !ts_stack_is_active(self->stack, i) || ts_stack_position(self->stack, i).bytes < position.bytes) + continue; + ErrorStatus status_i = ts_parser__version_status(self, i); + switch (ts_parser__compare_versions(self, status, status_i)) + { + case ErrorComparisonTakeRight: + return true; + case ErrorComparisonPreferRight: + if (ts_stack_can_merge(self->stack, i, version)) + return true; + break; + default: + break; + } + } + + return false; +} + +static bool ts_parser__call_main_lex_fn(TSParser *self, TSLexMode lex_mode) +{ + if (ts_language_is_wasm(self->language)) + { + return ts_wasm_store_call_lex_main(self->wasm_store, lex_mode.lex_state); + } + else + { + return self->language->lex_fn(&self->lexer.data, lex_mode.lex_state); + } +} + +static bool ts_parser__call_keyword_lex_fn(TSParser *self, TSLexMode lex_mode) +{ + (void)(lex_mode); + if (ts_language_is_wasm(self->language)) + { + return ts_wasm_store_call_lex_keyword(self->wasm_store, 0); + } + else + { + return self->language->keyword_lex_fn(&self->lexer.data, 0); + } +} + +static void ts_parser__external_scanner_create(TSParser *self) +{ + if (self->language && self->language->external_scanner.states) + { + if (ts_language_is_wasm(self->language)) + { + self->external_scanner_payload = (void *)(uintptr_t)ts_wasm_store_call_scanner_create(self->wasm_store); + if (ts_wasm_store_has_error(self->wasm_store)) + { + self->has_scanner_error = true; + } + } + else if (self->language->external_scanner.create) + { + self->external_scanner_payload = self->language->external_scanner.create(); + } + } +} + +static void ts_parser__external_scanner_destroy(TSParser *self) +{ + if (self->language && self->external_scanner_payload && self->language->external_scanner.destroy && + !ts_language_is_wasm(self->language)) + { + self->language->external_scanner.destroy(self->external_scanner_payload); + } + self->external_scanner_payload = NULL; +} + +static unsigned ts_parser__external_scanner_serialize(TSParser *self) +{ + if (ts_language_is_wasm(self->language)) + { + return ts_wasm_store_call_scanner_serialize(self->wasm_store, (uintptr_t)self->external_scanner_payload, self->lexer.debug_buffer); + } + else + { + uint32_t length = self->language->external_scanner.serialize(self->external_scanner_payload, self->lexer.debug_buffer); + assert(length <= TREE_SITTER_SERIALIZATION_BUFFER_SIZE); + return length; + } +} + +static void ts_parser__external_scanner_deserialize(TSParser *self, Subtree external_token) +{ + const char *data = NULL; + uint32_t length = 0; + if (external_token.ptr) + { + data = ts_external_scanner_state_data(&external_token.ptr->external_scanner_state); + length = external_token.ptr->external_scanner_state.length; + } + + if (ts_language_is_wasm(self->language)) + { + ts_wasm_store_call_scanner_deserialize(self->wasm_store, (uintptr_t)self->external_scanner_payload, data, length); + if (ts_wasm_store_has_error(self->wasm_store)) + { + self->has_scanner_error = true; + } + } + else + { + self->language->external_scanner.deserialize(self->external_scanner_payload, data, length); + } +} + +static bool ts_parser__external_scanner_scan(TSParser *self, TSStateId external_lex_state) +{ + if (ts_language_is_wasm(self->language)) + { + bool result = ts_wasm_store_call_scanner_scan(self->wasm_store, (uintptr_t)self->external_scanner_payload, + external_lex_state * self->language->external_token_count); + if (ts_wasm_store_has_error(self->wasm_store)) + { + self->has_scanner_error = true; + } + return result; + } + else + { + const bool *valid_external_tokens = ts_language_enabled_external_tokens(self->language, external_lex_state); + return self->language->external_scanner.scan(self->external_scanner_payload, &self->lexer.data, valid_external_tokens); + } +} + +static bool ts_parser__can_reuse_first_leaf(TSParser *self, TSStateId state, Subtree tree, TableEntry *table_entry) +{ + TSLexMode current_lex_mode = self->language->lex_modes[state]; + TSSymbol leaf_symbol = ts_subtree_leaf_symbol(tree); + TSStateId leaf_state = ts_subtree_leaf_parse_state(tree); + TSLexMode leaf_lex_mode = self->language->lex_modes[leaf_state]; + + // At the end of a non-terminal extra node, the lexer normally returns + // NULL, which indicates that the parser should look for a reduce action + // at symbol `0`. Avoid reusing tokens in this situation to ensure that + // the same thing happens when incrementally reparsing. + if (current_lex_mode.lex_state == (uint16_t)(-1)) + return false; + + // If the token was created in a state with the same set of lookaheads, it is reusable. + if (table_entry->action_count > 0 && memcmp(&leaf_lex_mode, ¤t_lex_mode, sizeof(TSLexMode)) == 0 && + (leaf_symbol != self->language->keyword_capture_token || (!ts_subtree_is_keyword(tree) && ts_subtree_parse_state(tree) == state))) + return true; + + // Empty tokens are not reusable in states with different lookaheads. + if (ts_subtree_size(tree).bytes == 0 && leaf_symbol != ts_builtin_sym_end) + return false; + + // If the current state allows external tokens or other tokens that conflict with this + // token, this token is not reusable. + return current_lex_mode.external_lex_state == 0 && table_entry->is_reusable; +} + +static Subtree ts_parser__lex(TSParser *self, StackVersion version, TSStateId parse_state) +{ + TSLexMode lex_mode = self->language->lex_modes[parse_state]; + if (lex_mode.lex_state == (uint16_t)-1) + { + LOG("no_lookahead_after_non_terminal_extra"); + return NULL_SUBTREE; + } + + const Length start_position = ts_stack_position(self->stack, version); + const Subtree external_token = ts_stack_last_external_token(self->stack, version); + + bool found_external_token = false; + bool error_mode = parse_state == ERROR_STATE; + bool skipped_error = false; + bool called_get_column = false; + int32_t first_error_character = 0; + Length error_start_position = length_zero(); + Length error_end_position = length_zero(); + uint32_t lookahead_end_byte = 0; + uint32_t external_scanner_state_len = 0; + bool external_scanner_state_changed = false; + ts_lexer_reset(&self->lexer, start_position); + + for (;;) + { + bool found_token = false; + Length current_position = self->lexer.current_position; + + if (lex_mode.external_lex_state != 0) + { + LOG("lex_external state:%d, row:%u, column:%u", lex_mode.external_lex_state, current_position.extent.row, + current_position.extent.column); + ts_lexer_start(&self->lexer); + ts_parser__external_scanner_deserialize(self, external_token); + found_token = ts_parser__external_scanner_scan(self, lex_mode.external_lex_state); + if (self->has_scanner_error) + return NULL_SUBTREE; + ts_lexer_finish(&self->lexer, &lookahead_end_byte); + + if (found_token) + { + external_scanner_state_len = ts_parser__external_scanner_serialize(self); + external_scanner_state_changed = !ts_external_scanner_state_eq(ts_subtree_external_scanner_state(external_token), + self->lexer.debug_buffer, external_scanner_state_len); + + // When recovering from an error, ignore any zero-length external tokens + // unless they have changed the external scanner's state. This helps to + // avoid infinite loops which could otherwise occur, because the lexer is + // looking for any possible token, instead of looking for the specific set of + // tokens that are valid in some parse state. + // + // Note that it's possible that the token end position may be *before* the + // original position of the lexer because of the way that tokens are positioned + // at included range boundaries: when a token is terminated at the start of + // an included range, it is marked as ending at the *end* of the preceding + // included range. + if (self->lexer.token_end_position.bytes <= current_position.bytes && + (error_mode || !ts_stack_has_advanced_since_error(self->stack, version)) && !external_scanner_state_changed) + { + LOG("ignore_empty_external_token symbol:%s", + SYM_NAME(self->language->external_scanner.symbol_map[self->lexer.data.result_symbol])) + found_token = false; + } + } + + if (found_token) + { + found_external_token = true; + called_get_column = self->lexer.did_get_column; + break; + } + + ts_lexer_reset(&self->lexer, current_position); + } + + LOG("lex_internal state:%d, row:%u, column:%u", lex_mode.lex_state, current_position.extent.row, current_position.extent.column); + ts_lexer_start(&self->lexer); + found_token = ts_parser__call_main_lex_fn(self, lex_mode); + ts_lexer_finish(&self->lexer, &lookahead_end_byte); + if (found_token) + break; + + if (!error_mode) + { + error_mode = true; + lex_mode = self->language->lex_modes[ERROR_STATE]; + ts_lexer_reset(&self->lexer, start_position); + continue; + } + + if (!skipped_error) + { + LOG("skip_unrecognized_character"); + skipped_error = true; + error_start_position = self->lexer.token_start_position; + error_end_position = self->lexer.token_start_position; + first_error_character = self->lexer.data.lookahead; + } + + if (self->lexer.current_position.bytes == error_end_position.bytes) + { + if (self->lexer.data.eof(&self->lexer.data)) + { + self->lexer.data.result_symbol = ts_builtin_sym_error; + break; + } + self->lexer.data.advance(&self->lexer.data, false); + } + + error_end_position = self->lexer.current_position; + } + + Subtree result; + if (skipped_error) + { + Length padding = length_sub(error_start_position, start_position); + Length size = length_sub(error_end_position, error_start_position); + uint32_t lookahead_bytes = lookahead_end_byte - error_end_position.bytes; + result = ts_subtree_new_error(&self->tree_pool, first_error_character, padding, size, lookahead_bytes, parse_state, self->language); + } + else + { + bool is_keyword = false; + TSSymbol symbol = self->lexer.data.result_symbol; + Length padding = length_sub(self->lexer.token_start_position, start_position); + Length size = length_sub(self->lexer.token_end_position, self->lexer.token_start_position); + uint32_t lookahead_bytes = lookahead_end_byte - self->lexer.token_end_position.bytes; + + if (found_external_token) + { + symbol = self->language->external_scanner.symbol_map[symbol]; + } + else if (symbol == self->language->keyword_capture_token && symbol != 0) + { + uint32_t end_byte = self->lexer.token_end_position.bytes; + ts_lexer_reset(&self->lexer, self->lexer.token_start_position); + ts_lexer_start(&self->lexer); + + is_keyword = ts_parser__call_keyword_lex_fn(self, lex_mode); + + if (is_keyword && self->lexer.token_end_position.bytes == end_byte && + ts_language_has_actions(self->language, parse_state, self->lexer.data.result_symbol)) + { + symbol = self->lexer.data.result_symbol; + } + } + + result = ts_subtree_new_leaf(&self->tree_pool, symbol, padding, size, lookahead_bytes, parse_state, found_external_token, + called_get_column, is_keyword, self->language); + + if (found_external_token) + { + MutableSubtree mut_result = ts_subtree_to_mut_unsafe(result); + ts_external_scanner_state_init(&mut_result.ptr->external_scanner_state, self->lexer.debug_buffer, external_scanner_state_len); + mut_result.ptr->has_external_scanner_state_change = external_scanner_state_changed; + } + } + + LOG_LOOKAHEAD(SYM_NAME(ts_subtree_symbol(result)), ts_subtree_total_size(result).bytes); + return result; +} + +static Subtree ts_parser__get_cached_token(TSParser *self, TSStateId state, size_t position, Subtree last_external_token, + TableEntry *table_entry) +{ + TokenCache *cache = &self->token_cache; + if (cache->token.ptr && cache->byte_index == position && + ts_subtree_external_scanner_state_eq(cache->last_external_token, last_external_token)) + { + ts_language_table_entry(self->language, state, ts_subtree_symbol(cache->token), table_entry); + if (ts_parser__can_reuse_first_leaf(self, state, cache->token, table_entry)) + { + ts_subtree_retain(cache->token); + return cache->token; + } + } + return NULL_SUBTREE; +} + +static void ts_parser__set_cached_token(TSParser *self, uint32_t byte_index, Subtree last_external_token, Subtree token) +{ + TokenCache *cache = &self->token_cache; + if (token.ptr) + ts_subtree_retain(token); + if (last_external_token.ptr) + ts_subtree_retain(last_external_token); + if (cache->token.ptr) + ts_subtree_release(&self->tree_pool, cache->token); + if (cache->last_external_token.ptr) + ts_subtree_release(&self->tree_pool, cache->last_external_token); + cache->token = token; + cache->byte_index = byte_index; + cache->last_external_token = last_external_token; +} + +static bool ts_parser__has_included_range_difference(const TSParser *self, uint32_t start_position, uint32_t end_position) +{ + return ts_range_array_intersects(&self->included_range_differences, self->included_range_difference_index, start_position, + end_position); +} + +static Subtree ts_parser__reuse_node(TSParser *self, StackVersion version, TSStateId *state, uint32_t position, Subtree last_external_token, + TableEntry *table_entry) +{ + Subtree result; + while ((result = reusable_node_tree(&self->reusable_node)).ptr) + { + uint32_t byte_offset = reusable_node_byte_offset(&self->reusable_node); + uint32_t end_byte_offset = byte_offset + ts_subtree_total_bytes(result); + + // Do not reuse an EOF node if the included ranges array has changes + // later on in the file. + if (ts_subtree_is_eof(result)) + end_byte_offset = UINT32_MAX; + + if (byte_offset > position) + { + LOG("before_reusable_node symbol:%s", TREE_NAME(result)); + break; + } + + if (byte_offset < position) + { + LOG("past_reusable_node symbol:%s", TREE_NAME(result)); + if (end_byte_offset <= position || !reusable_node_descend(&self->reusable_node)) + { + reusable_node_advance(&self->reusable_node); + } + continue; + } + + if (!ts_subtree_external_scanner_state_eq(self->reusable_node.last_external_token, last_external_token)) + { + LOG("reusable_node_has_different_external_scanner_state symbol:%s", TREE_NAME(result)); + reusable_node_advance(&self->reusable_node); + continue; + } + + const char *reason = NULL; + if (ts_subtree_has_changes(result)) + { + reason = "has_changes"; + } + else if (ts_subtree_is_error(result)) + { + reason = "is_error"; + } + else if (ts_subtree_missing(result)) + { + reason = "is_missing"; + } + else if (ts_subtree_is_fragile(result)) + { + reason = "is_fragile"; + } + else if (ts_parser__has_included_range_difference(self, byte_offset, end_byte_offset)) + { + reason = "contains_different_included_range"; + } + + if (reason) + { + LOG("cant_reuse_node_%s tree:%s", reason, TREE_NAME(result)); + if (!reusable_node_descend(&self->reusable_node)) + { + reusable_node_advance(&self->reusable_node); + ts_parser__breakdown_top_of_stack(self, version); + *state = ts_stack_state(self->stack, version); + } + continue; + } + + TSSymbol leaf_symbol = ts_subtree_leaf_symbol(result); + ts_language_table_entry(self->language, *state, leaf_symbol, table_entry); + if (!ts_parser__can_reuse_first_leaf(self, *state, result, table_entry)) + { + LOG("cant_reuse_node symbol:%s, first_leaf_symbol:%s", TREE_NAME(result), SYM_NAME(leaf_symbol)); + reusable_node_advance_past_leaf(&self->reusable_node); + break; + } + + LOG("reuse_node symbol:%s", TREE_NAME(result)); + ts_subtree_retain(result); + return result; + } + + return NULL_SUBTREE; +} + +// Determine if a given tree should be replaced by an alternative tree. +// +// The decision is based on the trees' error costs (if any), their dynamic precedence, +// and finally, as a default, by a recursive comparison of the trees' symbols. +static bool ts_parser__select_tree(TSParser *self, Subtree left, Subtree right) +{ + if (!left.ptr) + return true; + if (!right.ptr) + return false; + + if (ts_subtree_error_cost(right) < ts_subtree_error_cost(left)) + { + LOG("select_smaller_error symbol:%s, over_symbol:%s", TREE_NAME(right), TREE_NAME(left)); + return true; + } + + if (ts_subtree_error_cost(left) < ts_subtree_error_cost(right)) + { + LOG("select_smaller_error symbol:%s, over_symbol:%s", TREE_NAME(left), TREE_NAME(right)); + return false; + } + + if (ts_subtree_dynamic_precedence(right) > ts_subtree_dynamic_precedence(left)) + { + LOG("select_higher_precedence symbol:%s, prec:%" PRId32 ", over_symbol:%s, other_prec:%" PRId32, TREE_NAME(right), + ts_subtree_dynamic_precedence(right), TREE_NAME(left), ts_subtree_dynamic_precedence(left)); + return true; + } + + if (ts_subtree_dynamic_precedence(left) > ts_subtree_dynamic_precedence(right)) + { + LOG("select_higher_precedence symbol:%s, prec:%" PRId32 ", over_symbol:%s, other_prec:%" PRId32, TREE_NAME(left), + ts_subtree_dynamic_precedence(left), TREE_NAME(right), ts_subtree_dynamic_precedence(right)); + return false; + } + + if (ts_subtree_error_cost(left) > 0) + return true; + + int comparison = ts_subtree_compare(left, right, &self->tree_pool); + switch (comparison) + { + case -1: + LOG("select_earlier symbol:%s, over_symbol:%s", TREE_NAME(left), TREE_NAME(right)); + return false; + break; + case 1: + LOG("select_earlier symbol:%s, over_symbol:%s", TREE_NAME(right), TREE_NAME(left)); + return true; + default: + LOG("select_existing symbol:%s, over_symbol:%s", TREE_NAME(left), TREE_NAME(right)); + return false; + } +} + +// Determine if a given tree's children should be replaced by an alternative +// array of children. +static bool ts_parser__select_children(TSParser *self, Subtree left, const SubtreeArray *children) +{ + array_assign(&self->scratch_trees, children); + + // Create a temporary subtree using the scratch trees array. This node does + // not perform any allocation except for possibly growing the array to make + // room for its own heap data. The scratch tree is never explicitly released, + // so the same 'scratch trees' array can be reused again later. + MutableSubtree scratch_tree = ts_subtree_new_node(ts_subtree_symbol(left), &self->scratch_trees, 0, self->language); + + return ts_parser__select_tree(self, left, ts_subtree_from_mut(scratch_tree)); +} + +static void ts_parser__shift(TSParser *self, StackVersion version, TSStateId state, Subtree lookahead, bool extra) +{ + bool is_leaf = ts_subtree_child_count(lookahead) == 0; + Subtree subtree_to_push = lookahead; + if (extra != ts_subtree_extra(lookahead) && is_leaf) + { + MutableSubtree result = ts_subtree_make_mut(&self->tree_pool, lookahead); + ts_subtree_set_extra(&result, extra); + subtree_to_push = ts_subtree_from_mut(result); + } + + ts_stack_push(self->stack, version, subtree_to_push, !is_leaf, state); + if (ts_subtree_has_external_tokens(subtree_to_push)) + { + ts_stack_set_last_external_token(self->stack, version, ts_subtree_last_external_token(subtree_to_push)); + } +} + +static StackVersion ts_parser__reduce(TSParser *self, StackVersion version, TSSymbol symbol, uint32_t count, int dynamic_precedence, + uint16_t production_id, bool is_fragile, bool end_of_non_terminal_extra) +{ + uint32_t initial_version_count = ts_stack_version_count(self->stack); + + // Pop the given number of nodes from the given version of the parse stack. + // If stack versions have previously merged, then there may be more than one + // path back through the stack. For each path, create a new parent node to + // contain the popped children, and push it onto the stack in place of the + // children. + StackSliceArray pop = ts_stack_pop_count(self->stack, version, count); + uint32_t removed_version_count = 0; + for (uint32_t i = 0; i < pop.size; i++) + { + StackSlice slice = pop.contents[i]; + StackVersion slice_version = slice.version - removed_version_count; + + // This is where new versions are added to the parse stack. The versions + // will all be sorted and truncated at the end of the outer parsing loop. + // Allow the maximum version count to be temporarily exceeded, but only + // by a limited threshold. + if (slice_version > MAX_VERSION_COUNT + MAX_VERSION_COUNT_OVERFLOW) + { + ts_stack_remove_version(self->stack, slice_version); + ts_subtree_array_delete(&self->tree_pool, &slice.subtrees); + removed_version_count++; + while (i + 1 < pop.size) + { + StackSlice next_slice = pop.contents[i + 1]; + if (next_slice.version != slice.version) + break; + ts_subtree_array_delete(&self->tree_pool, &next_slice.subtrees); + i++; + } + continue; + } + + // Extra tokens on top of the stack should not be included in this new parent + // node. They will be re-pushed onto the stack after the parent node is + // created and pushed. + SubtreeArray children = slice.subtrees; + ts_subtree_array_remove_trailing_extras(&children, &self->trailing_extras); + + MutableSubtree parent = ts_subtree_new_node(symbol, &children, production_id, self->language); + + // This pop operation may have caused multiple stack versions to collapse + // into one, because they all diverged from a common state. In that case, + // choose one of the arrays of trees to be the parent node's children, and + // delete the rest of the tree arrays. + while (i + 1 < pop.size) + { + StackSlice next_slice = pop.contents[i + 1]; + if (next_slice.version != slice.version) + break; + i++; + + SubtreeArray next_slice_children = next_slice.subtrees; + ts_subtree_array_remove_trailing_extras(&next_slice_children, &self->trailing_extras2); + + if (ts_parser__select_children(self, ts_subtree_from_mut(parent), &next_slice_children)) + { + ts_subtree_array_clear(&self->tree_pool, &self->trailing_extras); + ts_subtree_release(&self->tree_pool, ts_subtree_from_mut(parent)); + array_swap(&self->trailing_extras, &self->trailing_extras2); + parent = ts_subtree_new_node(symbol, &next_slice_children, production_id, self->language); + } + else + { + array_clear(&self->trailing_extras2); + ts_subtree_array_delete(&self->tree_pool, &next_slice.subtrees); + } + } + + TSStateId state = ts_stack_state(self->stack, slice_version); + TSStateId next_state = ts_language_next_state(self->language, state, symbol); + if (end_of_non_terminal_extra && next_state == state) + { + parent.ptr->extra = true; + } + if (is_fragile || pop.size > 1 || initial_version_count > 1) + { + parent.ptr->fragile_left = true; + parent.ptr->fragile_right = true; + parent.ptr->parse_state = TS_TREE_STATE_NONE; + } + else + { + parent.ptr->parse_state = state; + } + parent.ptr->dynamic_precedence += dynamic_precedence; + + // Push the parent node onto the stack, along with any extra tokens that + // were previously on top of the stack. + ts_stack_push(self->stack, slice_version, ts_subtree_from_mut(parent), false, next_state); + for (uint32_t j = 0; j < self->trailing_extras.size; j++) + { + ts_stack_push(self->stack, slice_version, self->trailing_extras.contents[j], false, next_state); + } + + for (StackVersion j = 0; j < slice_version; j++) + { + if (j == version) + continue; + if (ts_stack_merge(self->stack, j, slice_version)) + { + removed_version_count++; + break; + } + } + } + + // Return the first new stack version that was created. + return ts_stack_version_count(self->stack) > initial_version_count ? initial_version_count : STACK_VERSION_NONE; +} + +static void ts_parser__accept(TSParser *self, StackVersion version, Subtree lookahead) +{ + assert(ts_subtree_is_eof(lookahead)); + ts_stack_push(self->stack, version, lookahead, false, 1); + + StackSliceArray pop = ts_stack_pop_all(self->stack, version); + for (uint32_t i = 0; i < pop.size; i++) + { + SubtreeArray trees = pop.contents[i].subtrees; + + Subtree root = NULL_SUBTREE; + for (uint32_t j = trees.size - 1; j + 1 > 0; j--) + { + Subtree tree = trees.contents[j]; + if (!ts_subtree_extra(tree)) + { + assert(!tree.data.is_inline); + uint32_t child_count = ts_subtree_child_count(tree); + const Subtree *children = ts_subtree_children(tree); + for (uint32_t k = 0; k < child_count; k++) + { + ts_subtree_retain(children[k]); + } + array_splice(&trees, j, 1, child_count, children); + root = ts_subtree_from_mut(ts_subtree_new_node(ts_subtree_symbol(tree), &trees, tree.ptr->production_id, self->language)); + ts_subtree_release(&self->tree_pool, tree); + break; + } + } + + assert(root.ptr); + self->accept_count++; + + if (self->finished_tree.ptr) + { + if (ts_parser__select_tree(self, self->finished_tree, root)) + { + ts_subtree_release(&self->tree_pool, self->finished_tree); + self->finished_tree = root; + } + else + { + ts_subtree_release(&self->tree_pool, root); + } + } + else + { + self->finished_tree = root; + } + } + + ts_stack_remove_version(self->stack, pop.contents[0].version); + ts_stack_halt(self->stack, version); +} + +static bool ts_parser__do_all_potential_reductions(TSParser *self, StackVersion starting_version, TSSymbol lookahead_symbol) +{ + uint32_t initial_version_count = ts_stack_version_count(self->stack); + + bool can_shift_lookahead_symbol = false; + StackVersion version = starting_version; + for (unsigned i = 0; true; i++) + { + uint32_t version_count = ts_stack_version_count(self->stack); + if (version >= version_count) + break; + + bool merged = false; + for (StackVersion j = initial_version_count; j < version; j++) + { + if (ts_stack_merge(self->stack, j, version)) + { + merged = true; + break; + } + } + if (merged) + continue; + + TSStateId state = ts_stack_state(self->stack, version); + bool has_shift_action = false; + array_clear(&self->reduce_actions); + + TSSymbol first_symbol, end_symbol; + if (lookahead_symbol != 0) + { + first_symbol = lookahead_symbol; + end_symbol = lookahead_symbol + 1; + } + else + { + first_symbol = 1; + end_symbol = self->language->token_count; + } + + for (TSSymbol symbol = first_symbol; symbol < end_symbol; symbol++) + { + TableEntry entry; + ts_language_table_entry(self->language, state, symbol, &entry); + for (uint32_t j = 0; j < entry.action_count; j++) + { + TSParseAction action = entry.actions[j]; + switch (action.type) + { + case TSParseActionTypeShift: + case TSParseActionTypeRecover: + if (!action.shift.extra && !action.shift.repetition) + has_shift_action = true; + break; + case TSParseActionTypeReduce: + if (action.reduce.child_count > 0) + ts_reduce_action_set_add(&self->reduce_actions, (ReduceAction){ + .symbol = action.reduce.symbol, + .count = action.reduce.child_count, + .dynamic_precedence = action.reduce.dynamic_precedence, + .production_id = action.reduce.production_id, + }); + break; + default: + break; + } + } + } + + StackVersion reduction_version = STACK_VERSION_NONE; + for (uint32_t j = 0; j < self->reduce_actions.size; j++) + { + ReduceAction action = self->reduce_actions.contents[j]; + + reduction_version = + ts_parser__reduce(self, version, action.symbol, action.count, action.dynamic_precedence, action.production_id, true, false); + } + + if (has_shift_action) + { + can_shift_lookahead_symbol = true; + } + else if (reduction_version != STACK_VERSION_NONE && i < MAX_VERSION_COUNT) + { + ts_stack_renumber_version(self->stack, reduction_version, version); + continue; + } + else if (lookahead_symbol != 0) + { + ts_stack_remove_version(self->stack, version); + } + + if (version == starting_version) + { + version = version_count; + } + else + { + version++; + } + } + + return can_shift_lookahead_symbol; +} + +static bool ts_parser__recover_to_state(TSParser *self, StackVersion version, unsigned depth, TSStateId goal_state) +{ + StackSliceArray pop = ts_stack_pop_count(self->stack, version, depth); + StackVersion previous_version = STACK_VERSION_NONE; + + for (unsigned i = 0; i < pop.size; i++) + { + StackSlice slice = pop.contents[i]; + + if (slice.version == previous_version) + { + ts_subtree_array_delete(&self->tree_pool, &slice.subtrees); + array_erase(&pop, i--); + continue; + } + + if (ts_stack_state(self->stack, slice.version) != goal_state) + { + ts_stack_halt(self->stack, slice.version); + ts_subtree_array_delete(&self->tree_pool, &slice.subtrees); + array_erase(&pop, i--); + continue; + } + + SubtreeArray error_trees = ts_stack_pop_error(self->stack, slice.version); + if (error_trees.size > 0) + { + assert(error_trees.size == 1); + Subtree error_tree = error_trees.contents[0]; + uint32_t error_child_count = ts_subtree_child_count(error_tree); + if (error_child_count > 0) + { + array_splice(&slice.subtrees, 0, 0, error_child_count, ts_subtree_children(error_tree)); + for (unsigned j = 0; j < error_child_count; j++) + { + ts_subtree_retain(slice.subtrees.contents[j]); + } + } + ts_subtree_array_delete(&self->tree_pool, &error_trees); + } + + ts_subtree_array_remove_trailing_extras(&slice.subtrees, &self->trailing_extras); + + if (slice.subtrees.size > 0) + { + Subtree error = ts_subtree_new_error_node(&slice.subtrees, true, self->language); + ts_stack_push(self->stack, slice.version, error, false, goal_state); + } + else + { + array_delete(&slice.subtrees); + } + + for (unsigned j = 0; j < self->trailing_extras.size; j++) + { + Subtree tree = self->trailing_extras.contents[j]; + ts_stack_push(self->stack, slice.version, tree, false, goal_state); + } + + previous_version = slice.version; + } + + return previous_version != STACK_VERSION_NONE; +} + +static void ts_parser__recover(TSParser *self, StackVersion version, Subtree lookahead) +{ + bool did_recover = false; + unsigned previous_version_count = ts_stack_version_count(self->stack); + Length position = ts_stack_position(self->stack, version); + StackSummary *summary = ts_stack_get_summary(self->stack, version); + unsigned node_count_since_error = ts_stack_node_count_since_error(self->stack, version); + unsigned current_error_cost = ts_stack_error_cost(self->stack, version); + + // When the parser is in the error state, there are two strategies for recovering with a + // given lookahead token: + // 1. Find a previous state on the stack in which that lookahead token would be valid. Then, + // create a new stack version that is in that state again. This entails popping all of the + // subtrees that have been pushed onto the stack since that previous state, and wrapping + // them in an ERROR node. + // 2. Wrap the lookahead token in an ERROR node, push that ERROR node onto the stack, and + // move on to the next lookahead token, remaining in the error state. + // + // First, try the strategy 1. Upon entering the error state, the parser recorded a summary + // of the previous parse states and their depths. Look at each state in the summary, to see + // if the current lookahead token would be valid in that state. + if (summary && !ts_subtree_is_error(lookahead)) + { + for (unsigned i = 0; i < summary->size; i++) + { + StackSummaryEntry entry = summary->contents[i]; + + if (entry.state == ERROR_STATE) + continue; + if (entry.position.bytes == position.bytes) + continue; + unsigned depth = entry.depth; + if (node_count_since_error > 0) + depth++; + + // Do not recover in ways that create redundant stack versions. + bool would_merge = false; + for (unsigned j = 0; j < previous_version_count; j++) + { + if (ts_stack_state(self->stack, j) == entry.state && ts_stack_position(self->stack, j).bytes == position.bytes) + { + would_merge = true; + break; + } + } + if (would_merge) + continue; + + // Do not recover if the result would clearly be worse than some existing stack version. + unsigned new_cost = current_error_cost + entry.depth * ERROR_COST_PER_SKIPPED_TREE + + (position.bytes - entry.position.bytes) * ERROR_COST_PER_SKIPPED_CHAR + + (position.extent.row - entry.position.extent.row) * ERROR_COST_PER_SKIPPED_LINE; + if (ts_parser__better_version_exists(self, version, false, new_cost)) + break; + + // If the current lookahead token is valid in some previous state, recover to that state. + // Then stop looking for further recoveries. + if (ts_language_has_actions(self->language, entry.state, ts_subtree_symbol(lookahead))) + { + if (ts_parser__recover_to_state(self, version, depth, entry.state)) + { + did_recover = true; + LOG("recover_to_previous state:%u, depth:%u", entry.state, depth); + LOG_STACK(); + break; + } + } + } + } + + // In the process of attempting to recover, some stack versions may have been created + // and subsequently halted. Remove those versions. + for (unsigned i = previous_version_count; i < ts_stack_version_count(self->stack); i++) + { + if (!ts_stack_is_active(self->stack, i)) + { + ts_stack_remove_version(self->stack, i--); + } + } + + // If strategy 1 succeeded, a new stack version will have been created which is able to handle + // the current lookahead token. Now, in addition, try strategy 2 described above: skip the + // current lookahead token by wrapping it in an ERROR node. + + // Don't pursue this additional strategy if there are already too many stack versions. + if (did_recover && ts_stack_version_count(self->stack) > MAX_VERSION_COUNT) + { + ts_stack_halt(self->stack, version); + ts_subtree_release(&self->tree_pool, lookahead); + return; + } + + if (did_recover && ts_subtree_has_external_scanner_state_change(lookahead)) + { + ts_stack_halt(self->stack, version); + ts_subtree_release(&self->tree_pool, lookahead); + return; + } + + // If the parser is still in the error state at the end of the file, just wrap everything + // in an ERROR node and terminate. + if (ts_subtree_is_eof(lookahead)) + { + LOG("recover_eof"); + SubtreeArray children = array_new(); + Subtree parent = ts_subtree_new_error_node(&children, false, self->language); + ts_stack_push(self->stack, version, parent, false, 1); + ts_parser__accept(self, version, lookahead); + return; + } + + // Do not recover if the result would clearly be worse than some existing stack version. + unsigned new_cost = current_error_cost + ERROR_COST_PER_SKIPPED_TREE + ts_subtree_total_bytes(lookahead) * ERROR_COST_PER_SKIPPED_CHAR + + ts_subtree_total_size(lookahead).extent.row * ERROR_COST_PER_SKIPPED_LINE; + if (ts_parser__better_version_exists(self, version, false, new_cost)) + { + ts_stack_halt(self->stack, version); + ts_subtree_release(&self->tree_pool, lookahead); + return; + } + + // If the current lookahead token is an extra token, mark it as extra. This means it won't + // be counted in error cost calculations. + unsigned n; + const TSParseAction *actions = ts_language_actions(self->language, 1, ts_subtree_symbol(lookahead), &n); + if (n > 0 && actions[n - 1].type == TSParseActionTypeShift && actions[n - 1].shift.extra) + { + MutableSubtree mutable_lookahead = ts_subtree_make_mut(&self->tree_pool, lookahead); + ts_subtree_set_extra(&mutable_lookahead, true); + lookahead = ts_subtree_from_mut(mutable_lookahead); + } + + // Wrap the lookahead token in an ERROR. + LOG("skip_token symbol:%s", TREE_NAME(lookahead)); + SubtreeArray children = array_new(); + array_reserve(&children, 1); + array_push(&children, lookahead); + MutableSubtree error_repeat = ts_subtree_new_node(ts_builtin_sym_error_repeat, &children, 0, self->language); + + // If other tokens have already been skipped, so there is already an ERROR at the top of the + // stack, then pop that ERROR off the stack and wrap the two ERRORs together into one larger + // ERROR. + if (node_count_since_error > 0) + { + StackSliceArray pop = ts_stack_pop_count(self->stack, version, 1); + + // TODO: Figure out how to make this condition occur. + // See https://github.com/atom/atom/issues/18450#issuecomment-439579778 + // If multiple stack versions have merged at this point, just pick one of the errors + // arbitrarily and discard the rest. + if (pop.size > 1) + { + for (unsigned i = 1; i < pop.size; i++) + { + ts_subtree_array_delete(&self->tree_pool, &pop.contents[i].subtrees); + } + while (ts_stack_version_count(self->stack) > pop.contents[0].version + 1) + { + ts_stack_remove_version(self->stack, pop.contents[0].version + 1); + } + } + + ts_stack_renumber_version(self->stack, pop.contents[0].version, version); + array_push(&pop.contents[0].subtrees, ts_subtree_from_mut(error_repeat)); + error_repeat = ts_subtree_new_node(ts_builtin_sym_error_repeat, &pop.contents[0].subtrees, 0, self->language); + } + + // Push the new ERROR onto the stack. + ts_stack_push(self->stack, version, ts_subtree_from_mut(error_repeat), false, ERROR_STATE); + if (ts_subtree_has_external_tokens(lookahead)) + { + ts_stack_set_last_external_token(self->stack, version, ts_subtree_last_external_token(lookahead)); + } +} + +static void ts_parser__handle_error(TSParser *self, StackVersion version, Subtree lookahead) +{ + uint32_t previous_version_count = ts_stack_version_count(self->stack); + + // Perform any reductions that can happen in this state, regardless of the lookahead. After + // skipping one or more invalid tokens, the parser might find a token that would have allowed + // a reduction to take place. + ts_parser__do_all_potential_reductions(self, version, 0); + uint32_t version_count = ts_stack_version_count(self->stack); + Length position = ts_stack_position(self->stack, version); + + // Push a discontinuity onto the stack. Merge all of the stack versions that + // were created in the previous step. + bool did_insert_missing_token = false; + for (StackVersion v = version; v < version_count;) + { + if (!did_insert_missing_token) + { + TSStateId state = ts_stack_state(self->stack, v); + for (TSSymbol missing_symbol = 1; missing_symbol < (uint16_t)self->language->token_count; missing_symbol++) + { + TSStateId state_after_missing_symbol = ts_language_next_state(self->language, state, missing_symbol); + if (state_after_missing_symbol == 0 || state_after_missing_symbol == state) + { + continue; + } + + if (ts_language_has_reduce_action(self->language, state_after_missing_symbol, ts_subtree_leaf_symbol(lookahead))) + { + // In case the parser is currently outside of any included range, the lexer will + // snap to the beginning of the next included range. The missing token's padding + // must be assigned to position it within the next included range. + ts_lexer_reset(&self->lexer, position); + ts_lexer_mark_end(&self->lexer); + Length padding = length_sub(self->lexer.token_end_position, position); + uint32_t lookahead_bytes = ts_subtree_total_bytes(lookahead) + ts_subtree_lookahead_bytes(lookahead); + + StackVersion version_with_missing_tree = ts_stack_copy_version(self->stack, v); + Subtree missing_tree = + ts_subtree_new_missing_leaf(&self->tree_pool, missing_symbol, padding, lookahead_bytes, self->language); + ts_stack_push(self->stack, version_with_missing_tree, missing_tree, false, state_after_missing_symbol); + + if (ts_parser__do_all_potential_reductions(self, version_with_missing_tree, ts_subtree_leaf_symbol(lookahead))) + { + LOG("recover_with_missing symbol:%s, state:%u", SYM_NAME(missing_symbol), + ts_stack_state(self->stack, version_with_missing_tree)); + did_insert_missing_token = true; + break; + } + } + } + } + + ts_stack_push(self->stack, v, NULL_SUBTREE, false, ERROR_STATE); + v = (v == version) ? previous_version_count : v + 1; + } + + for (unsigned i = previous_version_count; i < version_count; i++) + { + bool did_merge = ts_stack_merge(self->stack, version, previous_version_count); + assert(did_merge); + (void)did_merge; // fix warning/error with clang -Os + } + + ts_stack_record_summary(self->stack, version, MAX_SUMMARY_DEPTH); + + // Begin recovery with the current lookahead node, rather than waiting for the + // next turn of the parse loop. This ensures that the tree accounts for the + // current lookahead token's "lookahead bytes" value, which describes how far + // the lexer needed to look ahead beyond the content of the token in order to + // recognize it. + if (ts_subtree_child_count(lookahead) > 0) + { + ts_parser__breakdown_lookahead(self, &lookahead, ERROR_STATE, &self->reusable_node); + } + ts_parser__recover(self, version, lookahead); + + LOG_STACK(); +} + +static bool ts_parser__advance(TSParser *self, StackVersion version, bool allow_node_reuse) +{ + TSStateId state = ts_stack_state(self->stack, version); + uint32_t position = ts_stack_position(self->stack, version).bytes; + Subtree last_external_token = ts_stack_last_external_token(self->stack, version); + + bool did_reuse = true; + Subtree lookahead = NULL_SUBTREE; + TableEntry table_entry = {.action_count = 0}; + + // If possible, reuse a node from the previous syntax tree. + if (allow_node_reuse) + { + lookahead = ts_parser__reuse_node(self, version, &state, position, last_external_token, &table_entry); + } + + // If no node from the previous syntax tree could be reused, then try to + // reuse the token previously returned by the lexer. + if (!lookahead.ptr) + { + did_reuse = false; + lookahead = ts_parser__get_cached_token(self, state, position, last_external_token, &table_entry); + } + + bool needs_lex = !lookahead.ptr; + for (;;) + { + // Otherwise, re-run the lexer. + if (needs_lex) + { + needs_lex = false; + lookahead = ts_parser__lex(self, version, state); + if (self->has_scanner_error) + return false; + + if (lookahead.ptr) + { + ts_parser__set_cached_token(self, position, last_external_token, lookahead); + ts_language_table_entry(self->language, state, ts_subtree_symbol(lookahead), &table_entry); + } + + // When parsing a non-terminal extra, a null lookahead indicates the + // end of the rule. The reduction is stored in the EOF table entry. + // After the reduction, the lexer needs to be run again. + else + { + ts_language_table_entry(self->language, state, ts_builtin_sym_end, &table_entry); + } + } + + // If a cancellation flag or a timeout was provided, then check every + // time a fixed number of parse actions has been processed. + if (++self->operation_count == OP_COUNT_PER_TIMEOUT_CHECK) + { + self->operation_count = 0; + } + if (self->operation_count == 0 && ((self->cancellation_flag && atomic_load(self->cancellation_flag)) || + (!clock_is_null(self->end_clock) && clock_is_gt(clock_now(), self->end_clock)))) + { + if (lookahead.ptr) + { + ts_subtree_release(&self->tree_pool, lookahead); + } + return false; + } + + // Process each parse action for the current lookahead token in + // the current state. If there are multiple actions, then this is + // an ambiguous state. REDUCE actions always create a new stack + // version, whereas SHIFT actions update the existing stack version + // and terminate this loop. + StackVersion last_reduction_version = STACK_VERSION_NONE; + for (uint32_t i = 0; i < table_entry.action_count; i++) + { + TSParseAction action = table_entry.actions[i]; + + switch (action.type) + { + case TSParseActionTypeShift: { + if (action.shift.repetition) + break; + TSStateId next_state; + if (action.shift.extra) + { + next_state = state; + LOG("shift_extra"); + } + else + { + next_state = action.shift.state; + LOG("shift state:%u", next_state); + } + + if (ts_subtree_child_count(lookahead) > 0) + { + ts_parser__breakdown_lookahead(self, &lookahead, state, &self->reusable_node); + next_state = ts_language_next_state(self->language, state, ts_subtree_symbol(lookahead)); + } + + ts_parser__shift(self, version, next_state, lookahead, action.shift.extra); + if (did_reuse) + reusable_node_advance(&self->reusable_node); + return true; + } + + case TSParseActionTypeReduce: { + bool is_fragile = table_entry.action_count > 1; + bool end_of_non_terminal_extra = lookahead.ptr == NULL; + LOG("reduce sym:%s, child_count:%u", SYM_NAME(action.reduce.symbol), action.reduce.child_count); + StackVersion reduction_version = + ts_parser__reduce(self, version, action.reduce.symbol, action.reduce.child_count, action.reduce.dynamic_precedence, + action.reduce.production_id, is_fragile, end_of_non_terminal_extra); + if (reduction_version != STACK_VERSION_NONE) + { + last_reduction_version = reduction_version; + } + break; + } + + case TSParseActionTypeAccept: { + LOG("accept"); + ts_parser__accept(self, version, lookahead); + return true; + } + + case TSParseActionTypeRecover: { + if (ts_subtree_child_count(lookahead) > 0) + { + ts_parser__breakdown_lookahead(self, &lookahead, ERROR_STATE, &self->reusable_node); + } + + ts_parser__recover(self, version, lookahead); + if (did_reuse) + reusable_node_advance(&self->reusable_node); + return true; + } + } + } + + // If a reduction was performed, then replace the current stack version + // with one of the stack versions created by a reduction, and continue + // processing this version of the stack with the same lookahead symbol. + if (last_reduction_version != STACK_VERSION_NONE) + { + ts_stack_renumber_version(self->stack, last_reduction_version, version); + LOG_STACK(); + state = ts_stack_state(self->stack, version); + + // At the end of a non-terminal extra rule, the lexer will return a + // null subtree, because the parser needs to perform a fixed reduction + // regardless of the lookahead node. After performing that reduction, + // (and completing the non-terminal extra rule) run the lexer again based + // on the current parse state. + if (!lookahead.ptr) + { + needs_lex = true; + } + else + { + ts_language_table_entry(self->language, state, ts_subtree_leaf_symbol(lookahead), &table_entry); + } + + continue; + } + + // A non-terminal extra rule was reduced and merged into an existing + // stack version. This version can be discarded. + if (!lookahead.ptr) + { + ts_stack_halt(self->stack, version); + return true; + } + + // If there were no parse actions for the current lookahead token, then + // it is not valid in this state. If the current lookahead token is a + // keyword, then switch to treating it as the normal word token if that + // token is valid in this state. + if (ts_subtree_is_keyword(lookahead) && ts_subtree_symbol(lookahead) != self->language->keyword_capture_token) + { + ts_language_table_entry(self->language, state, self->language->keyword_capture_token, &table_entry); + if (table_entry.action_count > 0) + { + LOG("switch from_keyword:%s, to_word_token:%s", TREE_NAME(lookahead), SYM_NAME(self->language->keyword_capture_token)); + + MutableSubtree mutable_lookahead = ts_subtree_make_mut(&self->tree_pool, lookahead); + ts_subtree_set_symbol(&mutable_lookahead, self->language->keyword_capture_token, self->language); + lookahead = ts_subtree_from_mut(mutable_lookahead); + continue; + } + } + + // If the current lookahead token is not valid and the parser is + // already in the error state, restart the error recovery process. + // TODO - can this be unified with the other `RECOVER` case above? + if (state == ERROR_STATE) + { + ts_parser__recover(self, version, lookahead); + return true; + } + + // If the current lookahead token is not valid and the previous + // subtree on the stack was reused from an old tree, it isn't actually + // valid to reuse it. Remove it from the stack, and in its place, + // push each of its children. Then try again to process the current + // lookahead. + if (ts_parser__breakdown_top_of_stack(self, version)) + { + state = ts_stack_state(self->stack, version); + ts_subtree_release(&self->tree_pool, lookahead); + needs_lex = true; + continue; + } + + // At this point, the current lookahead token is definitely not valid + // for this parse stack version. Mark this version as paused and continue + // processing any other stack versions that might exist. If some other + // version advances successfully, then this version can simply be removed. + // But if all versions end up paused, then error recovery is needed. + LOG("detect_error"); + ts_stack_pause(self->stack, version, lookahead); + return true; + } +} + +static unsigned ts_parser__condense_stack(TSParser *self) +{ + bool made_changes = false; + unsigned min_error_cost = UINT_MAX; + for (StackVersion i = 0; i < ts_stack_version_count(self->stack); i++) + { + // Prune any versions that have been marked for removal. + if (ts_stack_is_halted(self->stack, i)) + { + ts_stack_remove_version(self->stack, i); + i--; + continue; + } + + // Keep track of the minimum error cost of any stack version so + // that it can be returned. + ErrorStatus status_i = ts_parser__version_status(self, i); + if (!status_i.is_in_error && status_i.cost < min_error_cost) + { + min_error_cost = status_i.cost; + } + + // Examine each pair of stack versions, removing any versions that + // are clearly worse than another version. Ensure that the versions + // are ordered from most promising to least promising. + for (StackVersion j = 0; j < i; j++) + { + ErrorStatus status_j = ts_parser__version_status(self, j); + + switch (ts_parser__compare_versions(self, status_j, status_i)) + { + case ErrorComparisonTakeLeft: + made_changes = true; + ts_stack_remove_version(self->stack, i); + i--; + j = i; + break; + + case ErrorComparisonPreferLeft: + case ErrorComparisonNone: + if (ts_stack_merge(self->stack, j, i)) + { + made_changes = true; + i--; + j = i; + } + break; + + case ErrorComparisonPreferRight: + made_changes = true; + if (ts_stack_merge(self->stack, j, i)) + { + i--; + j = i; + } + else + { + ts_stack_swap_versions(self->stack, i, j); + } + break; + + case ErrorComparisonTakeRight: + made_changes = true; + ts_stack_remove_version(self->stack, j); + i--; + j--; + break; + } + } + } + + // Enforce a hard upper bound on the number of stack versions by + // discarding the least promising versions. + while (ts_stack_version_count(self->stack) > MAX_VERSION_COUNT) + { + ts_stack_remove_version(self->stack, MAX_VERSION_COUNT); + made_changes = true; + } + + // If the best-performing stack version is currently paused, or all + // versions are paused, then resume the best paused version and begin + // the error recovery process. Otherwise, remove the paused versions. + if (ts_stack_version_count(self->stack) > 0) + { + bool has_unpaused_version = false; + for (StackVersion i = 0, n = ts_stack_version_count(self->stack); i < n; i++) + { + if (ts_stack_is_paused(self->stack, i)) + { + if (!has_unpaused_version && self->accept_count < MAX_VERSION_COUNT) + { + LOG("resume version:%u", i); + min_error_cost = ts_stack_error_cost(self->stack, i); + Subtree lookahead = ts_stack_resume(self->stack, i); + ts_parser__handle_error(self, i, lookahead); + has_unpaused_version = true; + } + else + { + ts_stack_remove_version(self->stack, i); + i--; + n--; + } + } + else + { + has_unpaused_version = true; + } + } + } + + if (made_changes) + { + LOG("condense"); + LOG_STACK(); + } + + return min_error_cost; +} + +static bool ts_parser_has_outstanding_parse(TSParser *self) +{ + return (self->external_scanner_payload || ts_stack_state(self->stack, 0) != 1 || ts_stack_node_count_since_error(self->stack, 0) != 0); +} + +// Parser - Public + +TSParser *ts_parser_new(void) +{ + TSParser *self = ts_calloc(1, sizeof(TSParser)); + ts_lexer_init(&self->lexer); + array_init(&self->reduce_actions); + array_reserve(&self->reduce_actions, 4); + self->tree_pool = ts_subtree_pool_new(32); + self->stack = ts_stack_new(&self->tree_pool); + self->finished_tree = NULL_SUBTREE; + self->reusable_node = reusable_node_new(); + self->dot_graph_file = NULL; + self->cancellation_flag = NULL; + self->timeout_duration = 0; + self->language = NULL; + self->has_scanner_error = false; + self->external_scanner_payload = NULL; + self->end_clock = clock_null(); + self->operation_count = 0; + self->old_tree = NULL_SUBTREE; + self->included_range_differences = (TSRangeArray)array_new(); + self->included_range_difference_index = 0; + ts_parser__set_cached_token(self, 0, NULL_SUBTREE, NULL_SUBTREE); + return self; +} + +void ts_parser_delete(TSParser *self) +{ + if (!self) + return; + + ts_parser_set_language(self, NULL); + ts_stack_delete(self->stack); + if (self->reduce_actions.contents) + { + array_delete(&self->reduce_actions); + } + if (self->included_range_differences.contents) + { + array_delete(&self->included_range_differences); + } + if (self->old_tree.ptr) + { + ts_subtree_release(&self->tree_pool, self->old_tree); + self->old_tree = NULL_SUBTREE; + } + ts_wasm_store_delete(self->wasm_store); + ts_lexer_delete(&self->lexer); + ts_parser__set_cached_token(self, 0, NULL_SUBTREE, NULL_SUBTREE); + ts_subtree_pool_delete(&self->tree_pool); + reusable_node_delete(&self->reusable_node); + array_delete(&self->trailing_extras); + array_delete(&self->trailing_extras2); + array_delete(&self->scratch_trees); + ts_free(self); +} + +const TSLanguage *ts_parser_language(const TSParser *self) +{ + return self->language; +} + +bool ts_parser_set_language(TSParser *self, const TSLanguage *language) +{ + ts_parser_reset(self); + ts_language_delete(self->language); + self->language = NULL; + + if (language) + { + if (language->version > TREE_SITTER_LANGUAGE_VERSION || language->version < TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION) + return false; + + if (ts_language_is_wasm(language)) + { + if (!self->wasm_store || !ts_wasm_store_start(self->wasm_store, &self->lexer.data, language)) + return false; + } + } + + self->language = ts_language_copy(language); + return true; +} + +TSLogger ts_parser_logger(const TSParser *self) +{ + return self->lexer.logger; +} + +void ts_parser_set_logger(TSParser *self, TSLogger logger) +{ + self->lexer.logger = logger; +} + +void ts_parser_print_dot_graphs(TSParser *self, int fd) +{ + if (self->dot_graph_file) + { + fclose(self->dot_graph_file); + } + + if (fd >= 0) + { +#ifdef _WIN32 + self->dot_graph_file = _fdopen(fd, "a"); +#else + self->dot_graph_file = fdopen(fd, "a"); +#endif + } + else + { + self->dot_graph_file = NULL; + } +} + +const size_t *ts_parser_cancellation_flag(const TSParser *self) +{ + return (const size_t *)self->cancellation_flag; +} + +void ts_parser_set_cancellation_flag(TSParser *self, const size_t *flag) +{ + self->cancellation_flag = (const volatile size_t *)flag; +} + +uint64_t ts_parser_timeout_micros(const TSParser *self) +{ + return duration_to_micros(self->timeout_duration); +} + +void ts_parser_set_timeout_micros(TSParser *self, uint64_t timeout_micros) +{ + self->timeout_duration = duration_from_micros(timeout_micros); +} + +bool ts_parser_set_included_ranges(TSParser *self, const TSRange *ranges, uint32_t count) +{ + return ts_lexer_set_included_ranges(&self->lexer, ranges, count); +} + +const TSRange *ts_parser_included_ranges(const TSParser *self, uint32_t *count) +{ + return ts_lexer_included_ranges(&self->lexer, count); +} + +void ts_parser_reset(TSParser *self) +{ + ts_parser__external_scanner_destroy(self); + if (self->wasm_store) + { + ts_wasm_store_reset(self->wasm_store); + } + + if (self->old_tree.ptr) + { + ts_subtree_release(&self->tree_pool, self->old_tree); + self->old_tree = NULL_SUBTREE; + } + + reusable_node_clear(&self->reusable_node); + ts_lexer_reset(&self->lexer, length_zero()); + ts_stack_clear(self->stack); + ts_parser__set_cached_token(self, 0, NULL_SUBTREE, NULL_SUBTREE); + if (self->finished_tree.ptr) + { + ts_subtree_release(&self->tree_pool, self->finished_tree); + self->finished_tree = NULL_SUBTREE; + } + self->accept_count = 0; + self->has_scanner_error = false; +} + +TSTree *ts_parser_parse(TSParser *self, const TSTree *old_tree, TSInput input) +{ + TSTree *result = NULL; + if (!self->language || !input.read) + return NULL; + + if (ts_language_is_wasm(self->language)) + { + if (!self->wasm_store) + return NULL; + ts_wasm_store_start(self->wasm_store, &self->lexer.data, self->language); + } + + ts_lexer_set_input(&self->lexer, input); + array_clear(&self->included_range_differences); + self->included_range_difference_index = 0; + + if (ts_parser_has_outstanding_parse(self)) + { + LOG("resume_parsing"); + } + else + { + ts_parser__external_scanner_create(self); + if (self->has_scanner_error) + goto exit; + + if (old_tree) + { + ts_subtree_retain(old_tree->root); + self->old_tree = old_tree->root; + ts_range_array_get_changed_ranges(old_tree->included_ranges, old_tree->included_range_count, self->lexer.included_ranges, + self->lexer.included_range_count, &self->included_range_differences); + reusable_node_reset(&self->reusable_node, old_tree->root); + LOG("parse_after_edit"); + LOG_TREE(self->old_tree); + for (unsigned i = 0; i < self->included_range_differences.size; i++) + { + TSRange *range = &self->included_range_differences.contents[i]; + LOG("different_included_range %u - %u", range->start_byte, range->end_byte); + } + } + else + { + reusable_node_clear(&self->reusable_node); + LOG("new_parse"); + } + } + + self->operation_count = 0; + if (self->timeout_duration) + { + self->end_clock = clock_after(clock_now(), self->timeout_duration); + } + else + { + self->end_clock = clock_null(); + } + + uint32_t position = 0, last_position = 0, version_count = 0; + do + { + for (StackVersion version = 0; version_count = ts_stack_version_count(self->stack), version < version_count; version++) + { + bool allow_node_reuse = version_count == 1; + while (ts_stack_is_active(self->stack, version)) + { + LOG("process version:%u, version_count:%u, state:%d, row:%u, col:%u", version, ts_stack_version_count(self->stack), + ts_stack_state(self->stack, version), ts_stack_position(self->stack, version).extent.row, + ts_stack_position(self->stack, version).extent.column); + + if (!ts_parser__advance(self, version, allow_node_reuse)) + { + if (self->has_scanner_error) + goto exit; + return NULL; + } + + LOG_STACK(); + + position = ts_stack_position(self->stack, version).bytes; + if (position > last_position || (version > 0 && position == last_position)) + { + last_position = position; + break; + } + } + } + + // After advancing each version of the stack, re-sort the versions by their cost, + // removing any versions that are no longer worth pursuing. + unsigned min_error_cost = ts_parser__condense_stack(self); + + // If there's already a finished parse tree that's better than any in-progress version, + // then terminate parsing. Clear the parse stack to remove any extra references to subtrees + // within the finished tree, ensuring that these subtrees can be safely mutated in-place + // for rebalancing. + if (self->finished_tree.ptr && ts_subtree_error_cost(self->finished_tree) < min_error_cost) + { + ts_stack_clear(self->stack); + break; + } + + while (self->included_range_difference_index < self->included_range_differences.size) + { + TSRange *range = &self->included_range_differences.contents[self->included_range_difference_index]; + if (range->end_byte <= position) + { + self->included_range_difference_index++; + } + else + { + break; + } + } + } while (version_count != 0); + + assert(self->finished_tree.ptr); + ts_subtree_balance(self->finished_tree, &self->tree_pool, self->language); + LOG("done"); + LOG_TREE(self->finished_tree); + + result = ts_tree_new(self->finished_tree, self->language, self->lexer.included_ranges, self->lexer.included_range_count); + self->finished_tree = NULL_SUBTREE; + +exit: + ts_parser_reset(self); + return result; +} + +TSTree *ts_parser_parse_string(TSParser *self, const TSTree *old_tree, const char *string, uint32_t length) +{ + return ts_parser_parse_string_encoding(self, old_tree, string, length, TSInputEncodingUTF8); +} + +TSTree *ts_parser_parse_string_encoding(TSParser *self, const TSTree *old_tree, const char *string, uint32_t length, + TSInputEncoding encoding) +{ + TSStringInput input = {string, length}; + return ts_parser_parse(self, old_tree, + (TSInput){ + &input, + ts_string_input_read, + encoding, + }); +} + +void ts_parser_set_wasm_store(TSParser *self, TSWasmStore *store) +{ + ts_wasm_store_delete(self->wasm_store); + self->wasm_store = store; +} + +TSWasmStore *ts_parser_take_wasm_store(TSParser *self) +{ + TSWasmStore *result = self->wasm_store; + self->wasm_store = NULL; + return result; +} + +#undef LOG diff --git a/parser/nnsrc/parser.h b/parser/nnsrc/parser.h new file mode 100644 index 00000000..20f8474a --- /dev/null +++ b/parser/nnsrc/parser.h @@ -0,0 +1,265 @@ +#ifndef TREE_SITTER_PARSER_H_ +#define TREE_SITTER_PARSER_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include + +#define ts_builtin_sym_error ((TSSymbol)-1) +#define ts_builtin_sym_end 0 +#define TREE_SITTER_SERIALIZATION_BUFFER_SIZE 1024 + +#ifndef TREE_SITTER_API_H_ +typedef uint16_t TSStateId; +typedef uint16_t TSSymbol; +typedef uint16_t TSFieldId; +typedef struct TSLanguage TSLanguage; +#endif + +typedef struct { + TSFieldId field_id; + uint8_t child_index; + bool inherited; +} TSFieldMapEntry; + +typedef struct { + uint16_t index; + uint16_t length; +} TSFieldMapSlice; + +typedef struct { + bool visible; + bool named; + bool supertype; +} TSSymbolMetadata; + +typedef struct TSLexer TSLexer; + +struct TSLexer { + int32_t lookahead; + TSSymbol result_symbol; + void (*advance)(TSLexer *, bool); + void (*mark_end)(TSLexer *); + uint32_t (*get_column)(TSLexer *); + bool (*is_at_included_range_start)(const TSLexer *); + bool (*eof)(const TSLexer *); +}; + +typedef enum { + TSParseActionTypeShift, + TSParseActionTypeReduce, + TSParseActionTypeAccept, + TSParseActionTypeRecover, +} TSParseActionType; + +typedef union { + struct { + uint8_t type; + TSStateId state; + bool extra; + bool repetition; + } shift; + struct { + uint8_t type; + uint8_t child_count; + TSSymbol symbol; + int16_t dynamic_precedence; + uint16_t production_id; + } reduce; + uint8_t type; +} TSParseAction; + +typedef struct { + uint16_t lex_state; + uint16_t external_lex_state; +} TSLexMode; + +typedef union { + TSParseAction action; + struct { + uint8_t count; + bool reusable; + } entry; +} TSParseActionEntry; + +typedef struct { + int32_t start; + int32_t end; +} TSCharacterRange; + +struct TSLanguage { + uint32_t version; + uint32_t symbol_count; + uint32_t alias_count; + uint32_t token_count; + uint32_t external_token_count; + uint32_t state_count; + uint32_t large_state_count; + uint32_t production_id_count; + uint32_t field_count; + uint16_t max_alias_sequence_length; + const uint16_t *parse_table; + const uint16_t *small_parse_table; + const uint32_t *small_parse_table_map; + const TSParseActionEntry *parse_actions; + const char * const *symbol_names; + const char * const *field_names; + const TSFieldMapSlice *field_map_slices; + const TSFieldMapEntry *field_map_entries; + const TSSymbolMetadata *symbol_metadata; + const TSSymbol *public_symbol_map; + const uint16_t *alias_map; + const TSSymbol *alias_sequences; + const TSLexMode *lex_modes; + bool (*lex_fn)(TSLexer *, TSStateId); + bool (*keyword_lex_fn)(TSLexer *, TSStateId); + TSSymbol keyword_capture_token; + struct ExternalScannerDefinition { + const bool *states; + const TSSymbol *symbol_map; + void *(*create)(void); + void (*destroy)(void *); + bool (*scan)(void *, TSLexer *, const bool *symbol_whitelist); + unsigned (*serialize)(void *, char *); + void (*deserialize)(void *, const char *, unsigned); + } external_scanner; + const TSStateId *primary_state_ids; +}; + +static inline bool set_contains(TSCharacterRange *ranges, uint32_t len, int32_t lookahead) { + uint32_t index = 0; + uint32_t size = len - index; + while (size > 1) { + uint32_t half_size = size / 2; + uint32_t mid_index = index + half_size; + TSCharacterRange *range = &ranges[mid_index]; + if (lookahead >= range->start && lookahead <= range->end) { + return true; + } else if (lookahead > range->end) { + index = mid_index; + } + size -= half_size; + } + TSCharacterRange *range = &ranges[index]; + return (lookahead >= range->start && lookahead <= range->end); +} + +/* + * Lexer Macros + */ + +#ifdef _MSC_VER +#define UNUSED __pragma(warning(suppress : 4101)) +#else +#define UNUSED __attribute__((unused)) +#endif + +#define START_LEXER() \ + bool result = false; \ + bool skip = false; \ + UNUSED \ + bool eof = false; \ + int32_t lookahead; \ + goto start; \ + next_state: \ + lexer->advance(lexer, skip); \ + start: \ + skip = false; \ + lookahead = lexer->lookahead; + +#define ADVANCE(state_value) \ + { \ + state = state_value; \ + goto next_state; \ + } + +#define ADVANCE_MAP(...) \ + { \ + static const uint16_t map[] = { __VA_ARGS__ }; \ + for (uint32_t i = 0; i < sizeof(map) / sizeof(map[0]); i += 2) { \ + if (map[i] == lookahead) { \ + state = map[i + 1]; \ + goto next_state; \ + } \ + } \ + } + +#define SKIP(state_value) \ + { \ + skip = true; \ + state = state_value; \ + goto next_state; \ + } + +#define ACCEPT_TOKEN(symbol_value) \ + result = true; \ + lexer->result_symbol = symbol_value; \ + lexer->mark_end(lexer); + +#define END_STATE() return result; + +/* + * Parse Table Macros + */ + +#define SMALL_STATE(id) ((id) - LARGE_STATE_COUNT) + +#define STATE(id) id + +#define ACTIONS(id) id + +#define SHIFT(state_value) \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .state = (state_value) \ + } \ + }} + +#define SHIFT_REPEAT(state_value) \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .state = (state_value), \ + .repetition = true \ + } \ + }} + +#define SHIFT_EXTRA() \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .extra = true \ + } \ + }} + +#define REDUCE(symbol_name, children, precedence, prod_id) \ + {{ \ + .reduce = { \ + .type = TSParseActionTypeReduce, \ + .symbol = symbol_name, \ + .child_count = children, \ + .dynamic_precedence = precedence, \ + .production_id = prod_id \ + }, \ + }} + +#define RECOVER() \ + {{ \ + .type = TSParseActionTypeRecover \ + }} + +#define ACCEPT_INPUT() \ + {{ \ + .type = TSParseActionTypeAccept \ + }} + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_PARSER_H_ diff --git a/parser/nnsrc/point.h b/parser/nnsrc/point.h new file mode 100644 index 00000000..942a86e1 --- /dev/null +++ b/parser/nnsrc/point.h @@ -0,0 +1,62 @@ +#ifndef TREE_SITTER_POINT_H_ +#define TREE_SITTER_POINT_H_ + +#include "api.h" + +#define POINT_ZERO ((TSPoint) {0, 0}) +#define POINT_MAX ((TSPoint) {UINT32_MAX, UINT32_MAX}) + +static inline TSPoint point__new(unsigned row, unsigned column) { + TSPoint result = {row, column}; + return result; +} + +static inline TSPoint point_add(TSPoint a, TSPoint b) { + if (b.row > 0) + return point__new(a.row + b.row, b.column); + else + return point__new(a.row, a.column + b.column); +} + +static inline TSPoint point_sub(TSPoint a, TSPoint b) { + if (a.row > b.row) + return point__new(a.row - b.row, a.column); + else + return point__new(0, a.column - b.column); +} + +static inline bool point_lte(TSPoint a, TSPoint b) { + return (a.row < b.row) || (a.row == b.row && a.column <= b.column); +} + +static inline bool point_lt(TSPoint a, TSPoint b) { + return (a.row < b.row) || (a.row == b.row && a.column < b.column); +} + +static inline bool point_gt(TSPoint a, TSPoint b) { + return (a.row > b.row) || (a.row == b.row && a.column > b.column); +} + +static inline bool point_gte(TSPoint a, TSPoint b) { + return (a.row > b.row) || (a.row == b.row && a.column >= b.column); +} + +static inline bool point_eq(TSPoint a, TSPoint b) { + return a.row == b.row && a.column == b.column; +} + +static inline TSPoint point_min(TSPoint a, TSPoint b) { + if (a.row < b.row || (a.row == b.row && a.column < b.column)) + return a; + else + return b; +} + +static inline TSPoint point_max(TSPoint a, TSPoint b) { + if (a.row > b.row || (a.row == b.row && a.column > b.column)) + return a; + else + return b; +} + +#endif diff --git a/parser/nnsrc/query.c b/parser/nnsrc/query.c new file mode 100644 index 00000000..1b6e04b6 --- /dev/null +++ b/parser/nnsrc/query.c @@ -0,0 +1,4134 @@ +#include "api.h" +#include "./alloc.h" +#include "./array.h" +#include "./language.h" +#include "./point.h" +#include "./tree_cursor.h" +#include "./unicode.h" +#include + +// #define DEBUG_ANALYZE_QUERY +// #define DEBUG_EXECUTE_QUERY + +#define MAX_STEP_CAPTURE_COUNT 3 +#define MAX_NEGATED_FIELD_COUNT 8 +#define MAX_STATE_PREDECESSOR_COUNT 256 +#define MAX_ANALYSIS_STATE_DEPTH 8 +#define MAX_ANALYSIS_ITERATION_COUNT 256 + +/* + * Stream - A sequence of unicode characters derived from a UTF8 string. + * This struct is used in parsing queries from S-expressions. + */ +typedef struct { + const char *input; + const char *start; + const char *end; + int32_t next; + uint8_t next_size; +} Stream; + +/* + * QueryStep - A step in the process of matching a query. Each node within + * a query S-expression corresponds to one of these steps. An entire pattern + * is represented as a sequence of these steps. The basic properties of a + * node are represented by these fields: + * - `symbol` - The grammar symbol to match. A zero value represents the + * wildcard symbol, '_'. + * - `field` - The field name to match. A zero value means that a field name + * was not specified. + * - `capture_ids` - An array of integers representing the names of captures + * associated with this node in the pattern, terminated by a `NONE` value. + * - `depth` - The depth where this node occurs in the pattern. The root node + * of the pattern has depth zero. + * - `negated_field_list_id` - An id representing a set of fields that must + * not be present on a node matching this step. + * + * Steps have some additional fields in order to handle the `.` (or "anchor") operator, + * which forbids additional child nodes: + * - `is_immediate` - Indicates that the node matching this step cannot be preceded + * by other sibling nodes that weren't specified in the pattern. + * - `is_last_child` - Indicates that the node matching this step cannot have any + * subsequent named siblings. + * + * For simple patterns, steps are matched in sequential order. But in order to + * handle alternative/repeated/optional sub-patterns, query steps are not always + * structured as a linear sequence; they sometimes need to split and merge. This + * is done using the following fields: + * - `alternative_index` - The index of a different query step that serves as + * an alternative to this step. A `NONE` value represents no alternative. + * When a query state reaches a step with an alternative index, the state + * is duplicated, with one copy remaining at the original step, and one copy + * moving to the alternative step. The alternative may have its own alternative + * step, so this splitting is an iterative process. + * - `is_dead_end` - Indicates that this state cannot be passed directly, and + * exists only in order to redirect to an alternative index, with no splitting. + * - `is_pass_through` - Indicates that state has no matching logic of its own, + * and exists only to split a state. One copy of the state advances immediately + * to the next step, and one moves to the alternative step. + * - `alternative_is_immediate` - Indicates that this step's alternative step + * should be treated as if `is_immediate` is true. + * + * Steps also store some derived state that summarizes how they relate to other + * steps within the same pattern. This is used to optimize the matching process: + * - `contains_captures` - Indicates that this step or one of its child steps + * has a non-empty `capture_ids` list. + * - `parent_pattern_guaranteed` - Indicates that if this step is reached, then + * it and all of its subsequent sibling steps within the same parent pattern + * are guaranteed to match. + * - `root_pattern_guaranteed` - Similar to `parent_pattern_guaranteed`, but + * for the entire top-level pattern. When iterating through a query's + * captures using `ts_query_cursor_next_capture`, this field is used to + * detect that a capture can safely be returned from a match that has not + * even completed yet. + */ +typedef struct { + TSSymbol symbol; + TSSymbol supertype_symbol; + TSFieldId field; + uint16_t capture_ids[MAX_STEP_CAPTURE_COUNT]; + uint16_t depth; + uint16_t alternative_index; + uint16_t negated_field_list_id; + bool is_named: 1; + bool is_immediate: 1; + bool is_last_child: 1; + bool is_pass_through: 1; + bool is_dead_end: 1; + bool alternative_is_immediate: 1; + bool contains_captures: 1; + bool root_pattern_guaranteed: 1; + bool parent_pattern_guaranteed: 1; +} QueryStep; + +/* + * Slice - A slice of an external array. Within a query, capture names, + * literal string values, and predicate step information are stored in three + * contiguous arrays. Individual captures, string values, and predicates are + * represented as slices of these three arrays. + */ +typedef struct { + uint32_t offset; + uint32_t length; +} Slice; + +/* + * SymbolTable - a two-way mapping of strings to ids. + */ +typedef struct { + Array(char) characters; + Array(Slice) slices; +} SymbolTable; + +/** + * CaptureQuantififers - a data structure holding the quantifiers of pattern captures. + */ +typedef Array(uint8_t) CaptureQuantifiers; + +/* + * PatternEntry - Information about the starting point for matching a particular + * pattern. These entries are stored in a 'pattern map' - a sorted array that + * makes it possible to efficiently lookup patterns based on the symbol for their + * first step. The entry consists of the following fields: + * - `pattern_index` - the index of the pattern within the query + * - `step_index` - the index of the pattern's first step in the shared `steps` array + * - `is_rooted` - whether or not the pattern has a single root node. This property + * affects decisions about whether or not to start the pattern for nodes outside + * of a QueryCursor's range restriction. + */ +typedef struct { + uint16_t step_index; + uint16_t pattern_index; + bool is_rooted; +} PatternEntry; + +typedef struct { + Slice steps; + Slice predicate_steps; + uint32_t start_byte; + bool is_non_local; +} QueryPattern; + +typedef struct { + uint32_t byte_offset; + uint16_t step_index; +} StepOffset; + +/* + * QueryState - The state of an in-progress match of a particular pattern + * in a query. While executing, a `TSQueryCursor` must keep track of a number + * of possible in-progress matches. Each of those possible matches is + * represented as one of these states. Fields: + * - `id` - A numeric id that is exposed to the public API. This allows the + * caller to remove a given match, preventing any more of its captures + * from being returned. + * - `start_depth` - The depth in the tree where the first step of the state's + * pattern was matched. + * - `pattern_index` - The pattern that the state is matching. + * - `consumed_capture_count` - The number of captures from this match that + * have already been returned. + * - `capture_list_id` - A numeric id that can be used to retrieve the state's + * list of captures from the `CaptureListPool`. + * - `seeking_immediate_match` - A flag that indicates that the state's next + * step must be matched by the very next sibling. This is used when + * processing repetitions. + * - `has_in_progress_alternatives` - A flag that indicates that there is are + * other states that have the same captures as this state, but are at + * different steps in their pattern. This means that in order to obey the + * 'longest-match' rule, this state should not be returned as a match until + * it is clear that there can be no other alternative match with more captures. + */ +typedef struct { + uint32_t id; + uint32_t capture_list_id; + uint16_t start_depth; + uint16_t step_index; + uint16_t pattern_index; + uint16_t consumed_capture_count: 12; + bool seeking_immediate_match: 1; + bool has_in_progress_alternatives: 1; + bool dead: 1; + bool needs_parent: 1; +} QueryState; + +typedef Array(TSQueryCapture) CaptureList; + +/* + * CaptureListPool - A collection of *lists* of captures. Each query state needs + * to maintain its own list of captures. To avoid repeated allocations, this struct + * maintains a fixed set of capture lists, and keeps track of which ones are + * currently in use by a query state. + */ +typedef struct { + Array(CaptureList) list; + CaptureList empty_list; + // The maximum number of capture lists that we are allowed to allocate. We + // never allow `list` to allocate more entries than this, dropping pending + // matches if needed to stay under the limit. + uint32_t max_capture_list_count; + // The number of capture lists allocated in `list` that are not currently in + // use. We reuse those existing-but-unused capture lists before trying to + // allocate any new ones. We use an invalid value (UINT32_MAX) for a capture + // list's length to indicate that it's not in use. + uint32_t free_capture_list_count; +} CaptureListPool; + +/* + * AnalysisState - The state needed for walking the parse table when analyzing + * a query pattern, to determine at which steps the pattern might fail to match. + */ +typedef struct { + TSStateId parse_state; + TSSymbol parent_symbol; + uint16_t child_index; + TSFieldId field_id: 15; + bool done: 1; +} AnalysisStateEntry; + +typedef struct { + AnalysisStateEntry stack[MAX_ANALYSIS_STATE_DEPTH]; + uint16_t depth; + uint16_t step_index; + TSSymbol root_symbol; +} AnalysisState; + +typedef Array(AnalysisState *) AnalysisStateSet; + +typedef struct { + AnalysisStateSet states; + AnalysisStateSet next_states; + AnalysisStateSet deeper_states; + AnalysisStateSet state_pool; + Array(uint16_t) final_step_indices; + Array(TSSymbol) finished_parent_symbols; + bool did_abort; +} QueryAnalysis; + +/* + * AnalysisSubgraph - A subset of the states in the parse table that are used + * in constructing nodes with a certain symbol. Each state is accompanied by + * some information about the possible node that could be produced in + * downstream states. + */ +typedef struct { + TSStateId state; + uint16_t production_id; + uint8_t child_index: 7; + bool done: 1; +} AnalysisSubgraphNode; + +typedef struct { + TSSymbol symbol; + Array(TSStateId) start_states; + Array(AnalysisSubgraphNode) nodes; +} AnalysisSubgraph; + +typedef Array(AnalysisSubgraph) AnalysisSubgraphArray; + +/* + * StatePredecessorMap - A map that stores the predecessors of each parse state. + * This is used during query analysis to determine which parse states can lead + * to which reduce actions. + */ +typedef struct { + TSStateId *contents; +} StatePredecessorMap; + +/* + * TSQuery - A tree query, compiled from a string of S-expressions. The query + * itself is immutable. The mutable state used in the process of executing the + * query is stored in a `TSQueryCursor`. + */ +struct TSQuery { + SymbolTable captures; + SymbolTable predicate_values; + Array(CaptureQuantifiers) capture_quantifiers; + Array(QueryStep) steps; + Array(PatternEntry) pattern_map; + Array(TSQueryPredicateStep) predicate_steps; + Array(QueryPattern) patterns; + Array(StepOffset) step_offsets; + Array(TSFieldId) negated_fields; + Array(char) string_buffer; + Array(TSSymbol) repeat_symbols_with_rootless_patterns; + const TSLanguage *language; + uint16_t wildcard_root_pattern_count; +}; + +/* + * TSQueryCursor - A stateful struct used to execute a query on a tree. + */ +struct TSQueryCursor { + const TSQuery *query; + TSTreeCursor cursor; + Array(QueryState) states; + Array(QueryState) finished_states; + CaptureListPool capture_list_pool; + uint32_t depth; + uint32_t max_start_depth; + uint32_t start_byte; + uint32_t end_byte; + TSPoint start_point; + TSPoint end_point; + uint32_t next_state_id; + bool on_visible_node; + bool ascending; + bool halted; + bool did_exceed_match_limit; +}; + +static const TSQueryError PARENT_DONE = -1; +static const uint16_t PATTERN_DONE_MARKER = UINT16_MAX; +static const uint16_t NONE = UINT16_MAX; +static const TSSymbol WILDCARD_SYMBOL = 0; + +/********** + * Stream + **********/ + +// Advance to the next unicode code point in the stream. +static bool stream_advance(Stream *self) { + self->input += self->next_size; + if (self->input < self->end) { + uint32_t size = ts_decode_utf8( + (const uint8_t *)self->input, + (uint32_t)(self->end - self->input), + &self->next + ); + if (size > 0) { + self->next_size = size; + return true; + } + } else { + self->next_size = 0; + self->next = '\0'; + } + return false; +} + +// Reset the stream to the given input position, represented as a pointer +// into the input string. +static void stream_reset(Stream *self, const char *input) { + self->input = input; + self->next_size = 0; + stream_advance(self); +} + +static Stream stream_new(const char *string, uint32_t length) { + Stream self = { + .next = 0, + .input = string, + .start = string, + .end = string + length, + }; + stream_advance(&self); + return self; +} + +static void stream_skip_whitespace(Stream *self) { + for (;;) { + if (iswspace(self->next)) { + stream_advance(self); + } else if (self->next == ';') { + // skip over comments + stream_advance(self); + while (self->next && self->next != '\n') { + if (!stream_advance(self)) break; + } + } else { + break; + } + } +} + +static bool stream_is_ident_start(Stream *self) { + return iswalnum(self->next) || self->next == '_' || self->next == '-'; +} + +static void stream_scan_identifier(Stream *stream) { + do { + stream_advance(stream); + } while ( + iswalnum(stream->next) || + stream->next == '_' || + stream->next == '-' || + stream->next == '.' || + stream->next == '?' || + stream->next == '!' + ); +} + +static uint32_t stream_offset(Stream *self) { + return (uint32_t)(self->input - self->start); +} + +/****************** + * CaptureListPool + ******************/ + +static CaptureListPool capture_list_pool_new(void) { + return (CaptureListPool) { + .list = array_new(), + .empty_list = array_new(), + .max_capture_list_count = UINT32_MAX, + .free_capture_list_count = 0, + }; +} + +static void capture_list_pool_reset(CaptureListPool *self) { + for (uint16_t i = 0; i < (uint16_t)self->list.size; i++) { + // This invalid size means that the list is not in use. + self->list.contents[i].size = UINT32_MAX; + } + self->free_capture_list_count = self->list.size; +} + +static void capture_list_pool_delete(CaptureListPool *self) { + for (uint16_t i = 0; i < (uint16_t)self->list.size; i++) { + array_delete(&self->list.contents[i]); + } + array_delete(&self->list); +} + +static const CaptureList *capture_list_pool_get(const CaptureListPool *self, uint16_t id) { + if (id >= self->list.size) return &self->empty_list; + return &self->list.contents[id]; +} + +static CaptureList *capture_list_pool_get_mut(CaptureListPool *self, uint16_t id) { + assert(id < self->list.size); + return &self->list.contents[id]; +} + +static bool capture_list_pool_is_empty(const CaptureListPool *self) { + // The capture list pool is empty if all allocated lists are in use, and we + // have reached the maximum allowed number of allocated lists. + return self->free_capture_list_count == 0 && self->list.size >= self->max_capture_list_count; +} + +static uint16_t capture_list_pool_acquire(CaptureListPool *self) { + // First see if any already allocated capture list is currently unused. + if (self->free_capture_list_count > 0) { + for (uint16_t i = 0; i < (uint16_t)self->list.size; i++) { + if (self->list.contents[i].size == UINT32_MAX) { + array_clear(&self->list.contents[i]); + self->free_capture_list_count--; + return i; + } + } + } + + // Otherwise allocate and initialize a new capture list, as long as that + // doesn't put us over the requested maximum. + uint32_t i = self->list.size; + if (i >= self->max_capture_list_count) { + return NONE; + } + CaptureList list; + array_init(&list); + array_push(&self->list, list); + return i; +} + +static void capture_list_pool_release(CaptureListPool *self, uint16_t id) { + if (id >= self->list.size) return; + self->list.contents[id].size = UINT32_MAX; + self->free_capture_list_count++; +} + +/************** + * Quantifiers + **************/ + +static TSQuantifier quantifier_mul( + TSQuantifier left, + TSQuantifier right +) { + switch (left) + { + case TSQuantifierZero: + return TSQuantifierZero; + case TSQuantifierZeroOrOne: + switch (right) { + case TSQuantifierZero: + return TSQuantifierZero; + case TSQuantifierZeroOrOne: + case TSQuantifierOne: + return TSQuantifierZeroOrOne; + case TSQuantifierZeroOrMore: + case TSQuantifierOneOrMore: + return TSQuantifierZeroOrMore; + }; + break; + case TSQuantifierZeroOrMore: + switch (right) { + case TSQuantifierZero: + return TSQuantifierZero; + case TSQuantifierZeroOrOne: + case TSQuantifierZeroOrMore: + case TSQuantifierOne: + case TSQuantifierOneOrMore: + return TSQuantifierZeroOrMore; + }; + break; + case TSQuantifierOne: + return right; + case TSQuantifierOneOrMore: + switch (right) { + case TSQuantifierZero: + return TSQuantifierZero; + case TSQuantifierZeroOrOne: + case TSQuantifierZeroOrMore: + return TSQuantifierZeroOrMore; + case TSQuantifierOne: + case TSQuantifierOneOrMore: + return TSQuantifierOneOrMore; + }; + break; + } + return TSQuantifierZero; // to make compiler happy, but all cases should be covered above! +} + +static TSQuantifier quantifier_join( + TSQuantifier left, + TSQuantifier right +) { + switch (left) + { + case TSQuantifierZero: + switch (right) { + case TSQuantifierZero: + return TSQuantifierZero; + case TSQuantifierZeroOrOne: + case TSQuantifierOne: + return TSQuantifierZeroOrOne; + case TSQuantifierZeroOrMore: + case TSQuantifierOneOrMore: + return TSQuantifierZeroOrMore; + }; + break; + case TSQuantifierZeroOrOne: + switch (right) { + case TSQuantifierZero: + case TSQuantifierZeroOrOne: + case TSQuantifierOne: + return TSQuantifierZeroOrOne; + break; + case TSQuantifierZeroOrMore: + case TSQuantifierOneOrMore: + return TSQuantifierZeroOrMore; + break; + }; + break; + case TSQuantifierZeroOrMore: + return TSQuantifierZeroOrMore; + case TSQuantifierOne: + switch (right) { + case TSQuantifierZero: + case TSQuantifierZeroOrOne: + return TSQuantifierZeroOrOne; + case TSQuantifierZeroOrMore: + return TSQuantifierZeroOrMore; + case TSQuantifierOne: + return TSQuantifierOne; + case TSQuantifierOneOrMore: + return TSQuantifierOneOrMore; + }; + break; + case TSQuantifierOneOrMore: + switch (right) { + case TSQuantifierZero: + case TSQuantifierZeroOrOne: + case TSQuantifierZeroOrMore: + return TSQuantifierZeroOrMore; + case TSQuantifierOne: + case TSQuantifierOneOrMore: + return TSQuantifierOneOrMore; + }; + break; + } + return TSQuantifierZero; // to make compiler happy, but all cases should be covered above! +} + +static TSQuantifier quantifier_add( + TSQuantifier left, + TSQuantifier right +) { + switch (left) + { + case TSQuantifierZero: + return right; + case TSQuantifierZeroOrOne: + switch (right) { + case TSQuantifierZero: + return TSQuantifierZeroOrOne; + case TSQuantifierZeroOrOne: + case TSQuantifierZeroOrMore: + return TSQuantifierZeroOrMore; + case TSQuantifierOne: + case TSQuantifierOneOrMore: + return TSQuantifierOneOrMore; + }; + break; + case TSQuantifierZeroOrMore: + switch (right) { + case TSQuantifierZero: + return TSQuantifierZeroOrMore; + case TSQuantifierZeroOrOne: + case TSQuantifierZeroOrMore: + return TSQuantifierZeroOrMore; + case TSQuantifierOne: + case TSQuantifierOneOrMore: + return TSQuantifierOneOrMore; + }; + break; + case TSQuantifierOne: + switch (right) { + case TSQuantifierZero: + return TSQuantifierOne; + case TSQuantifierZeroOrOne: + case TSQuantifierZeroOrMore: + case TSQuantifierOne: + case TSQuantifierOneOrMore: + return TSQuantifierOneOrMore; + }; + break; + case TSQuantifierOneOrMore: + return TSQuantifierOneOrMore; + } + return TSQuantifierZero; // to make compiler happy, but all cases should be covered above! +} + +// Create new capture quantifiers structure +static CaptureQuantifiers capture_quantifiers_new(void) { + return (CaptureQuantifiers) array_new(); +} + +// Delete capture quantifiers structure +static void capture_quantifiers_delete( + CaptureQuantifiers *self +) { + array_delete(self); +} + +// Clear capture quantifiers structure +static void capture_quantifiers_clear( + CaptureQuantifiers *self +) { + array_clear(self); +} + +// Replace capture quantifiers with the given quantifiers +static void capture_quantifiers_replace( + CaptureQuantifiers *self, + CaptureQuantifiers *quantifiers +) { + array_clear(self); + array_push_all(self, quantifiers); +} + +// Return capture quantifier for the given capture id +static TSQuantifier capture_quantifier_for_id( + const CaptureQuantifiers *self, + uint16_t id +) { + return (self->size <= id) ? TSQuantifierZero : (TSQuantifier) *array_get(self, id); +} + +// Add the given quantifier to the current value for id +static void capture_quantifiers_add_for_id( + CaptureQuantifiers *self, + uint16_t id, + TSQuantifier quantifier +) { + if (self->size <= id) { + array_grow_by(self, id + 1 - self->size); + } + uint8_t *own_quantifier = array_get(self, id); + *own_quantifier = (uint8_t) quantifier_add((TSQuantifier) *own_quantifier, quantifier); +} + +// Point-wise add the given quantifiers to the current values +static void capture_quantifiers_add_all( + CaptureQuantifiers *self, + CaptureQuantifiers *quantifiers +) { + if (self->size < quantifiers->size) { + array_grow_by(self, quantifiers->size - self->size); + } + for (uint16_t id = 0; id < (uint16_t)quantifiers->size; id++) { + uint8_t *quantifier = array_get(quantifiers, id); + uint8_t *own_quantifier = array_get(self, id); + *own_quantifier = (uint8_t) quantifier_add((TSQuantifier) *own_quantifier, (TSQuantifier) *quantifier); + } +} + +// Join the given quantifier with the current values +static void capture_quantifiers_mul( + CaptureQuantifiers *self, + TSQuantifier quantifier +) { + for (uint16_t id = 0; id < (uint16_t)self->size; id++) { + uint8_t *own_quantifier = array_get(self, id); + *own_quantifier = (uint8_t) quantifier_mul((TSQuantifier) *own_quantifier, quantifier); + } +} + +// Point-wise join the quantifiers from a list of alternatives with the current values +static void capture_quantifiers_join_all( + CaptureQuantifiers *self, + CaptureQuantifiers *quantifiers +) { + if (self->size < quantifiers->size) { + array_grow_by(self, quantifiers->size - self->size); + } + for (uint32_t id = 0; id < quantifiers->size; id++) { + uint8_t *quantifier = array_get(quantifiers, id); + uint8_t *own_quantifier = array_get(self, id); + *own_quantifier = (uint8_t) quantifier_join((TSQuantifier) *own_quantifier, (TSQuantifier) *quantifier); + } + for (uint32_t id = quantifiers->size; id < self->size; id++) { + uint8_t *own_quantifier = array_get(self, id); + *own_quantifier = (uint8_t) quantifier_join((TSQuantifier) *own_quantifier, TSQuantifierZero); + } +} + +/************** + * SymbolTable + **************/ + +static SymbolTable symbol_table_new(void) { + return (SymbolTable) { + .characters = array_new(), + .slices = array_new(), + }; +} + +static void symbol_table_delete(SymbolTable *self) { + array_delete(&self->characters); + array_delete(&self->slices); +} + +static int symbol_table_id_for_name( + const SymbolTable *self, + const char *name, + uint32_t length +) { + for (unsigned i = 0; i < self->slices.size; i++) { + Slice slice = self->slices.contents[i]; + if ( + slice.length == length && + !strncmp(&self->characters.contents[slice.offset], name, length) + ) return i; + } + return -1; +} + +static const char *symbol_table_name_for_id( + const SymbolTable *self, + uint16_t id, + uint32_t *length +) { + Slice slice = self->slices.contents[id]; + *length = slice.length; + return &self->characters.contents[slice.offset]; +} + +static uint16_t symbol_table_insert_name( + SymbolTable *self, + const char *name, + uint32_t length +) { + int id = symbol_table_id_for_name(self, name, length); + if (id >= 0) return (uint16_t)id; + Slice slice = { + .offset = self->characters.size, + .length = length, + }; + array_grow_by(&self->characters, length + 1); + memcpy(&self->characters.contents[slice.offset], name, length); + self->characters.contents[self->characters.size - 1] = 0; + array_push(&self->slices, slice); + return self->slices.size - 1; +} + +/************ + * QueryStep + ************/ + +static QueryStep query_step__new( + TSSymbol symbol, + uint16_t depth, + bool is_immediate +) { + QueryStep step = { + .symbol = symbol, + .depth = depth, + .field = 0, + .alternative_index = NONE, + .negated_field_list_id = 0, + .contains_captures = false, + .is_last_child = false, + .is_named = false, + .is_pass_through = false, + .is_dead_end = false, + .root_pattern_guaranteed = false, + .is_immediate = is_immediate, + .alternative_is_immediate = false, + }; + for (unsigned i = 0; i < MAX_STEP_CAPTURE_COUNT; i++) { + step.capture_ids[i] = NONE; + } + return step; +} + +static void query_step__add_capture(QueryStep *self, uint16_t capture_id) { + for (unsigned i = 0; i < MAX_STEP_CAPTURE_COUNT; i++) { + if (self->capture_ids[i] == NONE) { + self->capture_ids[i] = capture_id; + break; + } + } +} + +static void query_step__remove_capture(QueryStep *self, uint16_t capture_id) { + for (unsigned i = 0; i < MAX_STEP_CAPTURE_COUNT; i++) { + if (self->capture_ids[i] == capture_id) { + self->capture_ids[i] = NONE; + while (i + 1 < MAX_STEP_CAPTURE_COUNT) { + if (self->capture_ids[i + 1] == NONE) break; + self->capture_ids[i] = self->capture_ids[i + 1]; + self->capture_ids[i + 1] = NONE; + i++; + } + break; + } + } +} + +/********************** + * StatePredecessorMap + **********************/ + +static inline StatePredecessorMap state_predecessor_map_new( + const TSLanguage *language +) { + return (StatePredecessorMap) { + .contents = ts_calloc( + (size_t)language->state_count * (MAX_STATE_PREDECESSOR_COUNT + 1), + sizeof(TSStateId) + ), + }; +} + +static inline void state_predecessor_map_delete(StatePredecessorMap *self) { + ts_free(self->contents); +} + +static inline void state_predecessor_map_add( + StatePredecessorMap *self, + TSStateId state, + TSStateId predecessor +) { + size_t index = (size_t)state * (MAX_STATE_PREDECESSOR_COUNT + 1); + TSStateId *count = &self->contents[index]; + if ( + *count == 0 || + (*count < MAX_STATE_PREDECESSOR_COUNT && self->contents[index + *count] != predecessor) + ) { + (*count)++; + self->contents[index + *count] = predecessor; + } +} + +static inline const TSStateId *state_predecessor_map_get( + const StatePredecessorMap *self, + TSStateId state, + unsigned *count +) { + size_t index = (size_t)state * (MAX_STATE_PREDECESSOR_COUNT + 1); + *count = self->contents[index]; + return &self->contents[index + 1]; +} + +/**************** + * AnalysisState + ****************/ + +static unsigned analysis_state__recursion_depth(const AnalysisState *self) { + unsigned result = 0; + for (unsigned i = 0; i < self->depth; i++) { + TSSymbol symbol = self->stack[i].parent_symbol; + for (unsigned j = 0; j < i; j++) { + if (self->stack[j].parent_symbol == symbol) { + result++; + break; + } + } + } + return result; +} + +static inline int analysis_state__compare_position( + AnalysisState *const *self, + AnalysisState *const *other +) { + for (unsigned i = 0; i < (*self)->depth; i++) { + if (i >= (*other)->depth) return -1; + if ((*self)->stack[i].child_index < (*other)->stack[i].child_index) return -1; + if ((*self)->stack[i].child_index > (*other)->stack[i].child_index) return 1; + } + if ((*self)->depth < (*other)->depth) return 1; + if ((*self)->step_index < (*other)->step_index) return -1; + if ((*self)->step_index > (*other)->step_index) return 1; + return 0; +} + +static inline int analysis_state__compare( + AnalysisState *const *self, + AnalysisState *const *other +) { + int result = analysis_state__compare_position(self, other); + if (result != 0) return result; + for (unsigned i = 0; i < (*self)->depth; i++) { + if ((*self)->stack[i].parent_symbol < (*other)->stack[i].parent_symbol) return -1; + if ((*self)->stack[i].parent_symbol > (*other)->stack[i].parent_symbol) return 1; + if ((*self)->stack[i].parse_state < (*other)->stack[i].parse_state) return -1; + if ((*self)->stack[i].parse_state > (*other)->stack[i].parse_state) return 1; + if ((*self)->stack[i].field_id < (*other)->stack[i].field_id) return -1; + if ((*self)->stack[i].field_id > (*other)->stack[i].field_id) return 1; + } + return 0; +} + +static inline AnalysisStateEntry *analysis_state__top(AnalysisState *self) { + if (self->depth == 0) { + return &self->stack[0]; + } + return &self->stack[self->depth - 1]; +} + +static inline bool analysis_state__has_supertype(AnalysisState *self, TSSymbol symbol) { + for (unsigned i = 0; i < self->depth; i++) { + if (self->stack[i].parent_symbol == symbol) return true; + } + return false; +} + +/****************** + * AnalysisStateSet + ******************/ + +// Obtains an `AnalysisState` instance, either by consuming one from this set's object pool, or by +// cloning one from scratch. +static inline AnalysisState *analysis_state_pool__clone_or_reuse( + AnalysisStateSet *self, + AnalysisState *borrowed_item +) { + AnalysisState *new_item; + if (self->size) { + new_item = array_pop(self); + } else { + new_item = ts_malloc(sizeof(AnalysisState)); + } + *new_item = *borrowed_item; + return new_item; +} + +// Inserts a clone of the passed-in item at the appropriate position to maintain ordering in this +// set. The set does not contain duplicates, so if the item is already present, it will not be +// inserted, and no clone will be made. +// +// The caller retains ownership of the passed-in memory. However, the clone that is created by this +// function will be managed by the state set. +static inline void analysis_state_set__insert_sorted( + AnalysisStateSet *self, + AnalysisStateSet *pool, + AnalysisState *borrowed_item +) { + unsigned index, exists; + array_search_sorted_with(self, analysis_state__compare, &borrowed_item, &index, &exists); + if (!exists) { + AnalysisState *new_item = analysis_state_pool__clone_or_reuse(pool, borrowed_item); + array_insert(self, index, new_item); + } +} + +// Inserts a clone of the passed-in item at the end position of this list. +// +// IMPORTANT: The caller MUST ENSURE that this item is larger (by the comparison function +// `analysis_state__compare`) than largest item already in this set. If items are inserted in the +// wrong order, the set will not function properly for future use. +// +// The caller retains ownership of the passed-in memory. However, the clone that is created by this +// function will be managed by the state set. +static inline void analysis_state_set__push( + AnalysisStateSet *self, + AnalysisStateSet *pool, + AnalysisState *borrowed_item +) { + AnalysisState *new_item = analysis_state_pool__clone_or_reuse(pool, borrowed_item); + array_push(self, new_item); +} + +// Removes all items from this set, returning it to an empty state. +static inline void analysis_state_set__clear(AnalysisStateSet *self, AnalysisStateSet *pool) { + array_push_all(pool, self); + array_clear(self); +} + +// Releases all memory that is managed with this state set, including any items currently present. +// After calling this function, the set is no longer suitable for use. +static inline void analysis_state_set__delete(AnalysisStateSet *self) { + for (unsigned i = 0; i < self->size; i++) { + ts_free(self->contents[i]); + } + array_delete(self); +} + +/**************** + * QueryAnalyzer + ****************/ + +static inline QueryAnalysis query_analysis__new(void) { + return (QueryAnalysis) { + .states = array_new(), + .next_states = array_new(), + .deeper_states = array_new(), + .state_pool = array_new(), + .final_step_indices = array_new(), + .finished_parent_symbols = array_new(), + .did_abort = false, + }; +} + +static inline void query_analysis__delete(QueryAnalysis *self) { + analysis_state_set__delete(&self->states); + analysis_state_set__delete(&self->next_states); + analysis_state_set__delete(&self->deeper_states); + analysis_state_set__delete(&self->state_pool); + array_delete(&self->final_step_indices); + array_delete(&self->finished_parent_symbols); +} + +/*********************** + * AnalysisSubgraphNode + ***********************/ + +static inline int analysis_subgraph_node__compare(const AnalysisSubgraphNode *self, const AnalysisSubgraphNode *other) { + if (self->state < other->state) return -1; + if (self->state > other->state) return 1; + if (self->child_index < other->child_index) return -1; + if (self->child_index > other->child_index) return 1; + if (self->done < other->done) return -1; + if (self->done > other->done) return 1; + if (self->production_id < other->production_id) return -1; + if (self->production_id > other->production_id) return 1; + return 0; +} + +/********* + * Query + *********/ + +// The `pattern_map` contains a mapping from TSSymbol values to indices in the +// `steps` array. For a given syntax node, the `pattern_map` makes it possible +// to quickly find the starting steps of all of the patterns whose root matches +// that node. Each entry has two fields: a `pattern_index`, which identifies one +// of the patterns in the query, and a `step_index`, which indicates the start +// offset of that pattern's steps within the `steps` array. +// +// The entries are sorted by the patterns' root symbols, and lookups use a +// binary search. This ensures that the cost of this initial lookup step +// scales logarithmically with the number of patterns in the query. +// +// This returns `true` if the symbol is present and `false` otherwise. +// If the symbol is not present `*result` is set to the index where the +// symbol should be inserted. +static inline bool ts_query__pattern_map_search( + const TSQuery *self, + TSSymbol needle, + uint32_t *result +) { + uint32_t base_index = self->wildcard_root_pattern_count; + uint32_t size = self->pattern_map.size - base_index; + if (size == 0) { + *result = base_index; + return false; + } + while (size > 1) { + uint32_t half_size = size / 2; + uint32_t mid_index = base_index + half_size; + TSSymbol mid_symbol = self->steps.contents[ + self->pattern_map.contents[mid_index].step_index + ].symbol; + if (needle > mid_symbol) base_index = mid_index; + size -= half_size; + } + + TSSymbol symbol = self->steps.contents[ + self->pattern_map.contents[base_index].step_index + ].symbol; + + if (needle > symbol) { + base_index++; + if (base_index < self->pattern_map.size) { + symbol = self->steps.contents[ + self->pattern_map.contents[base_index].step_index + ].symbol; + } + } + + *result = base_index; + return needle == symbol; +} + +// Insert a new pattern's start index into the pattern map, maintaining +// the pattern map's ordering invariant. +static inline void ts_query__pattern_map_insert( + TSQuery *self, + TSSymbol symbol, + PatternEntry new_entry +) { + uint32_t index; + ts_query__pattern_map_search(self, symbol, &index); + + // Ensure that the entries are sorted not only by symbol, but also + // by pattern_index. This way, states for earlier patterns will be + // initiated first, which allows the ordering of the states array + // to be maintained more efficiently. + while (index < self->pattern_map.size) { + PatternEntry *entry = &self->pattern_map.contents[index]; + if ( + self->steps.contents[entry->step_index].symbol == symbol && + entry->pattern_index < new_entry.pattern_index + ) { + index++; + } else { + break; + } + } + + array_insert(&self->pattern_map, index, new_entry); +} + +// Walk the subgraph for this non-terminal, tracking all of the possible +// sequences of progress within the pattern. +static void ts_query__perform_analysis( + TSQuery *self, + const AnalysisSubgraphArray *subgraphs, + QueryAnalysis *analysis +) { + unsigned recursion_depth_limit = 0; + unsigned prev_final_step_count = 0; + array_clear(&analysis->final_step_indices); + array_clear(&analysis->finished_parent_symbols); + + for (unsigned iteration = 0;; iteration++) { + if (iteration == MAX_ANALYSIS_ITERATION_COUNT) { + analysis->did_abort = true; + break; + } + + #ifdef DEBUG_ANALYZE_QUERY + printf("Iteration: %u. Final step indices:", iteration); + for (unsigned j = 0; j < analysis->final_step_indices.size; j++) { + printf(" %4u", analysis->final_step_indices.contents[j]); + } + printf("\n"); + for (unsigned j = 0; j < analysis->states.size; j++) { + AnalysisState *state = analysis->states.contents[j]; + printf(" %3u: step: %u, stack: [", j, state->step_index); + for (unsigned k = 0; k < state->depth; k++) { + printf( + " {%s, child: %u, state: %4u", + self->language->symbol_names[state->stack[k].parent_symbol], + state->stack[k].child_index, + state->stack[k].parse_state + ); + if (state->stack[k].field_id) printf(", field: %s", self->language->field_names[state->stack[k].field_id]); + if (state->stack[k].done) printf(", DONE"); + printf("}"); + } + printf(" ]\n"); + } + #endif + + // If no further progress can be made within the current recursion depth limit, then + // bump the depth limit by one, and continue to process the states the exceeded the + // limit. But only allow this if progress has been made since the last time the depth + // limit was increased. + if (analysis->states.size == 0) { + if ( + analysis->deeper_states.size > 0 && + analysis->final_step_indices.size > prev_final_step_count + ) { + #ifdef DEBUG_ANALYZE_QUERY + printf("Increase recursion depth limit to %u\n", recursion_depth_limit + 1); + #endif + + prev_final_step_count = analysis->final_step_indices.size; + recursion_depth_limit++; + AnalysisStateSet _states = analysis->states; + analysis->states = analysis->deeper_states; + analysis->deeper_states = _states; + continue; + } + + break; + } + + analysis_state_set__clear(&analysis->next_states, &analysis->state_pool); + for (unsigned j = 0; j < analysis->states.size; j++) { + AnalysisState * const state = analysis->states.contents[j]; + + // For efficiency, it's important to avoid processing the same analysis state more + // than once. To achieve this, keep the states in order of ascending position within + // their hypothetical syntax trees. In each iteration of this loop, start by advancing + // the states that have made the least progress. Avoid advancing states that have already + // made more progress. + if (analysis->next_states.size > 0) { + int comparison = analysis_state__compare_position( + &state, + array_back(&analysis->next_states) + ); + if (comparison == 0) { + analysis_state_set__insert_sorted(&analysis->next_states, &analysis->state_pool, state); + continue; + } else if (comparison > 0) { + #ifdef DEBUG_ANALYZE_QUERY + printf("Terminate iteration at state %u\n", j); + #endif + while (j < analysis->states.size) { + analysis_state_set__push( + &analysis->next_states, + &analysis->state_pool, + analysis->states.contents[j] + ); + j++; + } + break; + } + } + + const TSStateId parse_state = analysis_state__top(state)->parse_state; + const TSSymbol parent_symbol = analysis_state__top(state)->parent_symbol; + const TSFieldId parent_field_id = analysis_state__top(state)->field_id; + const unsigned child_index = analysis_state__top(state)->child_index; + const QueryStep * const step = &self->steps.contents[state->step_index]; + + unsigned subgraph_index, exists; + array_search_sorted_by(subgraphs, .symbol, parent_symbol, &subgraph_index, &exists); + if (!exists) continue; + const AnalysisSubgraph *subgraph = &subgraphs->contents[subgraph_index]; + + // Follow every possible path in the parse table, but only visit states that + // are part of the subgraph for the current symbol. + LookaheadIterator lookahead_iterator = ts_language_lookaheads(self->language, parse_state); + while (ts_lookahead_iterator__next(&lookahead_iterator)) { + TSSymbol sym = lookahead_iterator.symbol; + + AnalysisSubgraphNode successor = { + .state = parse_state, + .child_index = child_index, + }; + if (lookahead_iterator.action_count) { + const TSParseAction *action = &lookahead_iterator.actions[lookahead_iterator.action_count - 1]; + if (action->type == TSParseActionTypeShift) { + if (!action->shift.extra) { + successor.state = action->shift.state; + successor.child_index++; + } + } else { + continue; + } + } else if (lookahead_iterator.next_state != 0) { + successor.state = lookahead_iterator.next_state; + successor.child_index++; + } else { + continue; + } + + unsigned node_index; + array_search_sorted_with( + &subgraph->nodes, + analysis_subgraph_node__compare, &successor, + &node_index, &exists + ); + while (node_index < subgraph->nodes.size) { + AnalysisSubgraphNode *node = &subgraph->nodes.contents[node_index++]; + if (node->state != successor.state || node->child_index != successor.child_index) break; + + // Use the subgraph to determine what alias and field will eventually be applied + // to this child node. + TSSymbol alias = ts_language_alias_at(self->language, node->production_id, child_index); + TSSymbol visible_symbol = alias + ? alias + : self->language->symbol_metadata[sym].visible + ? self->language->public_symbol_map[sym] + : 0; + TSFieldId field_id = parent_field_id; + if (!field_id) { + const TSFieldMapEntry *field_map, *field_map_end; + ts_language_field_map(self->language, node->production_id, &field_map, &field_map_end); + for (; field_map != field_map_end; field_map++) { + if (!field_map->inherited && field_map->child_index == child_index) { + field_id = field_map->field_id; + break; + } + } + } + + // Create a new state that has advanced past this hypothetical subtree. + AnalysisState next_state = *state; + AnalysisStateEntry *next_state_top = analysis_state__top(&next_state); + next_state_top->child_index = successor.child_index; + next_state_top->parse_state = successor.state; + if (node->done) next_state_top->done = true; + + // Determine if this hypothetical child node would match the current step + // of the query pattern. + bool does_match = false; + if (visible_symbol) { + does_match = true; + if (step->symbol == WILDCARD_SYMBOL) { + if ( + step->is_named && + !self->language->symbol_metadata[visible_symbol].named + ) does_match = false; + } else if (step->symbol != visible_symbol) { + does_match = false; + } + if (step->field && step->field != field_id) { + does_match = false; + } + if ( + step->supertype_symbol && + !analysis_state__has_supertype(state, step->supertype_symbol) + ) does_match = false; + } + + // If this child is hidden, then descend into it and walk through its children. + // If the top entry of the stack is at the end of its rule, then that entry can + // be replaced. Otherwise, push a new entry onto the stack. + else if (sym >= self->language->token_count) { + if (!next_state_top->done) { + if (next_state.depth + 1 >= MAX_ANALYSIS_STATE_DEPTH) { + #ifdef DEBUG_ANALYZE_QUERY + printf("Exceeded depth limit for state %u\n", j); + #endif + + analysis->did_abort = true; + continue; + } + + next_state.depth++; + next_state_top = analysis_state__top(&next_state); + } + + *next_state_top = (AnalysisStateEntry) { + .parse_state = parse_state, + .parent_symbol = sym, + .child_index = 0, + .field_id = field_id, + .done = false, + }; + + if (analysis_state__recursion_depth(&next_state) > recursion_depth_limit) { + analysis_state_set__insert_sorted( + &analysis->deeper_states, + &analysis->state_pool, + &next_state + ); + continue; + } + } + + // Pop from the stack when this state reached the end of its current syntax node. + while (next_state.depth > 0 && next_state_top->done) { + next_state.depth--; + next_state_top = analysis_state__top(&next_state); + } + + // If this hypothetical child did match the current step of the query pattern, + // then advance to the next step at the current depth. This involves skipping + // over any descendant steps of the current child. + const QueryStep *next_step = step; + if (does_match) { + for (;;) { + next_state.step_index++; + next_step = &self->steps.contents[next_state.step_index]; + if ( + next_step->depth == PATTERN_DONE_MARKER || + next_step->depth <= step->depth + ) break; + } + } else if (successor.state == parse_state) { + continue; + } + + for (;;) { + // Skip pass-through states. Although these states have alternatives, they are only + // used to implement repetitions, and query analysis does not need to process + // repetitions in order to determine whether steps are possible and definite. + if (next_step->is_pass_through) { + next_state.step_index++; + next_step++; + continue; + } + + // If the pattern is finished or hypothetical parent node is complete, then + // record that matching can terminate at this step of the pattern. Otherwise, + // add this state to the list of states to process on the next iteration. + if (!next_step->is_dead_end) { + bool did_finish_pattern = self->steps.contents[next_state.step_index].depth != step->depth; + if (did_finish_pattern) { + array_insert_sorted_by(&analysis->finished_parent_symbols, , state->root_symbol); + } else if (next_state.depth == 0) { + array_insert_sorted_by(&analysis->final_step_indices, , next_state.step_index); + } else { + analysis_state_set__insert_sorted(&analysis->next_states, &analysis->state_pool, &next_state); + } + } + + // If the state has advanced to a step with an alternative step, then add another state + // at that alternative step. This process is simpler than the process of actually matching a + // pattern during query execution, because for the purposes of query analysis, there is no + // need to process repetitions. + if ( + does_match && + next_step->alternative_index != NONE && + next_step->alternative_index > next_state.step_index + ) { + next_state.step_index = next_step->alternative_index; + next_step = &self->steps.contents[next_state.step_index]; + } else { + break; + } + } + } + } + } + + AnalysisStateSet _states = analysis->states; + analysis->states = analysis->next_states; + analysis->next_states = _states; + } +} + +static bool ts_query__analyze_patterns(TSQuery *self, unsigned *error_offset) { + Array(uint16_t) non_rooted_pattern_start_steps = array_new(); + for (unsigned i = 0; i < self->pattern_map.size; i++) { + PatternEntry *pattern = &self->pattern_map.contents[i]; + if (!pattern->is_rooted) { + QueryStep *step = &self->steps.contents[pattern->step_index]; + if (step->symbol != WILDCARD_SYMBOL) { + array_push(&non_rooted_pattern_start_steps, i); + } + } + } + + // Walk forward through all of the steps in the query, computing some + // basic information about each step. Mark all of the steps that contain + // captures, and record the indices of all of the steps that have child steps. + Array(uint32_t) parent_step_indices = array_new(); + for (unsigned i = 0; i < self->steps.size; i++) { + QueryStep *step = &self->steps.contents[i]; + if (step->depth == PATTERN_DONE_MARKER) { + step->parent_pattern_guaranteed = true; + step->root_pattern_guaranteed = true; + continue; + } + + bool has_children = false; + bool is_wildcard = step->symbol == WILDCARD_SYMBOL; + step->contains_captures = step->capture_ids[0] != NONE; + for (unsigned j = i + 1; j < self->steps.size; j++) { + QueryStep *next_step = &self->steps.contents[j]; + if ( + next_step->depth == PATTERN_DONE_MARKER || + next_step->depth <= step->depth + ) break; + if (next_step->capture_ids[0] != NONE) { + step->contains_captures = true; + } + if (!is_wildcard) { + next_step->root_pattern_guaranteed = true; + next_step->parent_pattern_guaranteed = true; + } + has_children = true; + } + + if (has_children && !is_wildcard) { + array_push(&parent_step_indices, i); + } + } + + // For every parent symbol in the query, initialize an 'analysis subgraph'. + // This subgraph lists all of the states in the parse table that are directly + // involved in building subtrees for this symbol. + // + // In addition to the parent symbols in the query, construct subgraphs for all + // of the hidden symbols in the grammar, because these might occur within + // one of the parent nodes, such that their children appear to belong to the + // parent. + AnalysisSubgraphArray subgraphs = array_new(); + for (unsigned i = 0; i < parent_step_indices.size; i++) { + uint32_t parent_step_index = parent_step_indices.contents[i]; + TSSymbol parent_symbol = self->steps.contents[parent_step_index].symbol; + AnalysisSubgraph subgraph = { .symbol = parent_symbol }; + array_insert_sorted_by(&subgraphs, .symbol, subgraph); + } + for (TSSymbol sym = (uint16_t)self->language->token_count; sym < (uint16_t)self->language->symbol_count; sym++) { + if (!ts_language_symbol_metadata(self->language, sym).visible) { + AnalysisSubgraph subgraph = { .symbol = sym }; + array_insert_sorted_by(&subgraphs, .symbol, subgraph); + } + } + + // Scan the parse table to find the data needed to populate these subgraphs. + // Collect three things during this scan: + // 1) All of the parse states where one of these symbols can start. + // 2) All of the parse states where one of these symbols can end, along + // with information about the node that would be created. + // 3) A list of predecessor states for each state. + StatePredecessorMap predecessor_map = state_predecessor_map_new(self->language); + for (TSStateId state = 1; state < (uint16_t)self->language->state_count; state++) { + unsigned subgraph_index, exists; + LookaheadIterator lookahead_iterator = ts_language_lookaheads(self->language, state); + while (ts_lookahead_iterator__next(&lookahead_iterator)) { + if (lookahead_iterator.action_count) { + for (unsigned i = 0; i < lookahead_iterator.action_count; i++) { + const TSParseAction *action = &lookahead_iterator.actions[i]; + if (action->type == TSParseActionTypeReduce) { + const TSSymbol *aliases, *aliases_end; + ts_language_aliases_for_symbol( + self->language, + action->reduce.symbol, + &aliases, + &aliases_end + ); + for (const TSSymbol *symbol = aliases; symbol < aliases_end; symbol++) { + array_search_sorted_by( + &subgraphs, + .symbol, + *symbol, + &subgraph_index, + &exists + ); + if (exists) { + AnalysisSubgraph *subgraph = &subgraphs.contents[subgraph_index]; + if (subgraph->nodes.size == 0 || array_back(&subgraph->nodes)->state != state) { + array_push(&subgraph->nodes, ((AnalysisSubgraphNode) { + .state = state, + .production_id = action->reduce.production_id, + .child_index = action->reduce.child_count, + .done = true, + })); + } + } + } + } else if (action->type == TSParseActionTypeShift && !action->shift.extra) { + TSStateId next_state = action->shift.state; + state_predecessor_map_add(&predecessor_map, next_state, state); + } + } + } else if (lookahead_iterator.next_state != 0) { + if (lookahead_iterator.next_state != state) { + state_predecessor_map_add(&predecessor_map, lookahead_iterator.next_state, state); + } + if (ts_language_state_is_primary(self->language, state)) { + const TSSymbol *aliases, *aliases_end; + ts_language_aliases_for_symbol( + self->language, + lookahead_iterator.symbol, + &aliases, + &aliases_end + ); + for (const TSSymbol *symbol = aliases; symbol < aliases_end; symbol++) { + array_search_sorted_by( + &subgraphs, + .symbol, + *symbol, + &subgraph_index, + &exists + ); + if (exists) { + AnalysisSubgraph *subgraph = &subgraphs.contents[subgraph_index]; + if ( + subgraph->start_states.size == 0 || + *array_back(&subgraph->start_states) != state + ) + array_push(&subgraph->start_states, state); + } + } + } + } + } + } + + // For each subgraph, compute the preceding states by walking backward + // from the end states using the predecessor map. + Array(AnalysisSubgraphNode) next_nodes = array_new(); + for (unsigned i = 0; i < subgraphs.size; i++) { + AnalysisSubgraph *subgraph = &subgraphs.contents[i]; + if (subgraph->nodes.size == 0) { + array_delete(&subgraph->start_states); + array_erase(&subgraphs, i); + i--; + continue; + } + array_assign(&next_nodes, &subgraph->nodes); + while (next_nodes.size > 0) { + AnalysisSubgraphNode node = array_pop(&next_nodes); + if (node.child_index > 1) { + unsigned predecessor_count; + const TSStateId *predecessors = state_predecessor_map_get( + &predecessor_map, + node.state, + &predecessor_count + ); + for (unsigned j = 0; j < predecessor_count; j++) { + AnalysisSubgraphNode predecessor_node = { + .state = predecessors[j], + .child_index = node.child_index - 1, + .production_id = node.production_id, + .done = false, + }; + unsigned index, exists; + array_search_sorted_with( + &subgraph->nodes, analysis_subgraph_node__compare, &predecessor_node, + &index, &exists + ); + if (!exists) { + array_insert(&subgraph->nodes, index, predecessor_node); + array_push(&next_nodes, predecessor_node); + } + } + } + } + } + + #ifdef DEBUG_ANALYZE_QUERY + printf("\nSubgraphs:\n"); + for (unsigned i = 0; i < subgraphs.size; i++) { + AnalysisSubgraph *subgraph = &subgraphs.contents[i]; + printf(" %u, %s:\n", subgraph->symbol, ts_language_symbol_name(self->language, subgraph->symbol)); + for (unsigned j = 0; j < subgraph->start_states.size; j++) { + printf( + " {state: %u}\n", + subgraph->start_states.contents[j] + ); + } + for (unsigned j = 0; j < subgraph->nodes.size; j++) { + AnalysisSubgraphNode *node = &subgraph->nodes.contents[j]; + printf( + " {state: %u, child_index: %u, production_id: %u, done: %d}\n", + node->state, node->child_index, node->production_id, node->done + ); + } + printf("\n"); + } + #endif + + // For each non-terminal pattern, determine if the pattern can successfully match, + // and identify all of the possible children within the pattern where matching could fail. + bool all_patterns_are_valid = true; + QueryAnalysis analysis = query_analysis__new(); + for (unsigned i = 0; i < parent_step_indices.size; i++) { + uint16_t parent_step_index = parent_step_indices.contents[i]; + uint16_t parent_depth = self->steps.contents[parent_step_index].depth; + TSSymbol parent_symbol = self->steps.contents[parent_step_index].symbol; + if (parent_symbol == ts_builtin_sym_error) continue; + + // Find the subgraph that corresponds to this pattern's root symbol. If the pattern's + // root symbol is a terminal, then return an error. + unsigned subgraph_index, exists; + array_search_sorted_by(&subgraphs, .symbol, parent_symbol, &subgraph_index, &exists); + if (!exists) { + unsigned first_child_step_index = parent_step_index + 1; + uint32_t j, child_exists; + array_search_sorted_by(&self->step_offsets, .step_index, first_child_step_index, &j, &child_exists); + assert(child_exists); + *error_offset = self->step_offsets.contents[j].byte_offset; + all_patterns_are_valid = false; + break; + } + + // Initialize an analysis state at every parse state in the table where + // this parent symbol can occur. + AnalysisSubgraph *subgraph = &subgraphs.contents[subgraph_index]; + analysis_state_set__clear(&analysis.states, &analysis.state_pool); + analysis_state_set__clear(&analysis.deeper_states, &analysis.state_pool); + for (unsigned j = 0; j < subgraph->start_states.size; j++) { + TSStateId parse_state = subgraph->start_states.contents[j]; + analysis_state_set__push(&analysis.states, &analysis.state_pool, &((AnalysisState) { + .step_index = parent_step_index + 1, + .stack = { + [0] = { + .parse_state = parse_state, + .parent_symbol = parent_symbol, + .child_index = 0, + .field_id = 0, + .done = false, + }, + }, + .depth = 1, + .root_symbol = parent_symbol, + })); + } + + #ifdef DEBUG_ANALYZE_QUERY + printf( + "\nWalk states for %s:\n", + ts_language_symbol_name(self->language, analysis.states.contents[0]->stack[0].parent_symbol) + ); + #endif + + analysis.did_abort = false; + ts_query__perform_analysis(self, &subgraphs, &analysis); + + // If this pattern could not be fully analyzed, then every step should + // be considered fallible. + if (analysis.did_abort) { + for (unsigned j = parent_step_index + 1; j < self->steps.size; j++) { + QueryStep *step = &self->steps.contents[j]; + if ( + step->depth <= parent_depth || + step->depth == PATTERN_DONE_MARKER + ) break; + if (!step->is_dead_end) { + step->parent_pattern_guaranteed = false; + step->root_pattern_guaranteed = false; + } + } + continue; + } + + // If this pattern cannot match, store the pattern index so that it can be + // returned to the caller. + if (analysis.finished_parent_symbols.size == 0) { + assert(analysis.final_step_indices.size > 0); + uint16_t impossible_step_index = *array_back(&analysis.final_step_indices); + uint32_t j, impossible_exists; + array_search_sorted_by(&self->step_offsets, .step_index, impossible_step_index, &j, &impossible_exists); + if (j >= self->step_offsets.size) j = self->step_offsets.size - 1; + *error_offset = self->step_offsets.contents[j].byte_offset; + all_patterns_are_valid = false; + break; + } + + // Mark as fallible any step where a match terminated. + // Later, this property will be propagated to all of the step's predecessors. + for (unsigned j = 0; j < analysis.final_step_indices.size; j++) { + uint32_t final_step_index = analysis.final_step_indices.contents[j]; + QueryStep *step = &self->steps.contents[final_step_index]; + if ( + step->depth != PATTERN_DONE_MARKER && + step->depth > parent_depth && + !step->is_dead_end + ) { + step->parent_pattern_guaranteed = false; + step->root_pattern_guaranteed = false; + } + } + } + + // Mark as indefinite any step with captures that are used in predicates. + Array(uint16_t) predicate_capture_ids = array_new(); + for (unsigned i = 0; i < self->patterns.size; i++) { + QueryPattern *pattern = &self->patterns.contents[i]; + + // Gather all of the captures that are used in predicates for this pattern. + array_clear(&predicate_capture_ids); + for ( + unsigned start = pattern->predicate_steps.offset, + end = start + pattern->predicate_steps.length, + j = start; j < end; j++ + ) { + TSQueryPredicateStep *step = &self->predicate_steps.contents[j]; + if (step->type == TSQueryPredicateStepTypeCapture) { + uint16_t value_id = step->value_id; + array_insert_sorted_by(&predicate_capture_ids, , value_id); + } + } + + // Find all of the steps that have these captures. + for ( + unsigned start = pattern->steps.offset, + end = start + pattern->steps.length, + j = start; j < end; j++ + ) { + QueryStep *step = &self->steps.contents[j]; + for (unsigned k = 0; k < MAX_STEP_CAPTURE_COUNT; k++) { + uint16_t capture_id = step->capture_ids[k]; + if (capture_id == NONE) break; + unsigned index, exists; + array_search_sorted_by(&predicate_capture_ids, , capture_id, &index, &exists); + if (exists) { + step->root_pattern_guaranteed = false; + break; + } + } + } + } + + // Propagate fallibility. If a pattern is fallible at a given step, then it is + // fallible at all of its preceding steps. + bool done = self->steps.size == 0; + while (!done) { + done = true; + for (unsigned i = self->steps.size - 1; i > 0; i--) { + QueryStep *step = &self->steps.contents[i]; + if (step->depth == PATTERN_DONE_MARKER) continue; + + // Determine if this step is definite or has definite alternatives. + bool parent_pattern_guaranteed = false; + for (;;) { + if (step->root_pattern_guaranteed) { + parent_pattern_guaranteed = true; + break; + } + if (step->alternative_index == NONE || step->alternative_index < i) { + break; + } + step = &self->steps.contents[step->alternative_index]; + } + + // If not, mark its predecessor as indefinite. + if (!parent_pattern_guaranteed) { + QueryStep *prev_step = &self->steps.contents[i - 1]; + if ( + !prev_step->is_dead_end && + prev_step->depth != PATTERN_DONE_MARKER && + prev_step->root_pattern_guaranteed + ) { + prev_step->root_pattern_guaranteed = false; + done = false; + } + } + } + } + + #ifdef DEBUG_ANALYZE_QUERY + printf("Steps:\n"); + for (unsigned i = 0; i < self->steps.size; i++) { + QueryStep *step = &self->steps.contents[i]; + if (step->depth == PATTERN_DONE_MARKER) { + printf(" %u: DONE\n", i); + } else { + printf( + " %u: {symbol: %s, field: %s, depth: %u, parent_pattern_guaranteed: %d, root_pattern_guaranteed: %d}\n", + i, + (step->symbol == WILDCARD_SYMBOL) + ? "ANY" + : ts_language_symbol_name(self->language, step->symbol), + (step->field ? ts_language_field_name_for_id(self->language, step->field) : "-"), + step->depth, + step->parent_pattern_guaranteed, + step->root_pattern_guaranteed + ); + } + } + #endif + + // Determine which repetition symbols in this language have the possibility + // of matching non-rooted patterns in this query. These repetition symbols + // prevent certain optimizations with range restrictions. + analysis.did_abort = false; + for (uint32_t i = 0; i < non_rooted_pattern_start_steps.size; i++) { + uint16_t pattern_entry_index = non_rooted_pattern_start_steps.contents[i]; + PatternEntry *pattern_entry = &self->pattern_map.contents[pattern_entry_index]; + + analysis_state_set__clear(&analysis.states, &analysis.state_pool); + analysis_state_set__clear(&analysis.deeper_states, &analysis.state_pool); + for (unsigned j = 0; j < subgraphs.size; j++) { + AnalysisSubgraph *subgraph = &subgraphs.contents[j]; + TSSymbolMetadata metadata = ts_language_symbol_metadata(self->language, subgraph->symbol); + if (metadata.visible || metadata.named) continue; + + for (uint32_t k = 0; k < subgraph->start_states.size; k++) { + TSStateId parse_state = subgraph->start_states.contents[k]; + analysis_state_set__push(&analysis.states, &analysis.state_pool, &((AnalysisState) { + .step_index = pattern_entry->step_index, + .stack = { + [0] = { + .parse_state = parse_state, + .parent_symbol = subgraph->symbol, + .child_index = 0, + .field_id = 0, + .done = false, + }, + }, + .root_symbol = subgraph->symbol, + .depth = 1, + })); + } + } + + #ifdef DEBUG_ANALYZE_QUERY + printf("\nWalk states for rootless pattern step %u:\n", pattern_entry->step_index); + #endif + + ts_query__perform_analysis( + self, + &subgraphs, + &analysis + ); + + if (analysis.finished_parent_symbols.size > 0) { + self->patterns.contents[pattern_entry->pattern_index].is_non_local = true; + } + + for (unsigned k = 0; k < analysis.finished_parent_symbols.size; k++) { + TSSymbol symbol = analysis.finished_parent_symbols.contents[k]; + array_insert_sorted_by(&self->repeat_symbols_with_rootless_patterns, , symbol); + } + } + + #ifdef DEBUG_ANALYZE_QUERY + if (self->repeat_symbols_with_rootless_patterns.size > 0) { + printf("\nRepetition symbols with rootless patterns:\n"); + printf("aborted analysis: %d\n", analysis.did_abort); + for (unsigned i = 0; i < self->repeat_symbols_with_rootless_patterns.size; i++) { + TSSymbol symbol = self->repeat_symbols_with_rootless_patterns.contents[i]; + printf(" %u, %s\n", symbol, ts_language_symbol_name(self->language, symbol)); + } + printf("\n"); + } + #endif + + // Cleanup + for (unsigned i = 0; i < subgraphs.size; i++) { + array_delete(&subgraphs.contents[i].start_states); + array_delete(&subgraphs.contents[i].nodes); + } + array_delete(&subgraphs); + query_analysis__delete(&analysis); + array_delete(&next_nodes); + array_delete(&non_rooted_pattern_start_steps); + array_delete(&parent_step_indices); + array_delete(&predicate_capture_ids); + state_predecessor_map_delete(&predecessor_map); + + return all_patterns_are_valid; +} + +static void ts_query__add_negated_fields( + TSQuery *self, + uint16_t step_index, + TSFieldId *field_ids, + uint16_t field_count +) { + QueryStep *step = &self->steps.contents[step_index]; + + // The negated field array stores a list of field lists, separated by zeros. + // Try to find the start index of an existing list that matches this new list. + bool failed_match = false; + unsigned match_count = 0; + unsigned start_i = 0; + for (unsigned i = 0; i < self->negated_fields.size; i++) { + TSFieldId existing_field_id = self->negated_fields.contents[i]; + + // At each zero value, terminate the match attempt. If we've exactly + // matched the new field list, then reuse this index. Otherwise, + // start over the matching process. + if (existing_field_id == 0) { + if (match_count == field_count) { + step->negated_field_list_id = start_i; + return; + } else { + start_i = i + 1; + match_count = 0; + failed_match = false; + } + } + + // If the existing list matches our new list so far, then advance + // to the next element of the new list. + else if ( + match_count < field_count && + existing_field_id == field_ids[match_count] && + !failed_match + ) { + match_count++; + } + + // Otherwise, this existing list has failed to match. + else { + match_count = 0; + failed_match = true; + } + } + + step->negated_field_list_id = self->negated_fields.size; + array_extend(&self->negated_fields, field_count, field_ids); + array_push(&self->negated_fields, 0); +} + +static TSQueryError ts_query__parse_string_literal( + TSQuery *self, + Stream *stream +) { + const char *string_start = stream->input; + if (stream->next != '"') return TSQueryErrorSyntax; + stream_advance(stream); + const char *prev_position = stream->input; + + bool is_escaped = false; + array_clear(&self->string_buffer); + for (;;) { + if (is_escaped) { + is_escaped = false; + switch (stream->next) { + case 'n': + array_push(&self->string_buffer, '\n'); + break; + case 'r': + array_push(&self->string_buffer, '\r'); + break; + case 't': + array_push(&self->string_buffer, '\t'); + break; + case '0': + array_push(&self->string_buffer, '\0'); + break; + default: + array_extend(&self->string_buffer, stream->next_size, stream->input); + break; + } + prev_position = stream->input + stream->next_size; + } else { + if (stream->next == '\\') { + array_extend(&self->string_buffer, (uint32_t)(stream->input - prev_position), prev_position); + prev_position = stream->input + 1; + is_escaped = true; + } else if (stream->next == '"') { + array_extend(&self->string_buffer, (uint32_t)(stream->input - prev_position), prev_position); + stream_advance(stream); + return TSQueryErrorNone; + } else if (stream->next == '\n') { + stream_reset(stream, string_start); + return TSQueryErrorSyntax; + } + } + if (!stream_advance(stream)) { + stream_reset(stream, string_start); + return TSQueryErrorSyntax; + } + } +} + +// Parse a single predicate associated with a pattern, adding it to the +// query's internal `predicate_steps` array. Predicates are arbitrary +// S-expressions associated with a pattern which are meant to be handled at +// a higher level of abstraction, such as the Rust/JavaScript bindings. They +// can contain '@'-prefixed capture names, double-quoted strings, and bare +// symbols, which also represent strings. +static TSQueryError ts_query__parse_predicate( + TSQuery *self, + Stream *stream +) { + if (!stream_is_ident_start(stream)) return TSQueryErrorSyntax; + const char *predicate_name = stream->input; + stream_scan_identifier(stream); + uint32_t length = (uint32_t)(stream->input - predicate_name); + uint16_t id = symbol_table_insert_name( + &self->predicate_values, + predicate_name, + length + ); + array_push(&self->predicate_steps, ((TSQueryPredicateStep) { + .type = TSQueryPredicateStepTypeString, + .value_id = id, + })); + stream_skip_whitespace(stream); + + for (;;) { + if (stream->next == ')') { + stream_advance(stream); + stream_skip_whitespace(stream); + array_push(&self->predicate_steps, ((TSQueryPredicateStep) { + .type = TSQueryPredicateStepTypeDone, + .value_id = 0, + })); + break; + } + + // Parse an '@'-prefixed capture name + else if (stream->next == '@') { + stream_advance(stream); + + // Parse the capture name + if (!stream_is_ident_start(stream)) return TSQueryErrorSyntax; + const char *capture_name = stream->input; + stream_scan_identifier(stream); + uint32_t capture_length = (uint32_t)(stream->input - capture_name); + + // Add the capture id to the first step of the pattern + int capture_id = symbol_table_id_for_name( + &self->captures, + capture_name, + capture_length + ); + if (capture_id == -1) { + stream_reset(stream, capture_name); + return TSQueryErrorCapture; + } + + array_push(&self->predicate_steps, ((TSQueryPredicateStep) { + .type = TSQueryPredicateStepTypeCapture, + .value_id = capture_id, + })); + } + + // Parse a string literal + else if (stream->next == '"') { + TSQueryError e = ts_query__parse_string_literal(self, stream); + if (e) return e; + uint16_t query_id = symbol_table_insert_name( + &self->predicate_values, + self->string_buffer.contents, + self->string_buffer.size + ); + array_push(&self->predicate_steps, ((TSQueryPredicateStep) { + .type = TSQueryPredicateStepTypeString, + .value_id = query_id, + })); + } + + // Parse a bare symbol + else if (stream_is_ident_start(stream)) { + const char *symbol_start = stream->input; + stream_scan_identifier(stream); + uint32_t symbol_length = (uint32_t)(stream->input - symbol_start); + uint16_t query_id = symbol_table_insert_name( + &self->predicate_values, + symbol_start, + symbol_length + ); + array_push(&self->predicate_steps, ((TSQueryPredicateStep) { + .type = TSQueryPredicateStepTypeString, + .value_id = query_id, + })); + } + + else { + return TSQueryErrorSyntax; + } + + stream_skip_whitespace(stream); + } + + return 0; +} + +// Read one S-expression pattern from the stream, and incorporate it into +// the query's internal state machine representation. For nested patterns, +// this function calls itself recursively. +// +// The caller is responsible for passing in a dedicated CaptureQuantifiers. +// These should not be shared between different calls to ts_query__parse_pattern! +static TSQueryError ts_query__parse_pattern( + TSQuery *self, + Stream *stream, + uint32_t depth, + bool is_immediate, + CaptureQuantifiers *capture_quantifiers +) { + if (stream->next == 0) return TSQueryErrorSyntax; + if (stream->next == ')' || stream->next == ']') return PARENT_DONE; + + const uint32_t starting_step_index = self->steps.size; + + // Store the byte offset of each step in the query. + if ( + self->step_offsets.size == 0 || + array_back(&self->step_offsets)->step_index != starting_step_index + ) { + array_push(&self->step_offsets, ((StepOffset) { + .step_index = starting_step_index, + .byte_offset = stream_offset(stream), + })); + } + + // An open bracket is the start of an alternation. + if (stream->next == '[') { + stream_advance(stream); + stream_skip_whitespace(stream); + + // Parse each branch, and add a placeholder step in between the branches. + Array(uint32_t) branch_step_indices = array_new(); + CaptureQuantifiers branch_capture_quantifiers = capture_quantifiers_new(); + for (;;) { + uint32_t start_index = self->steps.size; + TSQueryError e = ts_query__parse_pattern( + self, + stream, + depth, + is_immediate, + &branch_capture_quantifiers + ); + + if (e == PARENT_DONE) { + if (stream->next == ']' && branch_step_indices.size > 0) { + stream_advance(stream); + break; + } + e = TSQueryErrorSyntax; + } + if (e) { + capture_quantifiers_delete(&branch_capture_quantifiers); + array_delete(&branch_step_indices); + return e; + } + + if (start_index == starting_step_index) { + capture_quantifiers_replace(capture_quantifiers, &branch_capture_quantifiers); + } else { + capture_quantifiers_join_all(capture_quantifiers, &branch_capture_quantifiers); + } + + array_push(&branch_step_indices, start_index); + array_push(&self->steps, query_step__new(0, depth, false)); + capture_quantifiers_clear(&branch_capture_quantifiers); + } + (void)array_pop(&self->steps); + + // For all of the branches except for the last one, add the subsequent branch as an + // alternative, and link the end of the branch to the current end of the steps. + for (unsigned i = 0; i < branch_step_indices.size - 1; i++) { + uint32_t step_index = branch_step_indices.contents[i]; + uint32_t next_step_index = branch_step_indices.contents[i + 1]; + QueryStep *start_step = &self->steps.contents[step_index]; + QueryStep *end_step = &self->steps.contents[next_step_index - 1]; + start_step->alternative_index = next_step_index; + end_step->alternative_index = self->steps.size; + end_step->is_dead_end = true; + } + + capture_quantifiers_delete(&branch_capture_quantifiers); + array_delete(&branch_step_indices); + } + + // An open parenthesis can be the start of three possible constructs: + // * A grouped sequence + // * A predicate + // * A named node + else if (stream->next == '(') { + stream_advance(stream); + stream_skip_whitespace(stream); + + // If this parenthesis is followed by a node, then it represents a grouped sequence. + if (stream->next == '(' || stream->next == '"' || stream->next == '[') { + bool child_is_immediate = is_immediate; + CaptureQuantifiers child_capture_quantifiers = capture_quantifiers_new(); + for (;;) { + if (stream->next == '.') { + child_is_immediate = true; + stream_advance(stream); + stream_skip_whitespace(stream); + } + TSQueryError e = ts_query__parse_pattern( + self, + stream, + depth, + child_is_immediate, + &child_capture_quantifiers + ); + if (e == PARENT_DONE) { + if (stream->next == ')') { + stream_advance(stream); + break; + } + e = TSQueryErrorSyntax; + } + if (e) { + capture_quantifiers_delete(&child_capture_quantifiers); + return e; + } + + capture_quantifiers_add_all(capture_quantifiers, &child_capture_quantifiers); + capture_quantifiers_clear(&child_capture_quantifiers); + child_is_immediate = false; + } + + capture_quantifiers_delete(&child_capture_quantifiers); + } + + // A dot/pound character indicates the start of a predicate. + else if (stream->next == '.' || stream->next == '#') { + stream_advance(stream); + return ts_query__parse_predicate(self, stream); + } + + // Otherwise, this parenthesis is the start of a named node. + else { + TSSymbol symbol; + + // Parse a normal node name + if (stream_is_ident_start(stream)) { + const char *node_name = stream->input; + stream_scan_identifier(stream); + uint32_t length = (uint32_t)(stream->input - node_name); + + // Parse the wildcard symbol + if (length == 1 && node_name[0] == '_') { + symbol = WILDCARD_SYMBOL; + } + + else { + symbol = ts_language_symbol_for_name( + self->language, + node_name, + length, + true + ); + if (!symbol) { + stream_reset(stream, node_name); + return TSQueryErrorNodeType; + } + } + } else { + return TSQueryErrorSyntax; + } + + // Add a step for the node. + array_push(&self->steps, query_step__new(symbol, depth, is_immediate)); + QueryStep *step = array_back(&self->steps); + if (ts_language_symbol_metadata(self->language, symbol).supertype) { + step->supertype_symbol = step->symbol; + step->symbol = WILDCARD_SYMBOL; + } + if (symbol == WILDCARD_SYMBOL) { + step->is_named = true; + } + + stream_skip_whitespace(stream); + + if (stream->next == '/') { + stream_advance(stream); + if (!stream_is_ident_start(stream)) { + return TSQueryErrorSyntax; + } + + const char *node_name = stream->input; + stream_scan_identifier(stream); + uint32_t length = (uint32_t)(stream->input - node_name); + + step->symbol = ts_language_symbol_for_name( + self->language, + node_name, + length, + true + ); + if (!step->symbol) { + stream_reset(stream, node_name); + return TSQueryErrorNodeType; + } + + stream_skip_whitespace(stream); + } + + // Parse the child patterns + bool child_is_immediate = false; + uint16_t last_child_step_index = 0; + uint16_t negated_field_count = 0; + TSFieldId negated_field_ids[MAX_NEGATED_FIELD_COUNT]; + CaptureQuantifiers child_capture_quantifiers = capture_quantifiers_new(); + for (;;) { + // Parse a negated field assertion + if (stream->next == '!') { + stream_advance(stream); + stream_skip_whitespace(stream); + if (!stream_is_ident_start(stream)) { + capture_quantifiers_delete(&child_capture_quantifiers); + return TSQueryErrorSyntax; + } + const char *field_name = stream->input; + stream_scan_identifier(stream); + uint32_t length = (uint32_t)(stream->input - field_name); + stream_skip_whitespace(stream); + + TSFieldId field_id = ts_language_field_id_for_name( + self->language, + field_name, + length + ); + if (!field_id) { + stream->input = field_name; + capture_quantifiers_delete(&child_capture_quantifiers); + return TSQueryErrorField; + } + + // Keep the field ids sorted. + if (negated_field_count < MAX_NEGATED_FIELD_COUNT) { + negated_field_ids[negated_field_count] = field_id; + negated_field_count++; + } + + continue; + } + + // Parse a sibling anchor + if (stream->next == '.') { + child_is_immediate = true; + stream_advance(stream); + stream_skip_whitespace(stream); + } + + uint16_t step_index = self->steps.size; + TSQueryError e = ts_query__parse_pattern( + self, + stream, + depth + 1, + child_is_immediate, + &child_capture_quantifiers + ); + if (e == PARENT_DONE) { + if (stream->next == ')') { + if (child_is_immediate) { + if (last_child_step_index == 0) { + capture_quantifiers_delete(&child_capture_quantifiers); + return TSQueryErrorSyntax; + } + self->steps.contents[last_child_step_index].is_last_child = true; + } + + if (negated_field_count) { + ts_query__add_negated_fields( + self, + starting_step_index, + negated_field_ids, + negated_field_count + ); + } + + stream_advance(stream); + break; + } + e = TSQueryErrorSyntax; + } + if (e) { + capture_quantifiers_delete(&child_capture_quantifiers); + return e; + } + + capture_quantifiers_add_all(capture_quantifiers, &child_capture_quantifiers); + + last_child_step_index = step_index; + child_is_immediate = false; + capture_quantifiers_clear(&child_capture_quantifiers); + } + capture_quantifiers_delete(&child_capture_quantifiers); + } + } + + // Parse a wildcard pattern + else if (stream->next == '_') { + stream_advance(stream); + stream_skip_whitespace(stream); + + // Add a step that matches any kind of node + array_push(&self->steps, query_step__new(WILDCARD_SYMBOL, depth, is_immediate)); + } + + // Parse a double-quoted anonymous leaf node expression + else if (stream->next == '"') { + const char *string_start = stream->input; + TSQueryError e = ts_query__parse_string_literal(self, stream); + if (e) return e; + + // Add a step for the node + TSSymbol symbol = ts_language_symbol_for_name( + self->language, + self->string_buffer.contents, + self->string_buffer.size, + false + ); + if (!symbol) { + stream_reset(stream, string_start + 1); + return TSQueryErrorNodeType; + } + array_push(&self->steps, query_step__new(symbol, depth, is_immediate)); + } + + // Parse a field-prefixed pattern + else if (stream_is_ident_start(stream)) { + // Parse the field name + const char *field_name = stream->input; + stream_scan_identifier(stream); + uint32_t length = (uint32_t)(stream->input - field_name); + stream_skip_whitespace(stream); + + if (stream->next != ':') { + stream_reset(stream, field_name); + return TSQueryErrorSyntax; + } + stream_advance(stream); + stream_skip_whitespace(stream); + + // Parse the pattern + CaptureQuantifiers field_capture_quantifiers = capture_quantifiers_new(); + TSQueryError e = ts_query__parse_pattern( + self, + stream, + depth, + is_immediate, + &field_capture_quantifiers + ); + if (e) { + capture_quantifiers_delete(&field_capture_quantifiers); + if (e == PARENT_DONE) e = TSQueryErrorSyntax; + return e; + } + + // Add the field name to the first step of the pattern + TSFieldId field_id = ts_language_field_id_for_name( + self->language, + field_name, + length + ); + if (!field_id) { + stream->input = field_name; + return TSQueryErrorField; + } + + uint32_t step_index = starting_step_index; + QueryStep *step = &self->steps.contents[step_index]; + for (;;) { + step->field = field_id; + if ( + step->alternative_index != NONE && + step->alternative_index > step_index && + step->alternative_index < self->steps.size + ) { + step_index = step->alternative_index; + step = &self->steps.contents[step_index]; + } else { + break; + } + } + + capture_quantifiers_add_all(capture_quantifiers, &field_capture_quantifiers); + capture_quantifiers_delete(&field_capture_quantifiers); + } + + else { + return TSQueryErrorSyntax; + } + + stream_skip_whitespace(stream); + + // Parse suffixes modifiers for this pattern + TSQuantifier quantifier = TSQuantifierOne; + for (;;) { + // Parse the one-or-more operator. + if (stream->next == '+') { + quantifier = quantifier_join(TSQuantifierOneOrMore, quantifier); + + stream_advance(stream); + stream_skip_whitespace(stream); + + QueryStep repeat_step = query_step__new(WILDCARD_SYMBOL, depth, false); + repeat_step.alternative_index = starting_step_index; + repeat_step.is_pass_through = true; + repeat_step.alternative_is_immediate = true; + array_push(&self->steps, repeat_step); + } + + // Parse the zero-or-more repetition operator. + else if (stream->next == '*') { + quantifier = quantifier_join(TSQuantifierZeroOrMore, quantifier); + + stream_advance(stream); + stream_skip_whitespace(stream); + + QueryStep repeat_step = query_step__new(WILDCARD_SYMBOL, depth, false); + repeat_step.alternative_index = starting_step_index; + repeat_step.is_pass_through = true; + repeat_step.alternative_is_immediate = true; + array_push(&self->steps, repeat_step); + + // Stop when `step->alternative_index` is `NONE` or it points to + // `repeat_step` or beyond. Note that having just been pushed, + // `repeat_step` occupies slot `self->steps.size - 1`. + QueryStep *step = &self->steps.contents[starting_step_index]; + while (step->alternative_index != NONE && step->alternative_index < self->steps.size - 1) { + step = &self->steps.contents[step->alternative_index]; + } + step->alternative_index = self->steps.size; + } + + // Parse the optional operator. + else if (stream->next == '?') { + quantifier = quantifier_join(TSQuantifierZeroOrOne, quantifier); + + stream_advance(stream); + stream_skip_whitespace(stream); + + QueryStep *step = &self->steps.contents[starting_step_index]; + while (step->alternative_index != NONE && step->alternative_index < self->steps.size) { + step = &self->steps.contents[step->alternative_index]; + } + step->alternative_index = self->steps.size; + } + + // Parse an '@'-prefixed capture pattern + else if (stream->next == '@') { + stream_advance(stream); + if (!stream_is_ident_start(stream)) return TSQueryErrorSyntax; + const char *capture_name = stream->input; + stream_scan_identifier(stream); + uint32_t length = (uint32_t)(stream->input - capture_name); + stream_skip_whitespace(stream); + + // Add the capture id to the first step of the pattern + uint16_t capture_id = symbol_table_insert_name( + &self->captures, + capture_name, + length + ); + + // Add the capture quantifier + capture_quantifiers_add_for_id(capture_quantifiers, capture_id, TSQuantifierOne); + + uint32_t step_index = starting_step_index; + for (;;) { + QueryStep *step = &self->steps.contents[step_index]; + query_step__add_capture(step, capture_id); + if ( + step->alternative_index != NONE && + step->alternative_index > step_index && + step->alternative_index < self->steps.size + ) { + step_index = step->alternative_index; + } else { + break; + } + } + } + + // No more suffix modifiers + else { + break; + } + } + + capture_quantifiers_mul(capture_quantifiers, quantifier); + + return 0; +} + +TSQuery *ts_query_new( + const TSLanguage *language, + const char *source, + uint32_t source_len, + uint32_t *error_offset, + TSQueryError *error_type +) { + if ( + !language || + language->version > TREE_SITTER_LANGUAGE_VERSION || + language->version < TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION + ) { + *error_type = TSQueryErrorLanguage; + return NULL; + } + + TSQuery *self = ts_malloc(sizeof(TSQuery)); + *self = (TSQuery) { + .steps = array_new(), + .pattern_map = array_new(), + .captures = symbol_table_new(), + .capture_quantifiers = array_new(), + .predicate_values = symbol_table_new(), + .predicate_steps = array_new(), + .patterns = array_new(), + .step_offsets = array_new(), + .string_buffer = array_new(), + .negated_fields = array_new(), + .repeat_symbols_with_rootless_patterns = array_new(), + .wildcard_root_pattern_count = 0, + .language = ts_language_copy(language), + }; + + array_push(&self->negated_fields, 0); + + // Parse all of the S-expressions in the given string. + Stream stream = stream_new(source, source_len); + stream_skip_whitespace(&stream); + while (stream.input < stream.end) { + uint32_t pattern_index = self->patterns.size; + uint32_t start_step_index = self->steps.size; + uint32_t start_predicate_step_index = self->predicate_steps.size; + array_push(&self->patterns, ((QueryPattern) { + .steps = (Slice) {.offset = start_step_index}, + .predicate_steps = (Slice) {.offset = start_predicate_step_index}, + .start_byte = stream_offset(&stream), + .is_non_local = false, + })); + CaptureQuantifiers capture_quantifiers = capture_quantifiers_new(); + *error_type = ts_query__parse_pattern(self, &stream, 0, false, &capture_quantifiers); + array_push(&self->steps, query_step__new(0, PATTERN_DONE_MARKER, false)); + + QueryPattern *pattern = array_back(&self->patterns); + pattern->steps.length = self->steps.size - start_step_index; + pattern->predicate_steps.length = self->predicate_steps.size - start_predicate_step_index; + + // If any pattern could not be parsed, then report the error information + // and terminate. + if (*error_type) { + if (*error_type == PARENT_DONE) *error_type = TSQueryErrorSyntax; + *error_offset = stream_offset(&stream); + capture_quantifiers_delete(&capture_quantifiers); + ts_query_delete(self); + return NULL; + } + + // Maintain a list of capture quantifiers for each pattern + array_push(&self->capture_quantifiers, capture_quantifiers); + + // Maintain a map that can look up patterns for a given root symbol. + uint16_t wildcard_root_alternative_index = NONE; + for (;;) { + QueryStep *step = &self->steps.contents[start_step_index]; + + // If a pattern has a wildcard at its root, but it has a non-wildcard child, + // then optimize the matching process by skipping matching the wildcard. + // Later, during the matching process, the query cursor will check that + // there is a parent node, and capture it if necessary. + if (step->symbol == WILDCARD_SYMBOL && step->depth == 0 && !step->field) { + QueryStep *second_step = &self->steps.contents[start_step_index + 1]; + if (second_step->symbol != WILDCARD_SYMBOL && second_step->depth == 1) { + wildcard_root_alternative_index = step->alternative_index; + start_step_index += 1; + step = second_step; + } + } + + // Determine whether the pattern has a single root node. This affects + // decisions about whether or not to start matching the pattern when + // a query cursor has a range restriction or when immediately within an + // error node. + uint32_t start_depth = step->depth; + bool is_rooted = start_depth == 0; + for (uint32_t step_index = start_step_index + 1; step_index < self->steps.size; step_index++) { + QueryStep *child_step = &self->steps.contents[step_index]; + if (child_step->is_dead_end) break; + if (child_step->depth == start_depth) { + is_rooted = false; + break; + } + } + + ts_query__pattern_map_insert(self, step->symbol, (PatternEntry) { + .step_index = start_step_index, + .pattern_index = pattern_index, + .is_rooted = is_rooted + }); + if (step->symbol == WILDCARD_SYMBOL) { + self->wildcard_root_pattern_count++; + } + + // If there are alternatives or options at the root of the pattern, + // then add multiple entries to the pattern map. + if (step->alternative_index != NONE) { + start_step_index = step->alternative_index; + } else if (wildcard_root_alternative_index != NONE) { + start_step_index = wildcard_root_alternative_index; + wildcard_root_alternative_index = NONE; + } else { + break; + } + } + } + + if (!ts_query__analyze_patterns(self, error_offset)) { + *error_type = TSQueryErrorStructure; + ts_query_delete(self); + return NULL; + } + + array_delete(&self->string_buffer); + return self; +} + +void ts_query_delete(TSQuery *self) { + if (self) { + array_delete(&self->steps); + array_delete(&self->pattern_map); + array_delete(&self->predicate_steps); + array_delete(&self->patterns); + array_delete(&self->step_offsets); + array_delete(&self->string_buffer); + array_delete(&self->negated_fields); + array_delete(&self->repeat_symbols_with_rootless_patterns); + ts_language_delete(self->language); + symbol_table_delete(&self->captures); + symbol_table_delete(&self->predicate_values); + for (uint32_t index = 0; index < self->capture_quantifiers.size; index++) { + CaptureQuantifiers *capture_quantifiers = array_get(&self->capture_quantifiers, index); + capture_quantifiers_delete(capture_quantifiers); + } + array_delete(&self->capture_quantifiers); + ts_free(self); + } +} + +uint32_t ts_query_pattern_count(const TSQuery *self) { + return self->patterns.size; +} + +uint32_t ts_query_capture_count(const TSQuery *self) { + return self->captures.slices.size; +} + +uint32_t ts_query_string_count(const TSQuery *self) { + return self->predicate_values.slices.size; +} + +const char *ts_query_capture_name_for_id( + const TSQuery *self, + uint32_t index, + uint32_t *length +) { + return symbol_table_name_for_id(&self->captures, index, length); +} + +TSQuantifier ts_query_capture_quantifier_for_id( + const TSQuery *self, + uint32_t pattern_index, + uint32_t capture_index +) { + CaptureQuantifiers *capture_quantifiers = array_get(&self->capture_quantifiers, pattern_index); + return capture_quantifier_for_id(capture_quantifiers, capture_index); +} + +const char *ts_query_string_value_for_id( + const TSQuery *self, + uint32_t index, + uint32_t *length +) { + return symbol_table_name_for_id(&self->predicate_values, index, length); +} + +const TSQueryPredicateStep *ts_query_predicates_for_pattern( + const TSQuery *self, + uint32_t pattern_index, + uint32_t *step_count +) { + Slice slice = self->patterns.contents[pattern_index].predicate_steps; + *step_count = slice.length; + if (self->predicate_steps.contents == NULL) { + return NULL; + } + return &self->predicate_steps.contents[slice.offset]; +} + +uint32_t ts_query_start_byte_for_pattern( + const TSQuery *self, + uint32_t pattern_index +) { + return self->patterns.contents[pattern_index].start_byte; +} + +bool ts_query_is_pattern_rooted( + const TSQuery *self, + uint32_t pattern_index +) { + for (unsigned i = 0; i < self->pattern_map.size; i++) { + PatternEntry *entry = &self->pattern_map.contents[i]; + if (entry->pattern_index == pattern_index) { + if (!entry->is_rooted) return false; + } + } + return true; +} + +bool ts_query_is_pattern_non_local( + const TSQuery *self, + uint32_t pattern_index +) { + if (pattern_index < self->patterns.size) { + return self->patterns.contents[pattern_index].is_non_local; + } else { + return false; + } +} + +bool ts_query_is_pattern_guaranteed_at_step( + const TSQuery *self, + uint32_t byte_offset +) { + uint32_t step_index = UINT32_MAX; + for (unsigned i = 0; i < self->step_offsets.size; i++) { + StepOffset *step_offset = &self->step_offsets.contents[i]; + if (step_offset->byte_offset > byte_offset) break; + step_index = step_offset->step_index; + } + if (step_index < self->steps.size) { + return self->steps.contents[step_index].root_pattern_guaranteed; + } else { + return false; + } +} + +bool ts_query__step_is_fallible( + const TSQuery *self, + uint16_t step_index +) { + assert((uint32_t)step_index + 1 < self->steps.size); + QueryStep *step = &self->steps.contents[step_index]; + QueryStep *next_step = &self->steps.contents[step_index + 1]; + return ( + next_step->depth != PATTERN_DONE_MARKER && + next_step->depth > step->depth && + !next_step->parent_pattern_guaranteed + ); +} + +void ts_query_disable_capture( + TSQuery *self, + const char *name, + uint32_t length +) { + // Remove capture information for any pattern step that previously + // captured with the given name. + int id = symbol_table_id_for_name(&self->captures, name, length); + if (id != -1) { + for (unsigned i = 0; i < self->steps.size; i++) { + QueryStep *step = &self->steps.contents[i]; + query_step__remove_capture(step, id); + } + } +} + +void ts_query_disable_pattern( + TSQuery *self, + uint32_t pattern_index +) { + // Remove the given pattern from the pattern map. Its steps will still + // be in the `steps` array, but they will never be read. + for (unsigned i = 0; i < self->pattern_map.size; i++) { + PatternEntry *pattern = &self->pattern_map.contents[i]; + if (pattern->pattern_index == pattern_index) { + array_erase(&self->pattern_map, i); + i--; + } + } +} + +/*************** + * QueryCursor + ***************/ + +TSQueryCursor *ts_query_cursor_new(void) { + TSQueryCursor *self = ts_malloc(sizeof(TSQueryCursor)); + *self = (TSQueryCursor) { + .did_exceed_match_limit = false, + .ascending = false, + .halted = false, + .states = array_new(), + .finished_states = array_new(), + .capture_list_pool = capture_list_pool_new(), + .start_byte = 0, + .end_byte = UINT32_MAX, + .start_point = {0, 0}, + .end_point = POINT_MAX, + .max_start_depth = UINT32_MAX, + }; + array_reserve(&self->states, 8); + array_reserve(&self->finished_states, 8); + return self; +} + +void ts_query_cursor_delete(TSQueryCursor *self) { + array_delete(&self->states); + array_delete(&self->finished_states); + ts_tree_cursor_delete(&self->cursor); + capture_list_pool_delete(&self->capture_list_pool); + ts_free(self); +} + +bool ts_query_cursor_did_exceed_match_limit(const TSQueryCursor *self) { + return self->did_exceed_match_limit; +} + +uint32_t ts_query_cursor_match_limit(const TSQueryCursor *self) { + return self->capture_list_pool.max_capture_list_count; +} + +void ts_query_cursor_set_match_limit(TSQueryCursor *self, uint32_t limit) { + self->capture_list_pool.max_capture_list_count = limit; +} + +#ifdef DEBUG_EXECUTE_QUERY +#define LOG(...) fprintf(stderr, __VA_ARGS__) +#else +#define LOG(...) +#endif + +void ts_query_cursor_exec( + TSQueryCursor *self, + const TSQuery *query, + TSNode node +) { + if (query) { + LOG("query steps:\n"); + for (unsigned i = 0; i < query->steps.size; i++) { + QueryStep *step = &query->steps.contents[i]; + LOG(" %u: {", i); + if (step->depth == PATTERN_DONE_MARKER) { + LOG("DONE"); + } else if (step->is_dead_end) { + LOG("dead_end"); + } else if (step->is_pass_through) { + LOG("pass_through"); + } else if (step->symbol != WILDCARD_SYMBOL) { + LOG("symbol: %s", query->language->symbol_names[step->symbol]); + } else { + LOG("symbol: *"); + } + if (step->field) { + LOG(", field: %s", query->language->field_names[step->field]); + } + if (step->alternative_index != NONE) { + LOG(", alternative: %u", step->alternative_index); + } + LOG("},\n"); + } + } + + array_clear(&self->states); + array_clear(&self->finished_states); + ts_tree_cursor_reset(&self->cursor, node); + capture_list_pool_reset(&self->capture_list_pool); + self->on_visible_node = true; + self->next_state_id = 0; + self->depth = 0; + self->ascending = false; + self->halted = false; + self->query = query; + self->did_exceed_match_limit = false; +} + +void ts_query_cursor_set_byte_range( + TSQueryCursor *self, + uint32_t start_byte, + uint32_t end_byte +) { + if (end_byte == 0) { + end_byte = UINT32_MAX; + } + self->start_byte = start_byte; + self->end_byte = end_byte; +} + +void ts_query_cursor_set_point_range( + TSQueryCursor *self, + TSPoint start_point, + TSPoint end_point +) { + if (end_point.row == 0 && end_point.column == 0) { + end_point = POINT_MAX; + } + self->start_point = start_point; + self->end_point = end_point; +} + +// Search through all of the in-progress states, and find the captured +// node that occurs earliest in the document. +static bool ts_query_cursor__first_in_progress_capture( + TSQueryCursor *self, + uint32_t *state_index, + uint32_t *byte_offset, + uint32_t *pattern_index, + bool *root_pattern_guaranteed +) { + bool result = false; + *state_index = UINT32_MAX; + *byte_offset = UINT32_MAX; + *pattern_index = UINT32_MAX; + for (unsigned i = 0; i < self->states.size; i++) { + QueryState *state = &self->states.contents[i]; + if (state->dead) continue; + + const CaptureList *captures = capture_list_pool_get( + &self->capture_list_pool, + state->capture_list_id + ); + if (state->consumed_capture_count >= captures->size) { + continue; + } + + TSNode node = captures->contents[state->consumed_capture_count].node; + if ( + ts_node_end_byte(node) <= self->start_byte || + point_lte(ts_node_end_point(node), self->start_point) + ) { + state->consumed_capture_count++; + i--; + continue; + } + + uint32_t node_start_byte = ts_node_start_byte(node); + if ( + !result || + node_start_byte < *byte_offset || + (node_start_byte == *byte_offset && state->pattern_index < *pattern_index) + ) { + QueryStep *step = &self->query->steps.contents[state->step_index]; + if (root_pattern_guaranteed) { + *root_pattern_guaranteed = step->root_pattern_guaranteed; + } else if (step->root_pattern_guaranteed) { + continue; + } + + result = true; + *state_index = i; + *byte_offset = node_start_byte; + *pattern_index = state->pattern_index; + } + } + return result; +} + +// Determine which node is first in a depth-first traversal +int ts_query_cursor__compare_nodes(TSNode left, TSNode right) { + if (left.id != right.id) { + uint32_t left_start = ts_node_start_byte(left); + uint32_t right_start = ts_node_start_byte(right); + if (left_start < right_start) return -1; + if (left_start > right_start) return 1; + uint32_t left_node_count = ts_node_end_byte(left); + uint32_t right_node_count = ts_node_end_byte(right); + if (left_node_count > right_node_count) return -1; + if (left_node_count < right_node_count) return 1; + } + return 0; +} + +// Determine if either state contains a superset of the other state's captures. +void ts_query_cursor__compare_captures( + TSQueryCursor *self, + QueryState *left_state, + QueryState *right_state, + bool *left_contains_right, + bool *right_contains_left +) { + const CaptureList *left_captures = capture_list_pool_get( + &self->capture_list_pool, + left_state->capture_list_id + ); + const CaptureList *right_captures = capture_list_pool_get( + &self->capture_list_pool, + right_state->capture_list_id + ); + *left_contains_right = true; + *right_contains_left = true; + unsigned i = 0, j = 0; + for (;;) { + if (i < left_captures->size) { + if (j < right_captures->size) { + TSQueryCapture *left = &left_captures->contents[i]; + TSQueryCapture *right = &right_captures->contents[j]; + if (left->node.id == right->node.id && left->index == right->index) { + i++; + j++; + } else { + switch (ts_query_cursor__compare_nodes(left->node, right->node)) { + case -1: + *right_contains_left = false; + i++; + break; + case 1: + *left_contains_right = false; + j++; + break; + default: + *right_contains_left = false; + *left_contains_right = false; + i++; + j++; + break; + } + } + } else { + *right_contains_left = false; + break; + } + } else { + if (j < right_captures->size) { + *left_contains_right = false; + } + break; + } + } +} + +static void ts_query_cursor__add_state( + TSQueryCursor *self, + const PatternEntry *pattern +) { + QueryStep *step = &self->query->steps.contents[pattern->step_index]; + uint32_t start_depth = self->depth - step->depth; + + // Keep the states array in ascending order of start_depth and pattern_index, + // so that it can be processed more efficiently elsewhere. Usually, there is + // no work to do here because of two facts: + // * States with lower start_depth are naturally added first due to the + // order in which nodes are visited. + // * Earlier patterns are naturally added first because of the ordering of the + // pattern_map data structure that's used to initiate matches. + // + // This loop is only needed in cases where two conditions hold: + // * A pattern consists of more than one sibling node, so that its states + // remain in progress after exiting the node that started the match. + // * The first node in the pattern matches against multiple nodes at the + // same depth. + // + // An example of this is the pattern '((comment)* (function))'. If multiple + // `comment` nodes appear in a row, then we may initiate a new state for this + // pattern while another state for the same pattern is already in progress. + // If there are multiple patterns like this in a query, then this loop will + // need to execute in order to keep the states ordered by pattern_index. + uint32_t index = self->states.size; + while (index > 0) { + QueryState *prev_state = &self->states.contents[index - 1]; + if (prev_state->start_depth < start_depth) break; + if (prev_state->start_depth == start_depth) { + // Avoid inserting an unnecessary duplicate state, which would be + // immediately pruned by the longest-match criteria. + if ( + prev_state->pattern_index == pattern->pattern_index && + prev_state->step_index == pattern->step_index + ) return; + if (prev_state->pattern_index <= pattern->pattern_index) break; + } + index--; + } + + LOG( + " start state. pattern:%u, step:%u\n", + pattern->pattern_index, + pattern->step_index + ); + array_insert(&self->states, index, ((QueryState) { + .id = UINT32_MAX, + .capture_list_id = NONE, + .step_index = pattern->step_index, + .pattern_index = pattern->pattern_index, + .start_depth = start_depth, + .consumed_capture_count = 0, + .seeking_immediate_match = true, + .has_in_progress_alternatives = false, + .needs_parent = step->depth == 1, + .dead = false, + })); +} + +// Acquire a capture list for this state. If there are no capture lists left in the +// pool, this will steal the capture list from another existing state, and mark that +// other state as 'dead'. +static CaptureList *ts_query_cursor__prepare_to_capture( + TSQueryCursor *self, + QueryState *state, + unsigned state_index_to_preserve +) { + if (state->capture_list_id == NONE) { + state->capture_list_id = capture_list_pool_acquire(&self->capture_list_pool); + + // If there are no capture lists left in the pool, then terminate whichever + // state has captured the earliest node in the document, and steal its + // capture list. + if (state->capture_list_id == NONE) { + self->did_exceed_match_limit = true; + uint32_t state_index, byte_offset, pattern_index; + if ( + ts_query_cursor__first_in_progress_capture( + self, + &state_index, + &byte_offset, + &pattern_index, + NULL + ) && + state_index != state_index_to_preserve + ) { + LOG( + " abandon state. index:%u, pattern:%u, offset:%u.\n", + state_index, pattern_index, byte_offset + ); + QueryState *other_state = &self->states.contents[state_index]; + state->capture_list_id = other_state->capture_list_id; + other_state->capture_list_id = NONE; + other_state->dead = true; + CaptureList *list = capture_list_pool_get_mut( + &self->capture_list_pool, + state->capture_list_id + ); + array_clear(list); + return list; + } else { + LOG(" ran out of capture lists"); + return NULL; + } + } + } + return capture_list_pool_get_mut(&self->capture_list_pool, state->capture_list_id); +} + +static void ts_query_cursor__capture( + TSQueryCursor *self, + QueryState *state, + QueryStep *step, + TSNode node +) { + if (state->dead) return; + CaptureList *capture_list = ts_query_cursor__prepare_to_capture(self, state, UINT32_MAX); + if (!capture_list) { + state->dead = true; + return; + } + + for (unsigned j = 0; j < MAX_STEP_CAPTURE_COUNT; j++) { + uint16_t capture_id = step->capture_ids[j]; + if (step->capture_ids[j] == NONE) break; + array_push(capture_list, ((TSQueryCapture) { node, capture_id })); + LOG( + " capture node. type:%s, pattern:%u, capture_id:%u, capture_count:%u\n", + ts_node_type(node), + state->pattern_index, + capture_id, + capture_list->size + ); + } +} + +// Duplicate the given state and insert the newly-created state immediately after +// the given state in the `states` array. Ensures that the given state reference is +// still valid, even if the states array is reallocated. +static QueryState *ts_query_cursor__copy_state( + TSQueryCursor *self, + QueryState **state_ref +) { + const QueryState *state = *state_ref; + uint32_t state_index = (uint32_t)(state - self->states.contents); + QueryState copy = *state; + copy.capture_list_id = NONE; + + // If the state has captures, copy its capture list. + if (state->capture_list_id != NONE) { + CaptureList *new_captures = ts_query_cursor__prepare_to_capture(self, ©, state_index); + if (!new_captures) return NULL; + const CaptureList *old_captures = capture_list_pool_get( + &self->capture_list_pool, + state->capture_list_id + ); + array_push_all(new_captures, old_captures); + } + + array_insert(&self->states, state_index + 1, copy); + *state_ref = &self->states.contents[state_index]; + return &self->states.contents[state_index + 1]; +} + +static inline bool ts_query_cursor__should_descend( + TSQueryCursor *self, + bool node_intersects_range +) { + + if (node_intersects_range && self->depth < self->max_start_depth) { + return true; + } + + // If there are in-progress matches whose remaining steps occur + // deeper in the tree, then descend. + for (unsigned i = 0; i < self->states.size; i++) { + QueryState *state = &self->states.contents[i];; + QueryStep *next_step = &self->query->steps.contents[state->step_index]; + if ( + next_step->depth != PATTERN_DONE_MARKER && + state->start_depth + next_step->depth > self->depth + ) { + return true; + } + } + + if (self->depth >= self->max_start_depth) { + return false; + } + + // If the current node is hidden, then a non-rooted pattern might match + // one if its roots inside of this node, and match another of its roots + // as part of a sibling node, so we may need to descend. + if (!self->on_visible_node) { + // Descending into a repetition node outside of the range can be + // expensive, because these nodes can have many visible children. + // Avoid descending into repetition nodes unless we have already + // determined that this query can match rootless patterns inside + // of this type of repetition node. + Subtree subtree = ts_tree_cursor_current_subtree(&self->cursor); + if (ts_subtree_is_repetition(subtree)) { + bool exists; + uint32_t index; + array_search_sorted_by( + &self->query->repeat_symbols_with_rootless_patterns,, + ts_subtree_symbol(subtree), + &index, + &exists + ); + return exists; + } + + return true; + } + + return false; +} + +// Walk the tree, processing patterns until at least one pattern finishes, +// If one or more patterns finish, return `true` and store their states in the +// `finished_states` array. Multiple patterns can finish on the same node. If +// there are no more matches, return `false`. +static inline bool ts_query_cursor__advance( + TSQueryCursor *self, + bool stop_on_definite_step +) { + bool did_match = false; + for (;;) { + if (self->halted) { + while (self->states.size > 0) { + QueryState state = array_pop(&self->states); + capture_list_pool_release( + &self->capture_list_pool, + state.capture_list_id + ); + } + } + + if (did_match || self->halted) return did_match; + + // Exit the current node. + if (self->ascending) { + if (self->on_visible_node) { + LOG( + "leave node. depth:%u, type:%s\n", + self->depth, + ts_node_type(ts_tree_cursor_current_node(&self->cursor)) + ); + + // After leaving a node, remove any states that cannot make further progress. + uint32_t deleted_count = 0; + for (unsigned i = 0, n = self->states.size; i < n; i++) { + QueryState *state = &self->states.contents[i]; + QueryStep *step = &self->query->steps.contents[state->step_index]; + + // If a state completed its pattern inside of this node, but was deferred from finishing + // in order to search for longer matches, mark it as finished. + if ( + step->depth == PATTERN_DONE_MARKER && + (state->start_depth > self->depth || self->depth == 0) + ) { + LOG(" finish pattern %u\n", state->pattern_index); + array_push(&self->finished_states, *state); + did_match = true; + deleted_count++; + } + + // If a state needed to match something within this node, then remove that state + // as it has failed to match. + else if ( + step->depth != PATTERN_DONE_MARKER && + (uint32_t)state->start_depth + (uint32_t)step->depth > self->depth + ) { + LOG( + " failed to match. pattern:%u, step:%u\n", + state->pattern_index, + state->step_index + ); + capture_list_pool_release( + &self->capture_list_pool, + state->capture_list_id + ); + deleted_count++; + } + + else if (deleted_count > 0) { + self->states.contents[i - deleted_count] = *state; + } + } + self->states.size -= deleted_count; + } + + // Leave this node by stepping to its next sibling or to its parent. + switch (ts_tree_cursor_goto_next_sibling_internal(&self->cursor)) { + case TreeCursorStepVisible: + if (!self->on_visible_node) { + self->depth++; + self->on_visible_node = true; + } + self->ascending = false; + break; + case TreeCursorStepHidden: + if (self->on_visible_node) { + self->depth--; + self->on_visible_node = false; + } + self->ascending = false; + break; + default: + if (ts_tree_cursor_goto_parent(&self->cursor)) { + self->depth--; + } else { + LOG("halt at root\n"); + self->halted = true; + } + } + } + + // Enter a new node. + else { + // Get the properties of the current node. + TSNode node = ts_tree_cursor_current_node(&self->cursor); + TSNode parent_node = ts_tree_cursor_parent_node(&self->cursor); + bool parent_precedes_range = !ts_node_is_null(parent_node) && ( + ts_node_end_byte(parent_node) <= self->start_byte || + point_lte(ts_node_end_point(parent_node), self->start_point) + ); + bool parent_follows_range = !ts_node_is_null(parent_node) && ( + ts_node_start_byte(parent_node) >= self->end_byte || + point_gte(ts_node_start_point(parent_node), self->end_point) + ); + bool node_precedes_range = parent_precedes_range || ( + ts_node_end_byte(node) <= self->start_byte || + point_lte(ts_node_end_point(node), self->start_point) + ); + bool node_follows_range = parent_follows_range || ( + ts_node_start_byte(node) >= self->end_byte || + point_gte(ts_node_start_point(node), self->end_point) + ); + bool parent_intersects_range = !parent_precedes_range && !parent_follows_range; + bool node_intersects_range = !node_precedes_range && !node_follows_range; + + if (self->on_visible_node) { + TSSymbol symbol = ts_node_symbol(node); + bool is_named = ts_node_is_named(node); + bool has_later_siblings; + bool has_later_named_siblings; + bool can_have_later_siblings_with_this_field; + TSFieldId field_id = 0; + TSSymbol supertypes[8] = {0}; + unsigned supertype_count = 8; + ts_tree_cursor_current_status( + &self->cursor, + &field_id, + &has_later_siblings, + &has_later_named_siblings, + &can_have_later_siblings_with_this_field, + supertypes, + &supertype_count + ); + LOG( + "enter node. depth:%u, type:%s, field:%s, row:%u state_count:%u, finished_state_count:%u\n", + self->depth, + ts_node_type(node), + ts_language_field_name_for_id(self->query->language, field_id), + ts_node_start_point(node).row, + self->states.size, + self->finished_states.size + ); + + bool node_is_error = symbol == ts_builtin_sym_error; + bool parent_is_error = + !ts_node_is_null(parent_node) && + ts_node_symbol(parent_node) == ts_builtin_sym_error; + + // Add new states for any patterns whose root node is a wildcard. + if (!node_is_error) { + for (unsigned i = 0; i < self->query->wildcard_root_pattern_count; i++) { + PatternEntry *pattern = &self->query->pattern_map.contents[i]; + + // If this node matches the first step of the pattern, then add a new + // state at the start of this pattern. + QueryStep *step = &self->query->steps.contents[pattern->step_index]; + uint32_t start_depth = self->depth - step->depth; + if ( + (pattern->is_rooted ? + node_intersects_range : + (parent_intersects_range && !parent_is_error)) && + (!step->field || field_id == step->field) && + (!step->supertype_symbol || supertype_count > 0) && + (start_depth <= self->max_start_depth) + ) { + ts_query_cursor__add_state(self, pattern); + } + } + } + + // Add new states for any patterns whose root node matches this node. + unsigned i; + if (ts_query__pattern_map_search(self->query, symbol, &i)) { + PatternEntry *pattern = &self->query->pattern_map.contents[i]; + + QueryStep *step = &self->query->steps.contents[pattern->step_index]; + uint32_t start_depth = self->depth - step->depth; + do { + // If this node matches the first step of the pattern, then add a new + // state at the start of this pattern. + if ( + (pattern->is_rooted ? + node_intersects_range : + (parent_intersects_range && !parent_is_error)) && + (!step->field || field_id == step->field) && + (start_depth <= self->max_start_depth) + ) { + ts_query_cursor__add_state(self, pattern); + } + + // Advance to the next pattern whose root node matches this node. + i++; + if (i == self->query->pattern_map.size) break; + pattern = &self->query->pattern_map.contents[i]; + step = &self->query->steps.contents[pattern->step_index]; + } while (step->symbol == symbol); + } + + // Update all of the in-progress states with current node. + for (unsigned j = 0, copy_count = 0; j < self->states.size; j += 1 + copy_count) { + QueryState *state = &self->states.contents[j]; + QueryStep *step = &self->query->steps.contents[state->step_index]; + state->has_in_progress_alternatives = false; + copy_count = 0; + + // Check that the node matches all of the criteria for the next + // step of the pattern. + if ((uint32_t)state->start_depth + (uint32_t)step->depth != self->depth) continue; + + // Determine if this node matches this step of the pattern, and also + // if this node can have later siblings that match this step of the + // pattern. + bool node_does_match = false; + if (step->symbol == WILDCARD_SYMBOL) { + node_does_match = !node_is_error && (is_named || !step->is_named); + } else { + node_does_match = symbol == step->symbol; + } + bool later_sibling_can_match = has_later_siblings; + if ((step->is_immediate && is_named) || state->seeking_immediate_match) { + later_sibling_can_match = false; + } + if (step->is_last_child && has_later_named_siblings) { + node_does_match = false; + } + if (step->supertype_symbol) { + bool has_supertype = false; + for (unsigned k = 0; k < supertype_count; k++) { + if (supertypes[k] == step->supertype_symbol) { + has_supertype = true; + break; + } + } + if (!has_supertype) node_does_match = false; + } + if (step->field) { + if (step->field == field_id) { + if (!can_have_later_siblings_with_this_field) { + later_sibling_can_match = false; + } + } else { + node_does_match = false; + } + } + + if (step->negated_field_list_id) { + TSFieldId *negated_field_ids = &self->query->negated_fields.contents[step->negated_field_list_id]; + for (;;) { + TSFieldId negated_field_id = *negated_field_ids; + if (negated_field_id) { + negated_field_ids++; + if (ts_node_child_by_field_id(node, negated_field_id).id) { + node_does_match = false; + break; + } + } else { + break; + } + } + } + + // Remove states immediately if it is ever clear that they cannot match. + if (!node_does_match) { + if (!later_sibling_can_match) { + LOG( + " discard state. pattern:%u, step:%u\n", + state->pattern_index, + state->step_index + ); + capture_list_pool_release( + &self->capture_list_pool, + state->capture_list_id + ); + array_erase(&self->states, j); + j--; + } + continue; + } + + // Some patterns can match their root node in multiple ways, capturing different + // children. If this pattern step could match later children within the same + // parent, then this query state cannot simply be updated in place. It must be + // split into two states: one that matches this node, and one which skips over + // this node, to preserve the possibility of matching later siblings. + if (later_sibling_can_match && ( + step->contains_captures || + ts_query__step_is_fallible(self->query, state->step_index) + )) { + if (ts_query_cursor__copy_state(self, &state)) { + LOG( + " split state for capture. pattern:%u, step:%u\n", + state->pattern_index, + state->step_index + ); + copy_count++; + } + } + + // If this pattern started with a wildcard, such that the pattern map + // actually points to the *second* step of the pattern, then check + // that the node has a parent, and capture the parent node if necessary. + if (state->needs_parent) { + TSNode parent = ts_tree_cursor_parent_node(&self->cursor); + if (ts_node_is_null(parent)) { + LOG(" missing parent node\n"); + state->dead = true; + } else { + state->needs_parent = false; + QueryStep *skipped_wildcard_step = step; + do { + skipped_wildcard_step--; + } while ( + skipped_wildcard_step->is_dead_end || + skipped_wildcard_step->is_pass_through || + skipped_wildcard_step->depth > 0 + ); + if (skipped_wildcard_step->capture_ids[0] != NONE) { + LOG(" capture wildcard parent\n"); + ts_query_cursor__capture( + self, + state, + skipped_wildcard_step, + parent + ); + } + } + } + + // If the current node is captured in this pattern, add it to the capture list. + if (step->capture_ids[0] != NONE) { + ts_query_cursor__capture(self, state, step, node); + } + + if (state->dead) { + array_erase(&self->states, j); + j--; + continue; + } + + // Advance this state to the next step of its pattern. + state->step_index++; + state->seeking_immediate_match = false; + LOG( + " advance state. pattern:%u, step:%u\n", + state->pattern_index, + state->step_index + ); + + QueryStep *next_step = &self->query->steps.contents[state->step_index]; + if (stop_on_definite_step && next_step->root_pattern_guaranteed) did_match = true; + + // If this state's next step has an alternative step, then copy the state in order + // to pursue both alternatives. The alternative step itself may have an alternative, + // so this is an interactive process. + unsigned end_index = j + 1; + for (unsigned k = j; k < end_index; k++) { + QueryState *child_state = &self->states.contents[k]; + QueryStep *child_step = &self->query->steps.contents[child_state->step_index]; + if (child_step->alternative_index != NONE) { + // A "dead-end" step exists only to add a non-sequential jump into the step sequence, + // via its alternative index. When a state reaches a dead-end step, it jumps straight + // to the step's alternative. + if (child_step->is_dead_end) { + child_state->step_index = child_step->alternative_index; + k--; + continue; + } + + // A "pass-through" step exists only to add a branch into the step sequence, + // via its alternative_index. When a state reaches a pass-through step, it splits + // in order to process the alternative step, and then it advances to the next step. + if (child_step->is_pass_through) { + child_state->step_index++; + k--; + } + + QueryState *copy = ts_query_cursor__copy_state(self, &child_state); + if (copy) { + LOG( + " split state for branch. pattern:%u, from_step:%u, to_step:%u, immediate:%d, capture_count: %u\n", + copy->pattern_index, + copy->step_index, + next_step->alternative_index, + next_step->alternative_is_immediate, + capture_list_pool_get(&self->capture_list_pool, copy->capture_list_id)->size + ); + end_index++; + copy_count++; + copy->step_index = child_step->alternative_index; + if (child_step->alternative_is_immediate) { + copy->seeking_immediate_match = true; + } + } + } + } + } + + for (unsigned j = 0; j < self->states.size; j++) { + QueryState *state = &self->states.contents[j]; + if (state->dead) { + array_erase(&self->states, j); + j--; + continue; + } + + // Enforce the longest-match criteria. When a query pattern contains optional or + // repeated nodes, this is necessary to avoid multiple redundant states, where + // one state has a strict subset of another state's captures. + bool did_remove = false; + for (unsigned k = j + 1; k < self->states.size; k++) { + QueryState *other_state = &self->states.contents[k]; + + // Query states are kept in ascending order of start_depth and pattern_index. + // Since the longest-match criteria is only used for deduping matches of the same + // pattern and root node, we only need to perform pairwise comparisons within a + // small slice of the states array. + if ( + other_state->start_depth != state->start_depth || + other_state->pattern_index != state->pattern_index + ) break; + + bool left_contains_right, right_contains_left; + ts_query_cursor__compare_captures( + self, + state, + other_state, + &left_contains_right, + &right_contains_left + ); + if (left_contains_right) { + if (state->step_index == other_state->step_index) { + LOG( + " drop shorter state. pattern: %u, step_index: %u\n", + state->pattern_index, + state->step_index + ); + capture_list_pool_release(&self->capture_list_pool, other_state->capture_list_id); + array_erase(&self->states, k); + k--; + continue; + } + other_state->has_in_progress_alternatives = true; + } + if (right_contains_left) { + if (state->step_index == other_state->step_index) { + LOG( + " drop shorter state. pattern: %u, step_index: %u\n", + state->pattern_index, + state->step_index + ); + capture_list_pool_release(&self->capture_list_pool, state->capture_list_id); + array_erase(&self->states, j); + j--; + did_remove = true; + break; + } + state->has_in_progress_alternatives = true; + } + } + + // If the state is at the end of its pattern, remove it from the list + // of in-progress states and add it to the list of finished states. + if (!did_remove) { + LOG( + " keep state. pattern: %u, start_depth: %u, step_index: %u, capture_count: %u\n", + state->pattern_index, + state->start_depth, + state->step_index, + capture_list_pool_get(&self->capture_list_pool, state->capture_list_id)->size + ); + QueryStep *next_step = &self->query->steps.contents[state->step_index]; + if (next_step->depth == PATTERN_DONE_MARKER) { + if (state->has_in_progress_alternatives) { + LOG(" defer finishing pattern %u\n", state->pattern_index); + } else { + LOG(" finish pattern %u\n", state->pattern_index); + array_push(&self->finished_states, *state); + array_erase(&self->states, (uint32_t)(state - self->states.contents)); + did_match = true; + j--; + } + } + } + } + } + + if (ts_query_cursor__should_descend(self, node_intersects_range)) { + switch (ts_tree_cursor_goto_first_child_internal(&self->cursor)) { + case TreeCursorStepVisible: + self->depth++; + self->on_visible_node = true; + continue; + case TreeCursorStepHidden: + self->on_visible_node = false; + continue; + default: + break; + } + } + + self->ascending = true; + } + } +} + +bool ts_query_cursor_next_match( + TSQueryCursor *self, + TSQueryMatch *match +) { + if (self->finished_states.size == 0) { + if (!ts_query_cursor__advance(self, false)) { + return false; + } + } + + QueryState *state = &self->finished_states.contents[0]; + if (state->id == UINT32_MAX) state->id = self->next_state_id++; + match->id = state->id; + match->pattern_index = state->pattern_index; + const CaptureList *captures = capture_list_pool_get( + &self->capture_list_pool, + state->capture_list_id + ); + match->captures = captures->contents; + match->capture_count = captures->size; + capture_list_pool_release(&self->capture_list_pool, state->capture_list_id); + array_erase(&self->finished_states, 0); + return true; +} + +void ts_query_cursor_remove_match( + TSQueryCursor *self, + uint32_t match_id +) { + for (unsigned i = 0; i < self->finished_states.size; i++) { + const QueryState *state = &self->finished_states.contents[i]; + if (state->id == match_id) { + capture_list_pool_release( + &self->capture_list_pool, + state->capture_list_id + ); + array_erase(&self->finished_states, i); + return; + } + } + + // Remove unfinished query states as well to prevent future + // captures for a match being removed. + for (unsigned i = 0; i < self->states.size; i++) { + const QueryState *state = &self->states.contents[i]; + if (state->id == match_id) { + capture_list_pool_release( + &self->capture_list_pool, + state->capture_list_id + ); + array_erase(&self->states, i); + return; + } + } +} + +bool ts_query_cursor_next_capture( + TSQueryCursor *self, + TSQueryMatch *match, + uint32_t *capture_index +) { + // The goal here is to return captures in order, even though they may not + // be discovered in order, because patterns can overlap. Search for matches + // until there is a finished capture that is before any unfinished capture. + for (;;) { + // First, find the earliest capture in an unfinished match. + uint32_t first_unfinished_capture_byte; + uint32_t first_unfinished_pattern_index; + uint32_t first_unfinished_state_index; + bool first_unfinished_state_is_definite = false; + ts_query_cursor__first_in_progress_capture( + self, + &first_unfinished_state_index, + &first_unfinished_capture_byte, + &first_unfinished_pattern_index, + &first_unfinished_state_is_definite + ); + + // Then find the earliest capture in a finished match. It must occur + // before the first capture in an *unfinished* match. + QueryState *first_finished_state = NULL; + uint32_t first_finished_capture_byte = first_unfinished_capture_byte; + uint32_t first_finished_pattern_index = first_unfinished_pattern_index; + for (unsigned i = 0; i < self->finished_states.size;) { + QueryState *state = &self->finished_states.contents[i]; + const CaptureList *captures = capture_list_pool_get( + &self->capture_list_pool, + state->capture_list_id + ); + + // Remove states whose captures are all consumed. + if (state->consumed_capture_count >= captures->size) { + capture_list_pool_release( + &self->capture_list_pool, + state->capture_list_id + ); + array_erase(&self->finished_states, i); + continue; + } + + TSNode node = captures->contents[state->consumed_capture_count].node; + + bool node_precedes_range = ( + ts_node_end_byte(node) <= self->start_byte || + point_lte(ts_node_end_point(node), self->start_point) + ); + bool node_follows_range = ( + ts_node_start_byte(node) >= self->end_byte || + point_gte(ts_node_start_point(node), self->end_point) + ); + bool node_outside_of_range = node_precedes_range || node_follows_range; + + // Skip captures that are outside of the cursor's range. + if (node_outside_of_range) { + state->consumed_capture_count++; + continue; + } + + uint32_t node_start_byte = ts_node_start_byte(node); + if ( + node_start_byte < first_finished_capture_byte || + ( + node_start_byte == first_finished_capture_byte && + state->pattern_index < first_finished_pattern_index + ) + ) { + first_finished_state = state; + first_finished_capture_byte = node_start_byte; + first_finished_pattern_index = state->pattern_index; + } + i++; + } + + // If there is finished capture that is clearly before any unfinished + // capture, then return its match, and its capture index. Internally + // record the fact that the capture has been 'consumed'. + QueryState *state; + if (first_finished_state) { + state = first_finished_state; + } else if (first_unfinished_state_is_definite) { + state = &self->states.contents[first_unfinished_state_index]; + } else { + state = NULL; + } + + if (state) { + if (state->id == UINT32_MAX) state->id = self->next_state_id++; + match->id = state->id; + match->pattern_index = state->pattern_index; + const CaptureList *captures = capture_list_pool_get( + &self->capture_list_pool, + state->capture_list_id + ); + match->captures = captures->contents; + match->capture_count = captures->size; + *capture_index = state->consumed_capture_count; + state->consumed_capture_count++; + return true; + } + + if (capture_list_pool_is_empty(&self->capture_list_pool)) { + LOG( + " abandon state. index:%u, pattern:%u, offset:%u.\n", + first_unfinished_state_index, + first_unfinished_pattern_index, + first_unfinished_capture_byte + ); + capture_list_pool_release( + &self->capture_list_pool, + self->states.contents[first_unfinished_state_index].capture_list_id + ); + array_erase(&self->states, first_unfinished_state_index); + } + + // If there are no finished matches that are ready to be returned, then + // continue finding more matches. + if ( + !ts_query_cursor__advance(self, true) && + self->finished_states.size == 0 + ) return false; + } +} + +void ts_query_cursor_set_max_start_depth( + TSQueryCursor *self, + uint32_t max_start_depth +) { + self->max_start_depth = max_start_depth; +} + +#undef LOG diff --git a/parser/nnsrc/reduce_action.h b/parser/nnsrc/reduce_action.h new file mode 100644 index 00000000..0637c24c --- /dev/null +++ b/parser/nnsrc/reduce_action.h @@ -0,0 +1,34 @@ +#ifndef TREE_SITTER_REDUCE_ACTION_H_ +#define TREE_SITTER_REDUCE_ACTION_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "./array.h" +#include "api.h" + +typedef struct { + uint32_t count; + TSSymbol symbol; + int dynamic_precedence; + unsigned short production_id; +} ReduceAction; + +typedef Array(ReduceAction) ReduceActionSet; + +static inline void ts_reduce_action_set_add(ReduceActionSet *self, + ReduceAction new_action) { + for (uint32_t i = 0; i < self->size; i++) { + ReduceAction action = self->contents[i]; + if (action.symbol == new_action.symbol && action.count == new_action.count) + return; + } + array_push(self, new_action); +} + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_REDUCE_ACTION_H_ diff --git a/parser/nnsrc/reusable_node.h b/parser/nnsrc/reusable_node.h new file mode 100644 index 00000000..63fe3c1a --- /dev/null +++ b/parser/nnsrc/reusable_node.h @@ -0,0 +1,95 @@ +#include "./subtree.h" + +typedef struct { + Subtree tree; + uint32_t child_index; + uint32_t byte_offset; +} StackEntry; + +typedef struct { + Array(StackEntry) stack; + Subtree last_external_token; +} ReusableNode; + +static inline ReusableNode reusable_node_new(void) { + return (ReusableNode) {array_new(), NULL_SUBTREE}; +} + +static inline void reusable_node_clear(ReusableNode *self) { + array_clear(&self->stack); + self->last_external_token = NULL_SUBTREE; +} + +static inline Subtree reusable_node_tree(ReusableNode *self) { + return self->stack.size > 0 + ? self->stack.contents[self->stack.size - 1].tree + : NULL_SUBTREE; +} + +static inline uint32_t reusable_node_byte_offset(ReusableNode *self) { + return self->stack.size > 0 + ? self->stack.contents[self->stack.size - 1].byte_offset + : UINT32_MAX; +} + +static inline void reusable_node_delete(ReusableNode *self) { + array_delete(&self->stack); +} + +static inline void reusable_node_advance(ReusableNode *self) { + StackEntry last_entry = *array_back(&self->stack); + uint32_t byte_offset = last_entry.byte_offset + ts_subtree_total_bytes(last_entry.tree); + if (ts_subtree_has_external_tokens(last_entry.tree)) { + self->last_external_token = ts_subtree_last_external_token(last_entry.tree); + } + + Subtree tree; + uint32_t next_index; + do { + StackEntry popped_entry = array_pop(&self->stack); + next_index = popped_entry.child_index + 1; + if (self->stack.size == 0) return; + tree = array_back(&self->stack)->tree; + } while (ts_subtree_child_count(tree) <= next_index); + + array_push(&self->stack, ((StackEntry) { + .tree = ts_subtree_children(tree)[next_index], + .child_index = next_index, + .byte_offset = byte_offset, + })); +} + +static inline bool reusable_node_descend(ReusableNode *self) { + StackEntry last_entry = *array_back(&self->stack); + if (ts_subtree_child_count(last_entry.tree) > 0) { + array_push(&self->stack, ((StackEntry) { + .tree = ts_subtree_children(last_entry.tree)[0], + .child_index = 0, + .byte_offset = last_entry.byte_offset, + })); + return true; + } else { + return false; + } +} + +static inline void reusable_node_advance_past_leaf(ReusableNode *self) { + while (reusable_node_descend(self)) {} + reusable_node_advance(self); +} + +static inline void reusable_node_reset(ReusableNode *self, Subtree tree) { + reusable_node_clear(self); + array_push(&self->stack, ((StackEntry) { + .tree = tree, + .child_index = 0, + .byte_offset = 0, + })); + + // Never reuse the root node, because it has a non-standard internal structure + // due to transformations that are applied when it is accepted: adding the EOF + // child and any extra children. + if (!reusable_node_descend(self)) { + reusable_node_clear(self); + } +} diff --git a/parser/nnsrc/scanner.c b/parser/nnsrc/scanner.c new file mode 100644 index 00000000..1ed67ff3 --- /dev/null +++ b/parser/nnsrc/scanner.c @@ -0,0 +1,1241 @@ +#include "array.h" +#include "parser.h" + +#include +#include +#include +#include + +enum TokenType +{ + HEREDOC_START, + SIMPLE_HEREDOC_BODY, + HEREDOC_BODY_BEGINNING, + HEREDOC_CONTENT, + HEREDOC_END, + FILE_DESCRIPTOR, + EMPTY_VALUE, + CONCAT, + VARIABLE_NAME, + REGEX, + EXPANSION_WORD, + EXTGLOB_PATTERN, + BARE_DOLLAR, + IMMEDIATE_DOUBLE_HASH, + HEREDOC_ARROW, + HEREDOC_ARROW_DASH, + NEWLINE, + OPENING_PAREN, + ESAC, + ERROR_RECOVERY, +}; +// enum TokenType { +// HEREDOC_START, +// SIMPLE_HEREDOC_BODY, +// HEREDOC_BODY_BEGINNING, +// HEREDOC_CONTENT, +// HEREDOC_END, +// FILE_DESCRIPTOR, +// EMPTY_VALUE, +// CONCAT, +// VARIABLE_NAME, +// TEST_OPERATOR, +// REGEX, +// REGEX_NO_SLASH, +// REGEX_NO_SPACE, +// EXPANSION_WORD, +// EXTGLOB_PATTERN, +// BARE_DOLLAR, +// BRACE_START, +// IMMEDIATE_DOUBLE_HASH, +// EXTERNAL_EXPANSION_SYM_HASH, +// EXTERNAL_EXPANSION_SYM_BANG, +// EXTERNAL_EXPANSION_SYM_EQUAL, +// CLOSING_BRACE, +// CLOSING_BRACKET, +// HEREDOC_ARROW, +// HEREDOC_ARROW_DASH, +// NEWLINE, +// OPENING_PAREN, +// ESAC, +// ERROR_RECOVERY, +// }; + +typedef Array(char) String; + +typedef struct +{ + bool is_raw; + bool started; + bool allows_indent; + String delimiter; + String current_leading_word; +} Heredoc; + +#define heredoc_new() \ + { \ + .is_raw = false, \ + .started = false, \ + .allows_indent = false, \ + .delimiter = array_new(), \ + .current_leading_word = array_new(), \ + }; + +typedef struct +{ + uint8_t last_glob_paren_depth; + bool ext_was_in_double_quote; + bool ext_saw_outside_quote; + Array(Heredoc) heredocs; +} Scanner; + +static inline void advance(TSLexer *lexer) +{ + lexer->advance(lexer, false); +} + +static inline void skip(TSLexer *lexer) +{ + lexer->advance(lexer, true); +} + +static inline bool in_error_recovery(const bool *valid_symbols) +{ + return valid_symbols[ERROR_RECOVERY]; +} + +static inline void reset_string(String *string) +{ + if (string->size > 0) + { + memset(string->contents, 0, string->size); + array_clear(string); + } +} + +static inline void reset_heredoc(Heredoc *heredoc) +{ + heredoc->is_raw = false; + heredoc->started = false; + heredoc->allows_indent = false; + reset_string(&heredoc->delimiter); +} + +static inline void reset(Scanner *scanner) +{ + for (uint32_t i = 0; i < scanner->heredocs.size; i++) + { + reset_heredoc(array_get(&scanner->heredocs, i)); + } +} + +static unsigned serialize(Scanner *scanner, char *buffer) +{ + uint32_t size = 0; + + buffer[size++] = (char)scanner->last_glob_paren_depth; + buffer[size++] = (char)scanner->ext_was_in_double_quote; + buffer[size++] = (char)scanner->ext_saw_outside_quote; + buffer[size++] = (char)scanner->heredocs.size; + + for (uint32_t i = 0; i < scanner->heredocs.size; i++) + { + Heredoc *heredoc = array_get(&scanner->heredocs, i); + if (heredoc->delimiter.size + 3 + size >= TREE_SITTER_SERIALIZATION_BUFFER_SIZE) + { + return 0; + } + + buffer[size++] = (char)heredoc->is_raw; + buffer[size++] = (char)heredoc->started; + buffer[size++] = (char)heredoc->allows_indent; + + memcpy(&buffer[size], &heredoc->delimiter.size, sizeof(uint32_t)); + size += sizeof(uint32_t); + if (heredoc->delimiter.size > 0) + { + memcpy(&buffer[size], heredoc->delimiter.contents, heredoc->delimiter.size); + size += heredoc->delimiter.size; + } + } + return size; +} + +static void deserialize(Scanner *scanner, const char *buffer, unsigned length) +{ + if (length == 0) + { + reset(scanner); + } + else + { + uint32_t size = 0; + scanner->last_glob_paren_depth = buffer[size++]; + scanner->ext_was_in_double_quote = buffer[size++]; + scanner->ext_saw_outside_quote = buffer[size++]; + uint32_t heredoc_count = (unsigned char)buffer[size++]; + for (uint32_t i = 0; i < heredoc_count; i++) + { + Heredoc *heredoc = NULL; + if (i < scanner->heredocs.size) + { + heredoc = array_get(&scanner->heredocs, i); + } + else + { + Heredoc new_heredoc = heredoc_new(); + array_push(&scanner->heredocs, new_heredoc); + heredoc = array_back(&scanner->heredocs); + } + + heredoc->is_raw = buffer[size++]; + heredoc->started = buffer[size++]; + heredoc->allows_indent = buffer[size++]; + + memcpy(&heredoc->delimiter.size, &buffer[size], sizeof(uint32_t)); + size += sizeof(uint32_t); + array_reserve(&heredoc->delimiter, heredoc->delimiter.size); + + if (heredoc->delimiter.size > 0) + { + memcpy(heredoc->delimiter.contents, &buffer[size], heredoc->delimiter.size); + size += heredoc->delimiter.size; + } + } + assert(size == length); + } +} + +/** + * Consume a "word" in POSIX parlance, and returns it unquoted. + * + * This is an approximate implementation that doesn't deal with any + * POSIX-mandated substitution, and assumes the default value for + * IFS. + */ +static bool advance_word(TSLexer *lexer, String *unquoted_word) +{ + bool empty = true; + int32_t quote = 0; + + if (lexer->lookahead == '\'' || lexer->lookahead == '"') + { + quote = lexer->lookahead; + advance(lexer); + } + + while (lexer->lookahead && + !(quote ? lexer->lookahead == quote || lexer->lookahead == '\r' || lexer->lookahead == '\n' : iswspace(lexer->lookahead))) + { + if (lexer->lookahead == '\\') + { + advance(lexer); + if (!lexer->lookahead) + return false; + } + empty = false; + array_push(unquoted_word, lexer->lookahead); + advance(lexer); + } + array_push(unquoted_word, '\0'); + + if (quote && lexer->lookahead == quote) + advance(lexer); + + return !empty; +} + +static inline bool scan_bare_dollar(TSLexer *lexer) +{ + while (iswspace(lexer->lookahead) && lexer->lookahead != '\n' && !lexer->eof(lexer)) + skip(lexer); + + if (lexer->lookahead == '$') + { + advance(lexer); + lexer->result_symbol = BARE_DOLLAR; + lexer->mark_end(lexer); + return (iswspace(lexer->lookahead) || lexer->eof(lexer) || lexer->lookahead == '\"'); + } + + return false; +} + +static bool scan_heredoc_start(Heredoc *heredoc, TSLexer *lexer) +{ + while (iswspace(lexer->lookahead)) + { + skip(lexer); + } + + lexer->result_symbol = HEREDOC_START; + heredoc->is_raw = lexer->lookahead == '\'' || lexer->lookahead == '"' || lexer->lookahead == '\\'; + + bool found_delimiter = advance_word(lexer, &heredoc->delimiter); + if (!found_delimiter) + { + reset_string(&heredoc->delimiter); + return false; + } + return found_delimiter; +} + +static bool scan_heredoc_end_identifier(Heredoc *heredoc, TSLexer *lexer) +{ + reset_string(&heredoc->current_leading_word); + // Scan the first 'n' characters on this line, to see if they match the + // heredoc delimiter + int32_t size = 0; + if (heredoc->delimiter.size > 0) + { + while (lexer->lookahead != '\0' && lexer->lookahead != '\n' && (int32_t)*array_get(&heredoc->delimiter, size) == lexer->lookahead && + heredoc->current_leading_word.size < heredoc->delimiter.size) + { + array_push(&heredoc->current_leading_word, lexer->lookahead); + advance(lexer); + size++; + } + } + array_push(&heredoc->current_leading_word, '\0'); + return heredoc->delimiter.size == 0 ? false : strcmp(heredoc->current_leading_word.contents, heredoc->delimiter.contents) == 0; +} + +static bool scan_heredoc_content(Scanner *scanner, TSLexer *lexer, enum TokenType middle_type, enum TokenType end_type) +{ + bool did_advance = false; + Heredoc *heredoc = array_back(&scanner->heredocs); + + for (;;) + { + switch (lexer->lookahead) + { + case '\0': { + if (lexer->eof(lexer) && did_advance) + { + reset_heredoc(heredoc); + lexer->result_symbol = end_type; + return true; + } + return false; + } + + case '\\': { + did_advance = true; + advance(lexer); + advance(lexer); + break; + } + + case '$': { + if (heredoc->is_raw) + { + did_advance = true; + advance(lexer); + break; + } + if (did_advance) + { + lexer->mark_end(lexer); + lexer->result_symbol = middle_type; + heredoc->started = true; + advance(lexer); + if (iswalpha(lexer->lookahead) || lexer->lookahead == '{' || lexer->lookahead == '(') + { + return true; + } + break; + } + if (middle_type == HEREDOC_BODY_BEGINNING && lexer->get_column(lexer) == 0) + { + lexer->result_symbol = middle_type; + heredoc->started = true; + return true; + } + return false; + } + + case '\n': { + if (!did_advance) + { + skip(lexer); + } + else + { + advance(lexer); + } + did_advance = true; + if (heredoc->allows_indent) + { + while (iswspace(lexer->lookahead)) + { + advance(lexer); + } + } + lexer->result_symbol = heredoc->started ? middle_type : end_type; + lexer->mark_end(lexer); + if (scan_heredoc_end_identifier(heredoc, lexer)) + { + if (lexer->result_symbol == HEREDOC_END) + { + (void)array_pop(&scanner->heredocs); + } + return true; + } + break; + } + + default: { + if (lexer->get_column(lexer) == 0) + { + // an alternative is to check the starting column of the + // heredoc body and track that statefully + while (iswspace(lexer->lookahead)) + { + if (did_advance) + { + advance(lexer); + } + else + { + skip(lexer); + } + } + if (end_type != SIMPLE_HEREDOC_BODY) + { + lexer->result_symbol = middle_type; + if (scan_heredoc_end_identifier(heredoc, lexer)) + { + return true; + } + } + if (end_type == SIMPLE_HEREDOC_BODY) + { + lexer->result_symbol = end_type; + lexer->mark_end(lexer); + if (scan_heredoc_end_identifier(heredoc, lexer)) + { + return true; + } + } + } + did_advance = true; + advance(lexer); + break; + } + } + } +} + +static bool scan(Scanner *scanner, TSLexer *lexer, const bool *valid_symbols) +{ + if (valid_symbols[CONCAT] && !in_error_recovery(valid_symbols)) + { + if (!(lexer->lookahead == 0 || iswspace(lexer->lookahead) || lexer->lookahead == '>' || lexer->lookahead == '<' || + lexer->lookahead == ')' || lexer->lookahead == '(' || lexer->lookahead == ';' || lexer->lookahead == '&' || + lexer->lookahead == '|')) + { + lexer->result_symbol = CONCAT; + // So for a`b`, we want to return a concat. We check if the + // 2nd backtick has whitespace after it, and if it does we + // return concat. + if (lexer->lookahead == '`') + { + lexer->mark_end(lexer); + advance(lexer); + while (lexer->lookahead != '`' && !lexer->eof(lexer)) + { + advance(lexer); + } + if (lexer->eof(lexer)) + { + return false; + } + if (lexer->lookahead == '`') + { + advance(lexer); + } + return iswspace(lexer->lookahead) || lexer->eof(lexer); + } + // strings w/ expansions that contains escaped quotes or + // backslashes need this to return a concat + if (lexer->lookahead == '\\') + { + lexer->mark_end(lexer); + advance(lexer); + if (lexer->lookahead == '"' || lexer->lookahead == '\'' || lexer->lookahead == '\\') + { + return true; + } + if (lexer->eof(lexer)) + { + return false; + } + } + else + { + return true; + } + } + } + + if (valid_symbols[IMMEDIATE_DOUBLE_HASH] && !in_error_recovery(valid_symbols)) + { + // advance two # and ensure not } after + if (lexer->lookahead == '#') + { + lexer->mark_end(lexer); + advance(lexer); + if (lexer->lookahead == '#') + { + advance(lexer); + if (lexer->lookahead != '}') + { + lexer->result_symbol = IMMEDIATE_DOUBLE_HASH; + lexer->mark_end(lexer); + return true; + } + } + } + } + + if (valid_symbols[EMPTY_VALUE]) + { + if (iswspace(lexer->lookahead) || lexer->eof(lexer) || lexer->lookahead == ';' || lexer->lookahead == '&') + { + lexer->result_symbol = EMPTY_VALUE; + return true; + } + } + + if ((valid_symbols[HEREDOC_BODY_BEGINNING] || valid_symbols[SIMPLE_HEREDOC_BODY]) && scanner->heredocs.size > 0 && + !array_back(&scanner->heredocs)->started && !in_error_recovery(valid_symbols)) + { + return scan_heredoc_content(scanner, lexer, HEREDOC_BODY_BEGINNING, SIMPLE_HEREDOC_BODY); + } + + if (valid_symbols[HEREDOC_END] && scanner->heredocs.size > 0) + { + Heredoc *heredoc = array_back(&scanner->heredocs); + if (scan_heredoc_end_identifier(heredoc, lexer)) + { + array_delete(&heredoc->current_leading_word); + array_delete(&heredoc->delimiter); + (void)array_pop(&scanner->heredocs); + lexer->result_symbol = HEREDOC_END; + return true; + } + } + + if (valid_symbols[HEREDOC_CONTENT] && scanner->heredocs.size > 0 && array_back(&scanner->heredocs)->started && + !in_error_recovery(valid_symbols)) + { + return scan_heredoc_content(scanner, lexer, HEREDOC_CONTENT, HEREDOC_END); + } + + if (valid_symbols[HEREDOC_START] && !in_error_recovery(valid_symbols) && scanner->heredocs.size > 0) + { + return scan_heredoc_start(array_back(&scanner->heredocs), lexer); + } + + if ((valid_symbols[VARIABLE_NAME] || valid_symbols[FILE_DESCRIPTOR] || valid_symbols[HEREDOC_ARROW]) && + !in_error_recovery(valid_symbols)) + { + for (;;) + { + if ((lexer->lookahead == ' ' || lexer->lookahead == '\t' || lexer->lookahead == '\r' || + (lexer->lookahead == '\n' && !valid_symbols[NEWLINE])) && + !valid_symbols[EXPANSION_WORD]) + { + skip(lexer); + } + else if (lexer->lookahead == '\\') + { + skip(lexer); + + if (lexer->eof(lexer)) + { + lexer->mark_end(lexer); + lexer->result_symbol = VARIABLE_NAME; + return true; + } + + if (lexer->lookahead == '\r') + { + skip(lexer); + } + if (lexer->lookahead == '\n') + { + skip(lexer); + } + else + { + if (lexer->lookahead == '\\' && valid_symbols[EXPANSION_WORD]) + { + goto expansion_word; + } + return false; + } + } + else + { + break; + } + } + + // no '*', '@', '?', '-', '$', '0', '_' + if (!valid_symbols[EXPANSION_WORD] && (lexer->lookahead == '*' || lexer->lookahead == '@' || lexer->lookahead == '?' || + lexer->lookahead == '-' || lexer->lookahead == '0' || lexer->lookahead == '_')) + { + lexer->mark_end(lexer); + advance(lexer); + if (lexer->lookahead == '=' || lexer->lookahead == '[' || lexer->lookahead == ':' || lexer->lookahead == '-' || + lexer->lookahead == '%' || lexer->lookahead == '#' || lexer->lookahead == '/') + { + return false; + } + if (valid_symbols[EXTGLOB_PATTERN] && iswspace(lexer->lookahead)) + { + lexer->mark_end(lexer); + lexer->result_symbol = EXTGLOB_PATTERN; + return true; + } + } + + if (valid_symbols[HEREDOC_ARROW] && lexer->lookahead == '<') + { + advance(lexer); + if (lexer->lookahead == '<') + { + advance(lexer); + if (lexer->lookahead == '-') + { + advance(lexer); + Heredoc heredoc = heredoc_new(); + heredoc.allows_indent = true; + array_push(&scanner->heredocs, heredoc); + lexer->result_symbol = HEREDOC_ARROW_DASH; + } + else if (lexer->lookahead == '<' || lexer->lookahead == '=') + { + return false; + } + else + { + Heredoc heredoc = heredoc_new(); + array_push(&scanner->heredocs, heredoc); + lexer->result_symbol = HEREDOC_ARROW; + } + return true; + } + return false; + } + + bool is_number = true; + if (iswdigit(lexer->lookahead)) + { + advance(lexer); + } + else if (iswalpha(lexer->lookahead) || lexer->lookahead == '_') + { + is_number = false; + advance(lexer); + } + else + { + if (lexer->lookahead == '{') + { + goto brace_start; + } + if (valid_symbols[EXPANSION_WORD]) + { + goto expansion_word; + } + if (valid_symbols[EXTGLOB_PATTERN]) + { + goto extglob_pattern; + } + return false; + } + + for (;;) + { + if (iswdigit(lexer->lookahead)) + { + advance(lexer); + } + else if (iswalpha(lexer->lookahead) || lexer->lookahead == '_') + { + is_number = false; + advance(lexer); + } + else + { + break; + } + } + + if (is_number && valid_symbols[FILE_DESCRIPTOR] && (lexer->lookahead == '>' || lexer->lookahead == '<')) + { + lexer->result_symbol = FILE_DESCRIPTOR; + return true; + } + + if (valid_symbols[VARIABLE_NAME]) + { + if (lexer->lookahead == '+') + { + lexer->mark_end(lexer); + advance(lexer); + if (lexer->lookahead == '=' || lexer->lookahead == ':') + { + lexer->result_symbol = VARIABLE_NAME; + return true; + } + return false; + } + if (lexer->lookahead == '/') + { + return false; + } + if (lexer->lookahead == '=' || lexer->lookahead == '[' || + (lexer->lookahead == ':' && + !valid_symbols[OPENING_PAREN]) || // TODO(amaanq): more cases for regular word chars but not variable + // names for function words, only handling : for now? #235 + lexer->lookahead == '%' || + (lexer->lookahead == '#' && !is_number) || lexer->lookahead == '@' || (lexer->lookahead == '-')) + { + lexer->mark_end(lexer); + lexer->result_symbol = VARIABLE_NAME; + return true; + } + + if (lexer->lookahead == '?') + { + lexer->mark_end(lexer); + advance(lexer); + lexer->result_symbol = VARIABLE_NAME; + return iswalpha(lexer->lookahead); + } + } + + return false; + } + + if (valid_symbols[BARE_DOLLAR] && !in_error_recovery(valid_symbols) && scan_bare_dollar(lexer)) + { + return true; + } + + if ((valid_symbols[REGEX]) && !in_error_recovery(valid_symbols)) + { + if (valid_symbols[REGEX]) + { + while (iswspace(lexer->lookahead)) + { + skip(lexer); + } + } + + if ((lexer->lookahead != '"' && lexer->lookahead != '\'') || ((lexer->lookahead == '$' || lexer->lookahead == '\'')) || + (lexer->lookahead == '\'')) + { + typedef struct + { + bool done; + bool advanced_once; + bool found_non_alnumdollarunderdash; + bool last_was_escape; + bool in_single_quote; + uint32_t paren_depth; + uint32_t bracket_depth; + uint32_t brace_depth; + } State; + + if (lexer->lookahead == '$') + { + lexer->mark_end(lexer); + advance(lexer); + if (lexer->lookahead == '(') + { + return false; + } + } + + lexer->mark_end(lexer); + + State state = {false, false, false, false, false, 0, 0, 0}; + while (!state.done) + { + if (state.in_single_quote) + { + if (lexer->lookahead == '\'') + { + state.in_single_quote = false; + advance(lexer); + lexer->mark_end(lexer); + } + } + switch (lexer->lookahead) + { + case '\\': + state.last_was_escape = true; + break; + case '\0': + return false; + case '(': + state.paren_depth++; + state.last_was_escape = false; + break; + case '[': + state.bracket_depth++; + state.last_was_escape = false; + break; + case '{': + if (!state.last_was_escape) + state.brace_depth++; + state.last_was_escape = false; + break; + case ')': + if (state.paren_depth == 0) + state.done = true; + state.paren_depth--; + state.last_was_escape = false; + break; + case ']': + if (state.bracket_depth == 0) + state.done = true; + state.bracket_depth--; + state.last_was_escape = false; + break; + case '}': + if (state.brace_depth == 0) + state.done = true; + state.brace_depth--; + state.last_was_escape = false; + break; + case '\'': + // Enter or exit a single-quoted string. + state.in_single_quote = !state.in_single_quote; + advance(lexer); + state.advanced_once = true; + state.last_was_escape = false; + continue; + default: + state.last_was_escape = false; + break; + } + + if (!state.done) + { + if (valid_symbols[REGEX]) + { + bool was_space = !state.in_single_quote && iswspace(lexer->lookahead); + advance(lexer); + state.advanced_once = true; + if (!was_space || state.paren_depth > 0) + { + lexer->mark_end(lexer); + } + } + } + } + + lexer->result_symbol = REGEX; + if (valid_symbols[REGEX] && !state.advanced_once) + { + return false; + } + return true; + } + } + +extglob_pattern: + if (valid_symbols[EXTGLOB_PATTERN] && !in_error_recovery(valid_symbols)) + { + // first skip ws, then check for ? * + @ ! + while (iswspace(lexer->lookahead)) + { + skip(lexer); + } + + if (lexer->lookahead == '?' || lexer->lookahead == '*' || lexer->lookahead == '+' || lexer->lookahead == '@' || + lexer->lookahead == '!' || lexer->lookahead == '-' || lexer->lookahead == ')' || lexer->lookahead == '\\' || + lexer->lookahead == '.' || lexer->lookahead == '[' || (iswalpha(lexer->lookahead))) + { + if (lexer->lookahead == '\\') + { + advance(lexer); + if ((iswspace(lexer->lookahead) || lexer->lookahead == '"') && lexer->lookahead != '\r' && lexer->lookahead != '\n') + { + advance(lexer); + } + else + { + return false; + } + } + + if (lexer->lookahead == ')' && scanner->last_glob_paren_depth == 0) + { + lexer->mark_end(lexer); + advance(lexer); + + if (iswspace(lexer->lookahead)) + { + return false; + } + } + + lexer->mark_end(lexer); + bool was_non_alpha = !iswalpha(lexer->lookahead); + if (lexer->lookahead != '[') + { + // no esac + if (lexer->lookahead == 'e') + { + lexer->mark_end(lexer); + advance(lexer); + if (lexer->lookahead == 's') + { + advance(lexer); + if (lexer->lookahead == 'a') + { + advance(lexer); + if (lexer->lookahead == 'c') + { + advance(lexer); + if (iswspace(lexer->lookahead)) + { + return false; + } + } + } + } + } + else + { + advance(lexer); + } + } + + // -\w is just a word, find something else special + if (lexer->lookahead == '-') + { + lexer->mark_end(lexer); + advance(lexer); + while (iswalnum(lexer->lookahead)) + { + advance(lexer); + } + + if (lexer->lookahead == ')' || lexer->lookahead == '\\' || lexer->lookahead == '.') + { + return false; + } + lexer->mark_end(lexer); + } + + // case item -) or *) + if (lexer->lookahead == ')' && scanner->last_glob_paren_depth == 0) + { + lexer->mark_end(lexer); + advance(lexer); + if (iswspace(lexer->lookahead)) + { + lexer->result_symbol = EXTGLOB_PATTERN; + return was_non_alpha; + } + } + + if (iswspace(lexer->lookahead)) + { + lexer->mark_end(lexer); + lexer->result_symbol = EXTGLOB_PATTERN; + scanner->last_glob_paren_depth = 0; + return true; + } + + if (lexer->lookahead == '$') + { + lexer->mark_end(lexer); + advance(lexer); + if (lexer->lookahead == '{' || lexer->lookahead == '(') + { + lexer->result_symbol = EXTGLOB_PATTERN; + return true; + } + } + + if (lexer->lookahead == '|') + { + lexer->mark_end(lexer); + advance(lexer); + lexer->result_symbol = EXTGLOB_PATTERN; + return true; + } + + if (!iswalnum(lexer->lookahead) && lexer->lookahead != '(' && lexer->lookahead != '"' && lexer->lookahead != '[' && + lexer->lookahead != '?' && lexer->lookahead != '/' && lexer->lookahead != '\\' && lexer->lookahead != '_' && + lexer->lookahead != '*') + { + return false; + } + + typedef struct + { + bool done; + bool saw_non_alphadot; + uint32_t paren_depth; + uint32_t bracket_depth; + uint32_t brace_depth; + } State; + + State state = {false, was_non_alpha, scanner->last_glob_paren_depth, 0, 0}; + while (!state.done) + { + switch (lexer->lookahead) + { + case '\0': + return false; + case '(': + state.paren_depth++; + break; + case '[': + state.bracket_depth++; + break; + case '{': + state.brace_depth++; + break; + case ')': + if (state.paren_depth == 0) + { + state.done = true; + } + state.paren_depth--; + break; + case ']': + if (state.bracket_depth == 0) + { + state.done = true; + } + state.bracket_depth--; + break; + case '}': + if (state.brace_depth == 0) + { + state.done = true; + } + state.brace_depth--; + break; + } + + if (lexer->lookahead == '|') + { + lexer->mark_end(lexer); + advance(lexer); + if (state.paren_depth == 0 && state.bracket_depth == 0 && state.brace_depth == 0) + { + lexer->result_symbol = EXTGLOB_PATTERN; + return true; + } + } + + if (!state.done) + { + bool was_space = iswspace(lexer->lookahead); + if (lexer->lookahead == '$') + { + lexer->mark_end(lexer); + if (!iswalpha(lexer->lookahead) && lexer->lookahead != '.' && lexer->lookahead != '\\') + { + state.saw_non_alphadot = true; + } + advance(lexer); + if (lexer->lookahead == '(' || lexer->lookahead == '{') + { + lexer->result_symbol = EXTGLOB_PATTERN; + scanner->last_glob_paren_depth = state.paren_depth; + return state.saw_non_alphadot; + } + } + if (was_space) + { + lexer->mark_end(lexer); + lexer->result_symbol = EXTGLOB_PATTERN; + scanner->last_glob_paren_depth = 0; + return state.saw_non_alphadot; + } + if (lexer->lookahead == '"') + { + lexer->mark_end(lexer); + lexer->result_symbol = EXTGLOB_PATTERN; + scanner->last_glob_paren_depth = 0; + return state.saw_non_alphadot; + } + if (lexer->lookahead == '\\') + { + if (!iswalpha(lexer->lookahead) && lexer->lookahead != '.' && lexer->lookahead != '\\') + { + state.saw_non_alphadot = true; + } + advance(lexer); + if (iswspace(lexer->lookahead) || lexer->lookahead == '"') + { + advance(lexer); + } + } + else + { + if (!iswalpha(lexer->lookahead) && lexer->lookahead != '.' && lexer->lookahead != '\\') + { + state.saw_non_alphadot = true; + } + advance(lexer); + } + if (!was_space) + { + lexer->mark_end(lexer); + } + } + } + + lexer->result_symbol = EXTGLOB_PATTERN; + scanner->last_glob_paren_depth = 0; + return state.saw_non_alphadot; + } + scanner->last_glob_paren_depth = 0; + + return false; + } + +expansion_word: + if (valid_symbols[EXPANSION_WORD]) + { + bool advanced_once = false; + bool advance_once_space = false; + for (;;) + { + if (lexer->lookahead == '\"') + { + return false; + } + if (lexer->lookahead == '$') + { + lexer->mark_end(lexer); + advance(lexer); + if (lexer->lookahead == '{' || lexer->lookahead == '(' || lexer->lookahead == '\'' || iswalnum(lexer->lookahead)) + { + lexer->result_symbol = EXPANSION_WORD; + return advanced_once; + } + advanced_once = true; + } + + if (lexer->lookahead == '}') + { + lexer->mark_end(lexer); + lexer->result_symbol = EXPANSION_WORD; + return advanced_once || advance_once_space; + } + + if (lexer->lookahead == '(' && !(advanced_once || advance_once_space)) + { + lexer->mark_end(lexer); + advance(lexer); + while (lexer->lookahead != ')' && !lexer->eof(lexer)) + { + // if we find a $( or ${ assume this is valid and is + // a garbage concatenation of some weird word + an + // expansion + // I wonder where this can fail + if (lexer->lookahead == '$') + { + lexer->mark_end(lexer); + advance(lexer); + if (lexer->lookahead == '{' || lexer->lookahead == '(' || lexer->lookahead == '\'' || iswalnum(lexer->lookahead)) + { + lexer->result_symbol = EXPANSION_WORD; + return advanced_once; + } + advanced_once = true; + } + else + { + advanced_once = advanced_once || !iswspace(lexer->lookahead); + advance_once_space = advance_once_space || iswspace(lexer->lookahead); + advance(lexer); + } + } + lexer->mark_end(lexer); + if (lexer->lookahead == ')') + { + advanced_once = true; + advance(lexer); + lexer->mark_end(lexer); + if (lexer->lookahead == '}') + { + return false; + } + } + else + { + return false; + } + } + + if (lexer->lookahead == '\'') + { + return false; + } + + if (lexer->eof(lexer)) + { + return false; + } + advanced_once = advanced_once || !iswspace(lexer->lookahead); + advance_once_space = advance_once_space || iswspace(lexer->lookahead); + advance(lexer); + } + } + +brace_start: + return false; +} + +void *tree_sitter_sh_external_scanner_create() +{ + Scanner *scanner = calloc(1, sizeof(Scanner)); + array_init(&scanner->heredocs); + return scanner; +} + +bool tree_sitter_sh_external_scanner_scan(void *payload, TSLexer *lexer, const bool *valid_symbols) +{ + Scanner *scanner = (Scanner *)payload; + return scan(scanner, lexer, valid_symbols); +} + +unsigned tree_sitter_sh_external_scanner_serialize(void *payload, char *state) +{ + Scanner *scanner = (Scanner *)payload; + return serialize(scanner, state); +} + +void tree_sitter_sh_external_scanner_deserialize(void *payload, const char *state, unsigned length) +{ + Scanner *scanner = (Scanner *)payload; + deserialize(scanner, state, length); +} + +void tree_sitter_sh_external_scanner_destroy(void *payload) +{ + Scanner *scanner = (Scanner *)payload; + for (size_t i = 0; i < scanner->heredocs.size; i++) + { + Heredoc *heredoc = array_get(&scanner->heredocs, i); + array_delete(&heredoc->current_leading_word); + array_delete(&heredoc->delimiter); + } + array_delete(&scanner->heredocs); + free(scanner); +} diff --git a/parser/nnsrc/stack.c b/parser/nnsrc/stack.c new file mode 100644 index 00000000..98d8c561 --- /dev/null +++ b/parser/nnsrc/stack.c @@ -0,0 +1,899 @@ +#include "./alloc.h" +#include "./language.h" +#include "./subtree.h" +#include "./array.h" +#include "./stack.h" +#include "./length.h" +#include +#include +#include + +#define MAX_LINK_COUNT 8 +#define MAX_NODE_POOL_SIZE 50 +#define MAX_ITERATOR_COUNT 64 + +#if defined _WIN32 && !defined __GNUC__ +#define forceinline __forceinline +#else +#define forceinline static inline __attribute__((always_inline)) +#endif + +typedef struct StackNode StackNode; + +typedef struct { + StackNode *node; + Subtree subtree; + bool is_pending; +} StackLink; + +struct StackNode { + TSStateId state; + Length position; + StackLink links[MAX_LINK_COUNT]; + short unsigned int link_count; + uint32_t ref_count; + unsigned error_cost; + unsigned node_count; + int dynamic_precedence; +}; + +typedef struct { + StackNode *node; + SubtreeArray subtrees; + uint32_t subtree_count; + bool is_pending; +} StackIterator; + +typedef Array(StackNode *) StackNodeArray; + +typedef enum { + StackStatusActive, + StackStatusPaused, + StackStatusHalted, +} StackStatus; + +typedef struct { + StackNode *node; + StackSummary *summary; + unsigned node_count_at_last_error; + Subtree last_external_token; + Subtree lookahead_when_paused; + StackStatus status; +} StackHead; + +struct Stack { + Array(StackHead) heads; + StackSliceArray slices; + Array(StackIterator) iterators; + StackNodeArray node_pool; + StackNode *base_node; + SubtreePool *subtree_pool; +}; + +typedef unsigned StackAction; +enum { + StackActionNone, + StackActionStop = 1, + StackActionPop = 2, +}; + +typedef StackAction (*StackCallback)(void *, const StackIterator *); + +static void stack_node_retain(StackNode *self) { + if (!self) + return; + assert(self->ref_count > 0); + self->ref_count++; + assert(self->ref_count != 0); +} + +static void stack_node_release( + StackNode *self, + StackNodeArray *pool, + SubtreePool *subtree_pool +) { +recur: + assert(self->ref_count != 0); + self->ref_count--; + if (self->ref_count > 0) return; + + StackNode *first_predecessor = NULL; + if (self->link_count > 0) { + for (unsigned i = self->link_count - 1; i > 0; i--) { + StackLink link = self->links[i]; + if (link.subtree.ptr) ts_subtree_release(subtree_pool, link.subtree); + stack_node_release(link.node, pool, subtree_pool); + } + StackLink link = self->links[0]; + if (link.subtree.ptr) ts_subtree_release(subtree_pool, link.subtree); + first_predecessor = self->links[0].node; + } + + if (pool->size < MAX_NODE_POOL_SIZE) { + array_push(pool, self); + } else { + ts_free(self); + } + + if (first_predecessor) { + self = first_predecessor; + goto recur; + } +} + +/// Get the number of nodes in the subtree, for the purpose of measuring +/// how much progress has been made by a given version of the stack. +static uint32_t stack__subtree_node_count(Subtree subtree) { + uint32_t count = ts_subtree_visible_descendant_count(subtree); + if (ts_subtree_visible(subtree)) count++; + + // Count intermediate error nodes even though they are not visible, + // because a stack version's node count is used to check whether it + // has made any progress since the last time it encountered an error. + if (ts_subtree_symbol(subtree) == ts_builtin_sym_error_repeat) count++; + + return count; +} + +static StackNode *stack_node_new( + StackNode *previous_node, + Subtree subtree, + bool is_pending, + TSStateId state, + StackNodeArray *pool +) { + StackNode *node = pool->size > 0 + ? array_pop(pool) + : ts_malloc(sizeof(StackNode)); + *node = (StackNode) { + .ref_count = 1, + .link_count = 0, + .state = state + }; + + if (previous_node) { + node->link_count = 1; + node->links[0] = (StackLink) { + .node = previous_node, + .subtree = subtree, + .is_pending = is_pending, + }; + + node->position = previous_node->position; + node->error_cost = previous_node->error_cost; + node->dynamic_precedence = previous_node->dynamic_precedence; + node->node_count = previous_node->node_count; + + if (subtree.ptr) { + node->error_cost += ts_subtree_error_cost(subtree); + node->position = length_add(node->position, ts_subtree_total_size(subtree)); + node->node_count += stack__subtree_node_count(subtree); + node->dynamic_precedence += ts_subtree_dynamic_precedence(subtree); + } + } else { + node->position = length_zero(); + node->error_cost = 0; + } + + return node; +} + +static bool stack__subtree_is_equivalent(Subtree left, Subtree right) { + if (left.ptr == right.ptr) return true; + if (!left.ptr || !right.ptr) return false; + + // Symbols must match + if (ts_subtree_symbol(left) != ts_subtree_symbol(right)) return false; + + // If both have errors, don't bother keeping both. + if (ts_subtree_error_cost(left) > 0 && ts_subtree_error_cost(right) > 0) return true; + + return ( + ts_subtree_padding(left).bytes == ts_subtree_padding(right).bytes && + ts_subtree_size(left).bytes == ts_subtree_size(right).bytes && + ts_subtree_child_count(left) == ts_subtree_child_count(right) && + ts_subtree_extra(left) == ts_subtree_extra(right) && + ts_subtree_external_scanner_state_eq(left, right) + ); +} + +static void stack_node_add_link( + StackNode *self, + StackLink link, + SubtreePool *subtree_pool +) { + if (link.node == self) return; + + for (int i = 0; i < self->link_count; i++) { + StackLink *existing_link = &self->links[i]; + if (stack__subtree_is_equivalent(existing_link->subtree, link.subtree)) { + // In general, we preserve ambiguities until they are removed from the stack + // during a pop operation where multiple paths lead to the same node. But in + // the special case where two links directly connect the same pair of nodes, + // we can safely remove the ambiguity ahead of time without changing behavior. + if (existing_link->node == link.node) { + if ( + ts_subtree_dynamic_precedence(link.subtree) > + ts_subtree_dynamic_precedence(existing_link->subtree) + ) { + ts_subtree_retain(link.subtree); + ts_subtree_release(subtree_pool, existing_link->subtree); + existing_link->subtree = link.subtree; + self->dynamic_precedence = + link.node->dynamic_precedence + ts_subtree_dynamic_precedence(link.subtree); + } + return; + } + + // If the previous nodes are mergeable, merge them recursively. + if ( + existing_link->node->state == link.node->state && + existing_link->node->position.bytes == link.node->position.bytes && + existing_link->node->error_cost == link.node->error_cost + ) { + for (int j = 0; j < link.node->link_count; j++) { + stack_node_add_link(existing_link->node, link.node->links[j], subtree_pool); + } + int32_t dynamic_precedence = link.node->dynamic_precedence; + if (link.subtree.ptr) { + dynamic_precedence += ts_subtree_dynamic_precedence(link.subtree); + } + if (dynamic_precedence > self->dynamic_precedence) { + self->dynamic_precedence = dynamic_precedence; + } + return; + } + } + } + + if (self->link_count == MAX_LINK_COUNT) return; + + stack_node_retain(link.node); + unsigned node_count = link.node->node_count; + int dynamic_precedence = link.node->dynamic_precedence; + self->links[self->link_count++] = link; + + if (link.subtree.ptr) { + ts_subtree_retain(link.subtree); + node_count += stack__subtree_node_count(link.subtree); + dynamic_precedence += ts_subtree_dynamic_precedence(link.subtree); + } + + if (node_count > self->node_count) self->node_count = node_count; + if (dynamic_precedence > self->dynamic_precedence) self->dynamic_precedence = dynamic_precedence; +} + +static void stack_head_delete( + StackHead *self, + StackNodeArray *pool, + SubtreePool *subtree_pool +) { + if (self->node) { + if (self->last_external_token.ptr) { + ts_subtree_release(subtree_pool, self->last_external_token); + } + if (self->lookahead_when_paused.ptr) { + ts_subtree_release(subtree_pool, self->lookahead_when_paused); + } + if (self->summary) { + array_delete(self->summary); + ts_free(self->summary); + } + stack_node_release(self->node, pool, subtree_pool); + } +} + +static StackVersion ts_stack__add_version( + Stack *self, + StackVersion original_version, + StackNode *node +) { + StackHead head = { + .node = node, + .node_count_at_last_error = self->heads.contents[original_version].node_count_at_last_error, + .last_external_token = self->heads.contents[original_version].last_external_token, + .status = StackStatusActive, + .lookahead_when_paused = NULL_SUBTREE, + }; + array_push(&self->heads, head); + stack_node_retain(node); + if (head.last_external_token.ptr) ts_subtree_retain(head.last_external_token); + return (StackVersion)(self->heads.size - 1); +} + +static void ts_stack__add_slice( + Stack *self, + StackVersion original_version, + StackNode *node, + SubtreeArray *subtrees +) { + for (uint32_t i = self->slices.size - 1; i + 1 > 0; i--) { + StackVersion version = self->slices.contents[i].version; + if (self->heads.contents[version].node == node) { + StackSlice slice = {*subtrees, version}; + array_insert(&self->slices, i + 1, slice); + return; + } + } + + StackVersion version = ts_stack__add_version(self, original_version, node); + StackSlice slice = { *subtrees, version }; + array_push(&self->slices, slice); +} + +static StackSliceArray stack__iter( + Stack *self, + StackVersion version, + StackCallback callback, + void *payload, + int goal_subtree_count +) { + array_clear(&self->slices); + array_clear(&self->iterators); + + StackHead *head = array_get(&self->heads, version); + StackIterator new_iterator = { + .node = head->node, + .subtrees = array_new(), + .subtree_count = 0, + .is_pending = true, + }; + + bool include_subtrees = false; + if (goal_subtree_count >= 0) { + include_subtrees = true; + array_reserve(&new_iterator.subtrees, (uint32_t)ts_subtree_alloc_size(goal_subtree_count) / sizeof(Subtree)); + } + + array_push(&self->iterators, new_iterator); + + while (self->iterators.size > 0) { + for (uint32_t i = 0, size = self->iterators.size; i < size; i++) { + StackIterator *iterator = &self->iterators.contents[i]; + StackNode *node = iterator->node; + + StackAction action = callback(payload, iterator); + bool should_pop = action & StackActionPop; + bool should_stop = action & StackActionStop || node->link_count == 0; + + if (should_pop) { + SubtreeArray subtrees = iterator->subtrees; + if (!should_stop) { + ts_subtree_array_copy(subtrees, &subtrees); + } + ts_subtree_array_reverse(&subtrees); + ts_stack__add_slice( + self, + version, + node, + &subtrees + ); + } + + if (should_stop) { + if (!should_pop) { + ts_subtree_array_delete(self->subtree_pool, &iterator->subtrees); + } + array_erase(&self->iterators, i); + i--, size--; + continue; + } + + for (uint32_t j = 1; j <= node->link_count; j++) { + StackIterator *next_iterator; + StackLink link; + if (j == node->link_count) { + link = node->links[0]; + next_iterator = &self->iterators.contents[i]; + } else { + if (self->iterators.size >= MAX_ITERATOR_COUNT) continue; + link = node->links[j]; + StackIterator current_iterator = self->iterators.contents[i]; + array_push(&self->iterators, current_iterator); + next_iterator = array_back(&self->iterators); + ts_subtree_array_copy(next_iterator->subtrees, &next_iterator->subtrees); + } + + next_iterator->node = link.node; + if (link.subtree.ptr) { + if (include_subtrees) { + array_push(&next_iterator->subtrees, link.subtree); + ts_subtree_retain(link.subtree); + } + + if (!ts_subtree_extra(link.subtree)) { + next_iterator->subtree_count++; + if (!link.is_pending) { + next_iterator->is_pending = false; + } + } + } else { + next_iterator->subtree_count++; + next_iterator->is_pending = false; + } + } + } + } + + return self->slices; +} + +Stack *ts_stack_new(SubtreePool *subtree_pool) { + Stack *self = ts_calloc(1, sizeof(Stack)); + + array_init(&self->heads); + array_init(&self->slices); + array_init(&self->iterators); + array_init(&self->node_pool); + array_reserve(&self->heads, 4); + array_reserve(&self->slices, 4); + array_reserve(&self->iterators, 4); + array_reserve(&self->node_pool, MAX_NODE_POOL_SIZE); + + self->subtree_pool = subtree_pool; + self->base_node = stack_node_new(NULL, NULL_SUBTREE, false, 1, &self->node_pool); + ts_stack_clear(self); + + return self; +} + +void ts_stack_delete(Stack *self) { + if (self->slices.contents) + array_delete(&self->slices); + if (self->iterators.contents) + array_delete(&self->iterators); + stack_node_release(self->base_node, &self->node_pool, self->subtree_pool); + for (uint32_t i = 0; i < self->heads.size; i++) { + stack_head_delete(&self->heads.contents[i], &self->node_pool, self->subtree_pool); + } + array_clear(&self->heads); + if (self->node_pool.contents) { + for (uint32_t i = 0; i < self->node_pool.size; i++) + ts_free(self->node_pool.contents[i]); + array_delete(&self->node_pool); + } + array_delete(&self->heads); + ts_free(self); +} + +uint32_t ts_stack_version_count(const Stack *self) { + return self->heads.size; +} + +TSStateId ts_stack_state(const Stack *self, StackVersion version) { + return array_get(&self->heads, version)->node->state; +} + +Length ts_stack_position(const Stack *self, StackVersion version) { + return array_get(&self->heads, version)->node->position; +} + +Subtree ts_stack_last_external_token(const Stack *self, StackVersion version) { + return array_get(&self->heads, version)->last_external_token; +} + +void ts_stack_set_last_external_token(Stack *self, StackVersion version, Subtree token) { + StackHead *head = array_get(&self->heads, version); + if (token.ptr) ts_subtree_retain(token); + if (head->last_external_token.ptr) ts_subtree_release(self->subtree_pool, head->last_external_token); + head->last_external_token = token; +} + +unsigned ts_stack_error_cost(const Stack *self, StackVersion version) { + StackHead *head = array_get(&self->heads, version); + unsigned result = head->node->error_cost; + if ( + head->status == StackStatusPaused || + (head->node->state == ERROR_STATE && !head->node->links[0].subtree.ptr)) { + result += ERROR_COST_PER_RECOVERY; + } + return result; +} + +unsigned ts_stack_node_count_since_error(const Stack *self, StackVersion version) { + StackHead *head = array_get(&self->heads, version); + if (head->node->node_count < head->node_count_at_last_error) { + head->node_count_at_last_error = head->node->node_count; + } + return head->node->node_count - head->node_count_at_last_error; +} + +void ts_stack_push( + Stack *self, + StackVersion version, + Subtree subtree, + bool pending, + TSStateId state +) { + StackHead *head = array_get(&self->heads, version); + StackNode *new_node = stack_node_new(head->node, subtree, pending, state, &self->node_pool); + if (!subtree.ptr) head->node_count_at_last_error = new_node->node_count; + head->node = new_node; +} + +forceinline StackAction pop_count_callback(void *payload, const StackIterator *iterator) { + unsigned *goal_subtree_count = payload; + if (iterator->subtree_count == *goal_subtree_count) { + return StackActionPop | StackActionStop; + } else { + return StackActionNone; + } +} + +StackSliceArray ts_stack_pop_count(Stack *self, StackVersion version, uint32_t count) { + return stack__iter(self, version, pop_count_callback, &count, (int)count); +} + +forceinline StackAction pop_pending_callback(void *payload, const StackIterator *iterator) { + (void)payload; + if (iterator->subtree_count >= 1) { + if (iterator->is_pending) { + return StackActionPop | StackActionStop; + } else { + return StackActionStop; + } + } else { + return StackActionNone; + } +} + +StackSliceArray ts_stack_pop_pending(Stack *self, StackVersion version) { + StackSliceArray pop = stack__iter(self, version, pop_pending_callback, NULL, 0); + if (pop.size > 0) { + ts_stack_renumber_version(self, pop.contents[0].version, version); + pop.contents[0].version = version; + } + return pop; +} + +forceinline StackAction pop_error_callback(void *payload, const StackIterator *iterator) { + if (iterator->subtrees.size > 0) { + bool *found_error = payload; + if (!*found_error && ts_subtree_is_error(iterator->subtrees.contents[0])) { + *found_error = true; + return StackActionPop | StackActionStop; + } else { + return StackActionStop; + } + } else { + return StackActionNone; + } +} + +SubtreeArray ts_stack_pop_error(Stack *self, StackVersion version) { + StackNode *node = array_get(&self->heads, version)->node; + for (unsigned i = 0; i < node->link_count; i++) { + if (node->links[i].subtree.ptr && ts_subtree_is_error(node->links[i].subtree)) { + bool found_error = false; + StackSliceArray pop = stack__iter(self, version, pop_error_callback, &found_error, 1); + if (pop.size > 0) { + assert(pop.size == 1); + ts_stack_renumber_version(self, pop.contents[0].version, version); + return pop.contents[0].subtrees; + } + break; + } + } + return (SubtreeArray) {.size = 0}; +} + +forceinline StackAction pop_all_callback(void *payload, const StackIterator *iterator) { + (void)payload; + return iterator->node->link_count == 0 ? StackActionPop : StackActionNone; +} + +StackSliceArray ts_stack_pop_all(Stack *self, StackVersion version) { + return stack__iter(self, version, pop_all_callback, NULL, 0); +} + +typedef struct { + StackSummary *summary; + unsigned max_depth; +} SummarizeStackSession; + +forceinline StackAction summarize_stack_callback(void *payload, const StackIterator *iterator) { + SummarizeStackSession *session = payload; + TSStateId state = iterator->node->state; + unsigned depth = iterator->subtree_count; + if (depth > session->max_depth) return StackActionStop; + for (unsigned i = session->summary->size - 1; i + 1 > 0; i--) { + StackSummaryEntry entry = session->summary->contents[i]; + if (entry.depth < depth) break; + if (entry.depth == depth && entry.state == state) return StackActionNone; + } + array_push(session->summary, ((StackSummaryEntry) { + .position = iterator->node->position, + .depth = depth, + .state = state, + })); + return StackActionNone; +} + +void ts_stack_record_summary(Stack *self, StackVersion version, unsigned max_depth) { + SummarizeStackSession session = { + .summary = ts_malloc(sizeof(StackSummary)), + .max_depth = max_depth + }; + array_init(session.summary); + stack__iter(self, version, summarize_stack_callback, &session, -1); + StackHead *head = &self->heads.contents[version]; + if (head->summary) { + array_delete(head->summary); + ts_free(head->summary); + } + head->summary = session.summary; +} + +StackSummary *ts_stack_get_summary(Stack *self, StackVersion version) { + return array_get(&self->heads, version)->summary; +} + +int ts_stack_dynamic_precedence(Stack *self, StackVersion version) { + return array_get(&self->heads, version)->node->dynamic_precedence; +} + +bool ts_stack_has_advanced_since_error(const Stack *self, StackVersion version) { + const StackHead *head = array_get(&self->heads, version); + const StackNode *node = head->node; + if (node->error_cost == 0) return true; + while (node) { + if (node->link_count > 0) { + Subtree subtree = node->links[0].subtree; + if (subtree.ptr) { + if (ts_subtree_total_bytes(subtree) > 0) { + return true; + } else if ( + node->node_count > head->node_count_at_last_error && + ts_subtree_error_cost(subtree) == 0 + ) { + node = node->links[0].node; + continue; + } + } + } + break; + } + return false; +} + +void ts_stack_remove_version(Stack *self, StackVersion version) { + stack_head_delete(array_get(&self->heads, version), &self->node_pool, self->subtree_pool); + array_erase(&self->heads, version); +} + +void ts_stack_renumber_version(Stack *self, StackVersion v1, StackVersion v2) { + if (v1 == v2) return; + assert(v2 < v1); + assert((uint32_t)v1 < self->heads.size); + StackHead *source_head = &self->heads.contents[v1]; + StackHead *target_head = &self->heads.contents[v2]; + if (target_head->summary && !source_head->summary) { + source_head->summary = target_head->summary; + target_head->summary = NULL; + } + stack_head_delete(target_head, &self->node_pool, self->subtree_pool); + *target_head = *source_head; + array_erase(&self->heads, v1); +} + +void ts_stack_swap_versions(Stack *self, StackVersion v1, StackVersion v2) { + StackHead temporary_head = self->heads.contents[v1]; + self->heads.contents[v1] = self->heads.contents[v2]; + self->heads.contents[v2] = temporary_head; +} + +StackVersion ts_stack_copy_version(Stack *self, StackVersion version) { + assert(version < self->heads.size); + array_push(&self->heads, self->heads.contents[version]); + StackHead *head = array_back(&self->heads); + stack_node_retain(head->node); + if (head->last_external_token.ptr) ts_subtree_retain(head->last_external_token); + head->summary = NULL; + return self->heads.size - 1; +} + +bool ts_stack_merge(Stack *self, StackVersion version1, StackVersion version2) { + if (!ts_stack_can_merge(self, version1, version2)) return false; + StackHead *head1 = &self->heads.contents[version1]; + StackHead *head2 = &self->heads.contents[version2]; + for (uint32_t i = 0; i < head2->node->link_count; i++) { + stack_node_add_link(head1->node, head2->node->links[i], self->subtree_pool); + } + if (head1->node->state == ERROR_STATE) { + head1->node_count_at_last_error = head1->node->node_count; + } + ts_stack_remove_version(self, version2); + return true; +} + +bool ts_stack_can_merge(Stack *self, StackVersion version1, StackVersion version2) { + StackHead *head1 = &self->heads.contents[version1]; + StackHead *head2 = &self->heads.contents[version2]; + return + head1->status == StackStatusActive && + head2->status == StackStatusActive && + head1->node->state == head2->node->state && + head1->node->position.bytes == head2->node->position.bytes && + head1->node->error_cost == head2->node->error_cost && + ts_subtree_external_scanner_state_eq(head1->last_external_token, head2->last_external_token); +} + +void ts_stack_halt(Stack *self, StackVersion version) { + array_get(&self->heads, version)->status = StackStatusHalted; +} + +void ts_stack_pause(Stack *self, StackVersion version, Subtree lookahead) { + StackHead *head = array_get(&self->heads, version); + head->status = StackStatusPaused; + head->lookahead_when_paused = lookahead; + head->node_count_at_last_error = head->node->node_count; +} + +bool ts_stack_is_active(const Stack *self, StackVersion version) { + return array_get(&self->heads, version)->status == StackStatusActive; +} + +bool ts_stack_is_halted(const Stack *self, StackVersion version) { + return array_get(&self->heads, version)->status == StackStatusHalted; +} + +bool ts_stack_is_paused(const Stack *self, StackVersion version) { + return array_get(&self->heads, version)->status == StackStatusPaused; +} + +Subtree ts_stack_resume(Stack *self, StackVersion version) { + StackHead *head = array_get(&self->heads, version); + assert(head->status == StackStatusPaused); + Subtree result = head->lookahead_when_paused; + head->status = StackStatusActive; + head->lookahead_when_paused = NULL_SUBTREE; + return result; +} + +void ts_stack_clear(Stack *self) { + stack_node_retain(self->base_node); + for (uint32_t i = 0; i < self->heads.size; i++) { + stack_head_delete(&self->heads.contents[i], &self->node_pool, self->subtree_pool); + } + array_clear(&self->heads); + array_push(&self->heads, ((StackHead) { + .node = self->base_node, + .status = StackStatusActive, + .last_external_token = NULL_SUBTREE, + .lookahead_when_paused = NULL_SUBTREE, + })); +} + +bool ts_stack_print_dot_graph(Stack *self, const TSLanguage *language, FILE *f) { + array_reserve(&self->iterators, 32); + if (!f) f = stderr; + + fprintf(f, "digraph stack {\n"); + fprintf(f, "rankdir=\"RL\";\n"); + fprintf(f, "edge [arrowhead=none]\n"); + + Array(StackNode *) visited_nodes = array_new(); + + array_clear(&self->iterators); + for (uint32_t i = 0; i < self->heads.size; i++) { + StackHead *head = &self->heads.contents[i]; + if (head->status == StackStatusHalted) continue; + + fprintf(f, "node_head_%u [shape=none, label=\"\"]\n", i); + fprintf(f, "node_head_%u -> node_%p [", i, (void *)head->node); + + if (head->status == StackStatusPaused) { + fprintf(f, "color=red "); + } + fprintf(f, + "label=%u, fontcolor=blue, weight=10000, labeltooltip=\"node_count: %u\nerror_cost: %u", + i, + ts_stack_node_count_since_error(self, i), + ts_stack_error_cost(self, i) + ); + + if (head->summary) { + fprintf(f, "\nsummary:"); + for (uint32_t j = 0; j < head->summary->size; j++) fprintf(f, " %u", head->summary->contents[j].state); + } + + if (head->last_external_token.ptr) { + const ExternalScannerState *state = &head->last_external_token.ptr->external_scanner_state; + const char *data = ts_external_scanner_state_data(state); + fprintf(f, "\nexternal_scanner_state:"); + for (uint32_t j = 0; j < state->length; j++) fprintf(f, " %2X", data[j]); + } + + fprintf(f, "\"]\n"); + array_push(&self->iterators, ((StackIterator) { + .node = head->node + })); + } + + bool all_iterators_done = false; + while (!all_iterators_done) { + all_iterators_done = true; + + for (uint32_t i = 0; i < self->iterators.size; i++) { + StackIterator iterator = self->iterators.contents[i]; + StackNode *node = iterator.node; + + for (uint32_t j = 0; j < visited_nodes.size; j++) { + if (visited_nodes.contents[j] == node) { + node = NULL; + break; + } + } + + if (!node) continue; + all_iterators_done = false; + + fprintf(f, "node_%p [", (void *)node); + if (node->state == ERROR_STATE) { + fprintf(f, "label=\"?\""); + } else if ( + node->link_count == 1 && + node->links[0].subtree.ptr && + ts_subtree_extra(node->links[0].subtree) + ) { + fprintf(f, "shape=point margin=0 label=\"\""); + } else { + fprintf(f, "label=\"%d\"", node->state); + } + + fprintf( + f, + " tooltip=\"position: %u,%u\nnode_count:%u\nerror_cost: %u\ndynamic_precedence: %d\"];\n", + node->position.extent.row + 1, + node->position.extent.column, + node->node_count, + node->error_cost, + node->dynamic_precedence + ); + + for (int j = 0; j < node->link_count; j++) { + StackLink link = node->links[j]; + fprintf(f, "node_%p -> node_%p [", (void *)node, (void *)link.node); + if (link.is_pending) fprintf(f, "style=dashed "); + if (link.subtree.ptr && ts_subtree_extra(link.subtree)) fprintf(f, "fontcolor=gray "); + + if (!link.subtree.ptr) { + fprintf(f, "color=red"); + } else { + fprintf(f, "label=\""); + bool quoted = ts_subtree_visible(link.subtree) && !ts_subtree_named(link.subtree); + if (quoted) fprintf(f, "'"); + ts_language_write_symbol_as_dot_string(language, f, ts_subtree_symbol(link.subtree)); + if (quoted) fprintf(f, "'"); + fprintf(f, "\""); + fprintf( + f, + "labeltooltip=\"error_cost: %u\ndynamic_precedence: %" PRId32 "\"", + ts_subtree_error_cost(link.subtree), + ts_subtree_dynamic_precedence(link.subtree) + ); + } + + fprintf(f, "];\n"); + + StackIterator *next_iterator; + if (j == 0) { + next_iterator = &self->iterators.contents[i]; + } else { + array_push(&self->iterators, iterator); + next_iterator = array_back(&self->iterators); + } + next_iterator->node = link.node; + } + + array_push(&visited_nodes, node); + } + } + + fprintf(f, "}\n"); + + array_delete(&visited_nodes); + return true; +} + +#undef forceinline diff --git a/parser/nnsrc/stack.h b/parser/nnsrc/stack.h new file mode 100644 index 00000000..86abbc9d --- /dev/null +++ b/parser/nnsrc/stack.h @@ -0,0 +1,133 @@ +#ifndef TREE_SITTER_PARSE_STACK_H_ +#define TREE_SITTER_PARSE_STACK_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "./array.h" +#include "./subtree.h" +#include "./error_costs.h" +#include + +typedef struct Stack Stack; + +typedef unsigned StackVersion; +#define STACK_VERSION_NONE ((StackVersion)-1) + +typedef struct { + SubtreeArray subtrees; + StackVersion version; +} StackSlice; +typedef Array(StackSlice) StackSliceArray; + +typedef struct { + Length position; + unsigned depth; + TSStateId state; +} StackSummaryEntry; +typedef Array(StackSummaryEntry) StackSummary; + +// Create a stack. +Stack *ts_stack_new(SubtreePool *); + +// Release the memory reserved for a given stack. +void ts_stack_delete(Stack *); + +// Get the stack's current number of versions. +uint32_t ts_stack_version_count(const Stack *); + +// Get the state at the top of the given version of the stack. If the stack is +// empty, this returns the initial state, 0. +TSStateId ts_stack_state(const Stack *, StackVersion); + +// Get the last external token associated with a given version of the stack. +Subtree ts_stack_last_external_token(const Stack *, StackVersion); + +// Set the last external token associated with a given version of the stack. +void ts_stack_set_last_external_token(Stack *, StackVersion, Subtree ); + +// Get the position of the given version of the stack within the document. +Length ts_stack_position(const Stack *, StackVersion); + +// Push a tree and state onto the given version of the stack. +// +// This transfers ownership of the tree to the Stack. Callers that +// need to retain ownership of the tree for their own purposes should +// first retain the tree. +void ts_stack_push(Stack *, StackVersion, Subtree , bool, TSStateId); + +// Pop the given number of entries from the given version of the stack. This +// operation can increase the number of stack versions by revealing multiple +// versions which had previously been merged. It returns an array that +// specifies the index of each revealed version and the trees that were +// removed from that version. +StackSliceArray ts_stack_pop_count(Stack *, StackVersion, uint32_t count); + +// Remove an error at the top of the given version of the stack. +SubtreeArray ts_stack_pop_error(Stack *, StackVersion); + +// Remove any pending trees from the top of the given version of the stack. +StackSliceArray ts_stack_pop_pending(Stack *, StackVersion); + +// Remove any all trees from the given version of the stack. +StackSliceArray ts_stack_pop_all(Stack *, StackVersion); + +// Get the maximum number of tree nodes reachable from this version of the stack +// since the last error was detected. +unsigned ts_stack_node_count_since_error(const Stack *, StackVersion); + +int ts_stack_dynamic_precedence(Stack *, StackVersion); + +bool ts_stack_has_advanced_since_error(const Stack *, StackVersion); + +// Compute a summary of all the parse states near the top of the given +// version of the stack and store the summary for later retrieval. +void ts_stack_record_summary(Stack *, StackVersion, unsigned max_depth); + +// Retrieve a summary of all the parse states near the top of the +// given version of the stack. +StackSummary *ts_stack_get_summary(Stack *, StackVersion); + +// Get the total cost of all errors on the given version of the stack. +unsigned ts_stack_error_cost(const Stack *, StackVersion version); + +// Merge the given two stack versions if possible, returning true +// if they were successfully merged and false otherwise. +bool ts_stack_merge(Stack *, StackVersion, StackVersion); + +// Determine whether the given two stack versions can be merged. +bool ts_stack_can_merge(Stack *, StackVersion, StackVersion); + +Subtree ts_stack_resume(Stack *, StackVersion); + +void ts_stack_pause(Stack *, StackVersion, Subtree); + +void ts_stack_halt(Stack *, StackVersion); + +bool ts_stack_is_active(const Stack *, StackVersion); + +bool ts_stack_is_paused(const Stack *, StackVersion); + +bool ts_stack_is_halted(const Stack *, StackVersion); + +void ts_stack_renumber_version(Stack *, StackVersion, StackVersion); + +void ts_stack_swap_versions(Stack *, StackVersion, StackVersion); + +StackVersion ts_stack_copy_version(Stack *, StackVersion); + +// Remove the given version from the stack. +void ts_stack_remove_version(Stack *, StackVersion); + +void ts_stack_clear(Stack *); + +bool ts_stack_print_dot_graph(Stack *, const TSLanguage *, FILE *); + +typedef void (*StackIterateCallback)(void *, TSStateId, uint32_t); + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_PARSE_STACK_H_ diff --git a/parser/nnsrc/subtree.c b/parser/nnsrc/subtree.c new file mode 100644 index 00000000..4524e182 --- /dev/null +++ b/parser/nnsrc/subtree.c @@ -0,0 +1,1060 @@ +#include +#include +#include +#include +#include +#include +#include "./alloc.h" +#include "./array.h" +#include "./atomic.h" +#include "./subtree.h" +#include "./length.h" +#include "./language.h" +#include "./error_costs.h" +#include + +typedef struct { + Length start; + Length old_end; + Length new_end; +} Edit; + +#define TS_MAX_INLINE_TREE_LENGTH UINT8_MAX +#define TS_MAX_TREE_POOL_SIZE 32 + +// ExternalScannerState + +void ts_external_scanner_state_init(ExternalScannerState *self, const char *data, unsigned length) { + self->length = length; + if (length > sizeof(self->short_data)) { + self->long_data = ts_malloc(length); + memcpy(self->long_data, data, length); + } else { + memcpy(self->short_data, data, length); + } +} + +ExternalScannerState ts_external_scanner_state_copy(const ExternalScannerState *self) { + ExternalScannerState result = *self; + if (self->length > sizeof(self->short_data)) { + result.long_data = ts_malloc(self->length); + memcpy(result.long_data, self->long_data, self->length); + } + return result; +} + +void ts_external_scanner_state_delete(ExternalScannerState *self) { + if (self->length > sizeof(self->short_data)) { + ts_free(self->long_data); + } +} + +const char *ts_external_scanner_state_data(const ExternalScannerState *self) { + if (self->length > sizeof(self->short_data)) { + return self->long_data; + } else { + return self->short_data; + } +} + +bool ts_external_scanner_state_eq(const ExternalScannerState *self, const char *buffer, unsigned length) { + return + self->length == length && + memcmp(ts_external_scanner_state_data(self), buffer, length) == 0; +} + +// SubtreeArray + +void ts_subtree_array_copy(SubtreeArray self, SubtreeArray *dest) { + dest->size = self.size; + dest->capacity = self.capacity; + dest->contents = self.contents; + if (self.capacity > 0) { + dest->contents = ts_calloc(self.capacity, sizeof(Subtree)); + memcpy(dest->contents, self.contents, self.size * sizeof(Subtree)); + for (uint32_t i = 0; i < self.size; i++) { + ts_subtree_retain(dest->contents[i]); + } + } +} + +void ts_subtree_array_clear(SubtreePool *pool, SubtreeArray *self) { + for (uint32_t i = 0; i < self->size; i++) { + ts_subtree_release(pool, self->contents[i]); + } + array_clear(self); +} + +void ts_subtree_array_delete(SubtreePool *pool, SubtreeArray *self) { + ts_subtree_array_clear(pool, self); + array_delete(self); +} + +void ts_subtree_array_remove_trailing_extras( + SubtreeArray *self, + SubtreeArray *destination +) { + array_clear(destination); + while (self->size > 0) { + Subtree last = self->contents[self->size - 1]; + if (ts_subtree_extra(last)) { + self->size--; + array_push(destination, last); + } else { + break; + } + } + ts_subtree_array_reverse(destination); +} + +void ts_subtree_array_reverse(SubtreeArray *self) { + for (uint32_t i = 0, limit = self->size / 2; i < limit; i++) { + size_t reverse_index = self->size - 1 - i; + Subtree swap = self->contents[i]; + self->contents[i] = self->contents[reverse_index]; + self->contents[reverse_index] = swap; + } +} + +// SubtreePool + +SubtreePool ts_subtree_pool_new(uint32_t capacity) { + SubtreePool self = {array_new(), array_new()}; + array_reserve(&self.free_trees, capacity); + return self; +} + +void ts_subtree_pool_delete(SubtreePool *self) { + if (self->free_trees.contents) { + for (unsigned i = 0; i < self->free_trees.size; i++) { + ts_free(self->free_trees.contents[i].ptr); + } + array_delete(&self->free_trees); + } + if (self->tree_stack.contents) array_delete(&self->tree_stack); +} + +static SubtreeHeapData *ts_subtree_pool_allocate(SubtreePool *self) { + if (self->free_trees.size > 0) { + return array_pop(&self->free_trees).ptr; + } else { + return ts_malloc(sizeof(SubtreeHeapData)); + } +} + +static void ts_subtree_pool_free(SubtreePool *self, SubtreeHeapData *tree) { + if (self->free_trees.capacity > 0 && self->free_trees.size + 1 <= TS_MAX_TREE_POOL_SIZE) { + array_push(&self->free_trees, (MutableSubtree) {.ptr = tree}); + } else { + ts_free(tree); + } +} + +// Subtree + +static inline bool ts_subtree_can_inline(Length padding, Length size, uint32_t lookahead_bytes) { + return + padding.bytes < TS_MAX_INLINE_TREE_LENGTH && + padding.extent.row < 16 && + padding.extent.column < TS_MAX_INLINE_TREE_LENGTH && + size.extent.row == 0 && + size.extent.column < TS_MAX_INLINE_TREE_LENGTH && + lookahead_bytes < 16; +} + +Subtree ts_subtree_new_leaf( + SubtreePool *pool, TSSymbol symbol, Length padding, Length size, + uint32_t lookahead_bytes, TSStateId parse_state, + bool has_external_tokens, bool depends_on_column, + bool is_keyword, const TSLanguage *language +) { + TSSymbolMetadata metadata = ts_language_symbol_metadata(language, symbol); + bool extra = symbol == ts_builtin_sym_end; + + bool is_inline = ( + symbol <= UINT8_MAX && + !has_external_tokens && + ts_subtree_can_inline(padding, size, lookahead_bytes) + ); + + if (is_inline) { + return (Subtree) {{ + .parse_state = parse_state, + .symbol = symbol, + .padding_bytes = padding.bytes, + .padding_rows = padding.extent.row, + .padding_columns = padding.extent.column, + .size_bytes = size.bytes, + .lookahead_bytes = lookahead_bytes, + .visible = metadata.visible, + .named = metadata.named, + .extra = extra, + .has_changes = false, + .is_missing = false, + .is_keyword = is_keyword, + .is_inline = true, + }}; + } else { + SubtreeHeapData *data = ts_subtree_pool_allocate(pool); + *data = (SubtreeHeapData) { + .ref_count = 1, + .padding = padding, + .size = size, + .lookahead_bytes = lookahead_bytes, + .error_cost = 0, + .child_count = 0, + .symbol = symbol, + .parse_state = parse_state, + .visible = metadata.visible, + .named = metadata.named, + .extra = extra, + .fragile_left = false, + .fragile_right = false, + .has_changes = false, + .has_external_tokens = has_external_tokens, + .has_external_scanner_state_change = false, + .depends_on_column = depends_on_column, + .is_missing = false, + .is_keyword = is_keyword, + {{.first_leaf = {.symbol = 0, .parse_state = 0}}} + }; + return (Subtree) {.ptr = data}; + } +} + +void ts_subtree_set_symbol( + MutableSubtree *self, + TSSymbol symbol, + const TSLanguage *language +) { + TSSymbolMetadata metadata = ts_language_symbol_metadata(language, symbol); + if (self->data.is_inline) { + assert(symbol < UINT8_MAX); + self->data.symbol = symbol; + self->data.named = metadata.named; + self->data.visible = metadata.visible; + } else { + self->ptr->symbol = symbol; + self->ptr->named = metadata.named; + self->ptr->visible = metadata.visible; + } +} + +Subtree ts_subtree_new_error( + SubtreePool *pool, int32_t lookahead_char, Length padding, Length size, + uint32_t bytes_scanned, TSStateId parse_state, const TSLanguage *language +) { + Subtree result = ts_subtree_new_leaf( + pool, ts_builtin_sym_error, padding, size, bytes_scanned, + parse_state, false, false, false, language + ); + SubtreeHeapData *data = (SubtreeHeapData *)result.ptr; + data->fragile_left = true; + data->fragile_right = true; + data->lookahead_char = lookahead_char; + return result; +} + +// Clone a subtree. +MutableSubtree ts_subtree_clone(Subtree self) { + size_t alloc_size = ts_subtree_alloc_size(self.ptr->child_count); + Subtree *new_children = ts_malloc(alloc_size); + Subtree *old_children = ts_subtree_children(self); + memcpy(new_children, old_children, alloc_size); + SubtreeHeapData *result = (SubtreeHeapData *)&new_children[self.ptr->child_count]; + if (self.ptr->child_count > 0) { + for (uint32_t i = 0; i < self.ptr->child_count; i++) { + ts_subtree_retain(new_children[i]); + } + } else if (self.ptr->has_external_tokens) { + result->external_scanner_state = ts_external_scanner_state_copy( + &self.ptr->external_scanner_state + ); + } + result->ref_count = 1; + return (MutableSubtree) {.ptr = result}; +} + +// Get mutable version of a subtree. +// +// This takes ownership of the subtree. If the subtree has only one owner, +// this will directly convert it into a mutable version. Otherwise, it will +// perform a copy. +MutableSubtree ts_subtree_make_mut(SubtreePool *pool, Subtree self) { + if (self.data.is_inline) return (MutableSubtree) {self.data}; + if (self.ptr->ref_count == 1) return ts_subtree_to_mut_unsafe(self); + MutableSubtree result = ts_subtree_clone(self); + ts_subtree_release(pool, self); + return result; +} + +static void ts_subtree__compress( + MutableSubtree self, + unsigned count, + const TSLanguage *language, + MutableSubtreeArray *stack +) { + unsigned initial_stack_size = stack->size; + + MutableSubtree tree = self; + TSSymbol symbol = tree.ptr->symbol; + for (unsigned i = 0; i < count; i++) { + if (tree.ptr->ref_count > 1 || tree.ptr->child_count < 2) break; + + MutableSubtree child = ts_subtree_to_mut_unsafe(ts_subtree_children(tree)[0]); + if ( + child.data.is_inline || + child.ptr->child_count < 2 || + child.ptr->ref_count > 1 || + child.ptr->symbol != symbol + ) break; + + MutableSubtree grandchild = ts_subtree_to_mut_unsafe(ts_subtree_children(child)[0]); + if ( + grandchild.data.is_inline || + grandchild.ptr->child_count < 2 || + grandchild.ptr->ref_count > 1 || + grandchild.ptr->symbol != symbol + ) break; + + ts_subtree_children(tree)[0] = ts_subtree_from_mut(grandchild); + ts_subtree_children(child)[0] = ts_subtree_children(grandchild)[grandchild.ptr->child_count - 1]; + ts_subtree_children(grandchild)[grandchild.ptr->child_count - 1] = ts_subtree_from_mut(child); + array_push(stack, tree); + tree = grandchild; + } + + while (stack->size > initial_stack_size) { + tree = array_pop(stack); + MutableSubtree child = ts_subtree_to_mut_unsafe(ts_subtree_children(tree)[0]); + MutableSubtree grandchild = ts_subtree_to_mut_unsafe(ts_subtree_children(child)[child.ptr->child_count - 1]); + ts_subtree_summarize_children(grandchild, language); + ts_subtree_summarize_children(child, language); + ts_subtree_summarize_children(tree, language); + } +} + +void ts_subtree_balance(Subtree self, SubtreePool *pool, const TSLanguage *language) { + array_clear(&pool->tree_stack); + + if (ts_subtree_child_count(self) > 0 && self.ptr->ref_count == 1) { + array_push(&pool->tree_stack, ts_subtree_to_mut_unsafe(self)); + } + + while (pool->tree_stack.size > 0) { + MutableSubtree tree = array_pop(&pool->tree_stack); + + if (tree.ptr->repeat_depth > 0) { + Subtree child1 = ts_subtree_children(tree)[0]; + Subtree child2 = ts_subtree_children(tree)[tree.ptr->child_count - 1]; + long repeat_delta = (long)ts_subtree_repeat_depth(child1) - (long)ts_subtree_repeat_depth(child2); + if (repeat_delta > 0) { + unsigned n = (unsigned)repeat_delta; + for (unsigned i = n / 2; i > 0; i /= 2) { + ts_subtree__compress(tree, i, language, &pool->tree_stack); + n -= i; + } + } + } + + for (uint32_t i = 0; i < tree.ptr->child_count; i++) { + Subtree child = ts_subtree_children(tree)[i]; + if (ts_subtree_child_count(child) > 0 && child.ptr->ref_count == 1) { + array_push(&pool->tree_stack, ts_subtree_to_mut_unsafe(child)); + } + } + } +} + +// Assign all of the node's properties that depend on its children. +void ts_subtree_summarize_children( + MutableSubtree self, + const TSLanguage *language +) { + assert(!self.data.is_inline); + + self.ptr->named_child_count = 0; + self.ptr->visible_child_count = 0; + self.ptr->error_cost = 0; + self.ptr->repeat_depth = 0; + self.ptr->visible_descendant_count = 0; + self.ptr->has_external_tokens = false; + self.ptr->depends_on_column = false; + self.ptr->has_external_scanner_state_change = false; + self.ptr->dynamic_precedence = 0; + + uint32_t structural_index = 0; + const TSSymbol *alias_sequence = ts_language_alias_sequence(language, self.ptr->production_id); + uint32_t lookahead_end_byte = 0; + + const Subtree *children = ts_subtree_children(self); + for (uint32_t i = 0; i < self.ptr->child_count; i++) { + Subtree child = children[i]; + + if ( + self.ptr->size.extent.row == 0 && + ts_subtree_depends_on_column(child) + ) { + self.ptr->depends_on_column = true; + } + + if (ts_subtree_has_external_scanner_state_change(child)) { + self.ptr->has_external_scanner_state_change = true; + } + + if (i == 0) { + self.ptr->padding = ts_subtree_padding(child); + self.ptr->size = ts_subtree_size(child); + } else { + self.ptr->size = length_add(self.ptr->size, ts_subtree_total_size(child)); + } + + uint32_t child_lookahead_end_byte = + self.ptr->padding.bytes + + self.ptr->size.bytes + + ts_subtree_lookahead_bytes(child); + if (child_lookahead_end_byte > lookahead_end_byte) { + lookahead_end_byte = child_lookahead_end_byte; + } + + if (ts_subtree_symbol(child) != ts_builtin_sym_error_repeat) { + self.ptr->error_cost += ts_subtree_error_cost(child); + } + + uint32_t grandchild_count = ts_subtree_child_count(child); + if ( + self.ptr->symbol == ts_builtin_sym_error || + self.ptr->symbol == ts_builtin_sym_error_repeat + ) { + if (!ts_subtree_extra(child) && !(ts_subtree_is_error(child) && grandchild_count == 0)) { + if (ts_subtree_visible(child)) { + self.ptr->error_cost += ERROR_COST_PER_SKIPPED_TREE; + } else if (grandchild_count > 0) { + self.ptr->error_cost += ERROR_COST_PER_SKIPPED_TREE * child.ptr->visible_child_count; + } + } + } + + self.ptr->dynamic_precedence += ts_subtree_dynamic_precedence(child); + self.ptr->visible_descendant_count += ts_subtree_visible_descendant_count(child); + + if (alias_sequence && alias_sequence[structural_index] != 0 && !ts_subtree_extra(child)) { + self.ptr->visible_descendant_count++; + self.ptr->visible_child_count++; + if (ts_language_symbol_metadata(language, alias_sequence[structural_index]).named) { + self.ptr->named_child_count++; + } + } else if (ts_subtree_visible(child)) { + self.ptr->visible_descendant_count++; + self.ptr->visible_child_count++; + if (ts_subtree_named(child)) self.ptr->named_child_count++; + } else if (grandchild_count > 0) { + self.ptr->visible_child_count += child.ptr->visible_child_count; + self.ptr->named_child_count += child.ptr->named_child_count; + } + + if (ts_subtree_has_external_tokens(child)) self.ptr->has_external_tokens = true; + + if (ts_subtree_is_error(child)) { + self.ptr->fragile_left = self.ptr->fragile_right = true; + self.ptr->parse_state = TS_TREE_STATE_NONE; + } + + if (!ts_subtree_extra(child)) structural_index++; + } + + self.ptr->lookahead_bytes = lookahead_end_byte - self.ptr->size.bytes - self.ptr->padding.bytes; + + if ( + self.ptr->symbol == ts_builtin_sym_error || + self.ptr->symbol == ts_builtin_sym_error_repeat + ) { + self.ptr->error_cost += + ERROR_COST_PER_RECOVERY + + ERROR_COST_PER_SKIPPED_CHAR * self.ptr->size.bytes + + ERROR_COST_PER_SKIPPED_LINE * self.ptr->size.extent.row; + } + + if (self.ptr->child_count > 0) { + Subtree first_child = children[0]; + Subtree last_child = children[self.ptr->child_count - 1]; + + self.ptr->first_leaf.symbol = ts_subtree_leaf_symbol(first_child); + self.ptr->first_leaf.parse_state = ts_subtree_leaf_parse_state(first_child); + + if (ts_subtree_fragile_left(first_child)) self.ptr->fragile_left = true; + if (ts_subtree_fragile_right(last_child)) self.ptr->fragile_right = true; + + if ( + self.ptr->child_count >= 2 && + !self.ptr->visible && + !self.ptr->named && + ts_subtree_symbol(first_child) == self.ptr->symbol + ) { + if (ts_subtree_repeat_depth(first_child) > ts_subtree_repeat_depth(last_child)) { + self.ptr->repeat_depth = ts_subtree_repeat_depth(first_child) + 1; + } else { + self.ptr->repeat_depth = ts_subtree_repeat_depth(last_child) + 1; + } + } + } +} + +// Create a new parent node with the given children. +// +// This takes ownership of the children array. +MutableSubtree ts_subtree_new_node( + TSSymbol symbol, + SubtreeArray *children, + unsigned production_id, + const TSLanguage *language +) { + TSSymbolMetadata metadata = ts_language_symbol_metadata(language, symbol); + bool fragile = symbol == ts_builtin_sym_error || symbol == ts_builtin_sym_error_repeat; + + // Allocate the node's data at the end of the array of children. + size_t new_byte_size = ts_subtree_alloc_size(children->size); + if (children->capacity * sizeof(Subtree) < new_byte_size) { + children->contents = ts_realloc(children->contents, new_byte_size); + children->capacity = (uint32_t)(new_byte_size / sizeof(Subtree)); + } + SubtreeHeapData *data = (SubtreeHeapData *)&children->contents[children->size]; + + *data = (SubtreeHeapData) { + .ref_count = 1, + .symbol = symbol, + .child_count = children->size, + .visible = metadata.visible, + .named = metadata.named, + .has_changes = false, + .has_external_scanner_state_change = false, + .fragile_left = fragile, + .fragile_right = fragile, + .is_keyword = false, + {{ + .visible_descendant_count = 0, + .production_id = production_id, + .first_leaf = {.symbol = 0, .parse_state = 0}, + }} + }; + MutableSubtree result = {.ptr = data}; + ts_subtree_summarize_children(result, language); + return result; +} + +// Create a new error node containing the given children. +// +// This node is treated as 'extra'. Its children are prevented from having +// having any effect on the parse state. +Subtree ts_subtree_new_error_node( + SubtreeArray *children, + bool extra, + const TSLanguage *language +) { + MutableSubtree result = ts_subtree_new_node( + ts_builtin_sym_error, children, 0, language + ); + result.ptr->extra = extra; + return ts_subtree_from_mut(result); +} + +// Create a new 'missing leaf' node. +// +// This node is treated as 'extra'. Its children are prevented from having +// having any effect on the parse state. +Subtree ts_subtree_new_missing_leaf( + SubtreePool *pool, + TSSymbol symbol, + Length padding, + uint32_t lookahead_bytes, + const TSLanguage *language +) { + Subtree result = ts_subtree_new_leaf( + pool, symbol, padding, length_zero(), lookahead_bytes, + 0, false, false, false, language + ); + if (result.data.is_inline) { + result.data.is_missing = true; + } else { + ((SubtreeHeapData *)result.ptr)->is_missing = true; + } + return result; +} + +void ts_subtree_retain(Subtree self) { + if (self.data.is_inline) return; + assert(self.ptr->ref_count > 0); + atomic_inc((volatile uint32_t *)&self.ptr->ref_count); + assert(self.ptr->ref_count != 0); +} + +void ts_subtree_release(SubtreePool *pool, Subtree self) { + if (self.data.is_inline) return; + array_clear(&pool->tree_stack); + + assert(self.ptr->ref_count > 0); + if (atomic_dec((volatile uint32_t *)&self.ptr->ref_count) == 0) { + array_push(&pool->tree_stack, ts_subtree_to_mut_unsafe(self)); + } + + while (pool->tree_stack.size > 0) { + MutableSubtree tree = array_pop(&pool->tree_stack); + if (tree.ptr->child_count > 0) { + Subtree *children = ts_subtree_children(tree); + for (uint32_t i = 0; i < tree.ptr->child_count; i++) { + Subtree child = children[i]; + if (child.data.is_inline) continue; + assert(child.ptr->ref_count > 0); + if (atomic_dec((volatile uint32_t *)&child.ptr->ref_count) == 0) { + array_push(&pool->tree_stack, ts_subtree_to_mut_unsafe(child)); + } + } + ts_free(children); + } else { + if (tree.ptr->has_external_tokens) { + ts_external_scanner_state_delete(&tree.ptr->external_scanner_state); + } + ts_subtree_pool_free(pool, tree.ptr); + } + } +} + +int ts_subtree_compare(Subtree left, Subtree right, SubtreePool *pool) { + array_push(&pool->tree_stack, ts_subtree_to_mut_unsafe(left)); + array_push(&pool->tree_stack, ts_subtree_to_mut_unsafe(right)); + + while (pool->tree_stack.size > 0) { + right = ts_subtree_from_mut(array_pop(&pool->tree_stack)); + left = ts_subtree_from_mut(array_pop(&pool->tree_stack)); + + int result = 0; + if (ts_subtree_symbol(left) < ts_subtree_symbol(right)) result = -1; + else if (ts_subtree_symbol(right) < ts_subtree_symbol(left)) result = 1; + else if (ts_subtree_child_count(left) < ts_subtree_child_count(right)) result = -1; + else if (ts_subtree_child_count(right) < ts_subtree_child_count(left)) result = 1; + if (result != 0) { + array_clear(&pool->tree_stack); + return result; + } + + for (uint32_t i = ts_subtree_child_count(left); i > 0; i--) { + Subtree left_child = ts_subtree_children(left)[i - 1]; + Subtree right_child = ts_subtree_children(right)[i - 1]; + array_push(&pool->tree_stack, ts_subtree_to_mut_unsafe(left_child)); + array_push(&pool->tree_stack, ts_subtree_to_mut_unsafe(right_child)); + } + } + + return 0; +} + +static inline void ts_subtree_set_has_changes(MutableSubtree *self) { + if (self->data.is_inline) { + self->data.has_changes = true; + } else { + self->ptr->has_changes = true; + } +} + +Subtree ts_subtree_edit(Subtree self, const TSInputEdit *input_edit, SubtreePool *pool) { + typedef struct { + Subtree *tree; + Edit edit; + } EditEntry; + + Array(EditEntry) stack = array_new(); + array_push(&stack, ((EditEntry) { + .tree = &self, + .edit = (Edit) { + .start = {input_edit->start_byte, input_edit->start_point}, + .old_end = {input_edit->old_end_byte, input_edit->old_end_point}, + .new_end = {input_edit->new_end_byte, input_edit->new_end_point}, + }, + })); + + while (stack.size) { + EditEntry entry = array_pop(&stack); + Edit edit = entry.edit; + bool is_noop = edit.old_end.bytes == edit.start.bytes && edit.new_end.bytes == edit.start.bytes; + bool is_pure_insertion = edit.old_end.bytes == edit.start.bytes; + bool invalidate_first_row = ts_subtree_depends_on_column(*entry.tree); + + Length size = ts_subtree_size(*entry.tree); + Length padding = ts_subtree_padding(*entry.tree); + Length total_size = length_add(padding, size); + uint32_t lookahead_bytes = ts_subtree_lookahead_bytes(*entry.tree); + uint32_t end_byte = total_size.bytes + lookahead_bytes; + if (edit.start.bytes > end_byte || (is_noop && edit.start.bytes == end_byte)) continue; + + // If the edit is entirely within the space before this subtree, then shift this + // subtree over according to the edit without changing its size. + if (edit.old_end.bytes <= padding.bytes) { + padding = length_add(edit.new_end, length_sub(padding, edit.old_end)); + } + + // If the edit starts in the space before this subtree and extends into this subtree, + // shrink the subtree's content to compensate for the change in the space before it. + else if (edit.start.bytes < padding.bytes) { + size = length_saturating_sub(size, length_sub(edit.old_end, padding)); + padding = edit.new_end; + } + + // If the edit is a pure insertion right at the start of the subtree, + // shift the subtree over according to the insertion. + else if (edit.start.bytes == padding.bytes && is_pure_insertion) { + padding = edit.new_end; + } + + // If the edit is within this subtree, resize the subtree to reflect the edit. + else if ( + edit.start.bytes < total_size.bytes || + (edit.start.bytes == total_size.bytes && is_pure_insertion) + ) { + size = length_add( + length_sub(edit.new_end, padding), + length_saturating_sub(total_size, edit.old_end) + ); + } + + MutableSubtree result = ts_subtree_make_mut(pool, *entry.tree); + + if (result.data.is_inline) { + if (ts_subtree_can_inline(padding, size, lookahead_bytes)) { + result.data.padding_bytes = padding.bytes; + result.data.padding_rows = padding.extent.row; + result.data.padding_columns = padding.extent.column; + result.data.size_bytes = size.bytes; + } else { + SubtreeHeapData *data = ts_subtree_pool_allocate(pool); + data->ref_count = 1; + data->padding = padding; + data->size = size; + data->lookahead_bytes = lookahead_bytes; + data->error_cost = 0; + data->child_count = 0; + data->symbol = result.data.symbol; + data->parse_state = result.data.parse_state; + data->visible = result.data.visible; + data->named = result.data.named; + data->extra = result.data.extra; + data->fragile_left = false; + data->fragile_right = false; + data->has_changes = false; + data->has_external_tokens = false; + data->depends_on_column = false; + data->is_missing = result.data.is_missing; + data->is_keyword = result.data.is_keyword; + result.ptr = data; + } + } else { + result.ptr->padding = padding; + result.ptr->size = size; + } + + ts_subtree_set_has_changes(&result); + *entry.tree = ts_subtree_from_mut(result); + + Length child_left, child_right = length_zero(); + for (uint32_t i = 0, n = ts_subtree_child_count(*entry.tree); i < n; i++) { + Subtree *child = &ts_subtree_children(*entry.tree)[i]; + Length child_size = ts_subtree_total_size(*child); + child_left = child_right; + child_right = length_add(child_left, child_size); + + // If this child ends before the edit, it is not affected. + if (child_right.bytes + ts_subtree_lookahead_bytes(*child) < edit.start.bytes) continue; + + // Keep editing child nodes until a node is reached that starts after the edit. + // Also, if this node's validity depends on its column position, then continue + // invaliditing child nodes until reaching a line break. + if (( + (child_left.bytes > edit.old_end.bytes) || + (child_left.bytes == edit.old_end.bytes && child_size.bytes > 0 && i > 0) + ) && ( + !invalidate_first_row || + child_left.extent.row > entry.tree->ptr->padding.extent.row + )) { + break; + } + + // Transform edit into the child's coordinate space. + Edit child_edit = { + .start = length_saturating_sub(edit.start, child_left), + .old_end = length_saturating_sub(edit.old_end, child_left), + .new_end = length_saturating_sub(edit.new_end, child_left), + }; + + // Interpret all inserted text as applying to the *first* child that touches the edit. + // Subsequent children are only never have any text inserted into them; they are only + // shrunk to compensate for the edit. + if ( + child_right.bytes > edit.start.bytes || + (child_right.bytes == edit.start.bytes && is_pure_insertion) + ) { + edit.new_end = edit.start; + } + + // Children that occur before the edit are not reshaped by the edit. + else { + child_edit.old_end = child_edit.start; + child_edit.new_end = child_edit.start; + } + + // Queue processing of this child's subtree. + array_push(&stack, ((EditEntry) { + .tree = child, + .edit = child_edit, + })); + } + } + + array_delete(&stack); + return self; +} + +Subtree ts_subtree_last_external_token(Subtree tree) { + if (!ts_subtree_has_external_tokens(tree)) return NULL_SUBTREE; + while (tree.ptr->child_count > 0) { + for (uint32_t i = tree.ptr->child_count - 1; i + 1 > 0; i--) { + Subtree child = ts_subtree_children(tree)[i]; + if (ts_subtree_has_external_tokens(child)) { + tree = child; + break; + } + } + } + return tree; +} + +static size_t ts_subtree__write_char_to_string(char *str, size_t n, int32_t chr) { + if (chr == -1) + return snprintf(str, n, "INVALID"); + else if (chr == '\0') + return snprintf(str, n, "'\\0'"); + else if (chr == '\n') + return snprintf(str, n, "'\\n'"); + else if (chr == '\t') + return snprintf(str, n, "'\\t'"); + else if (chr == '\r') + return snprintf(str, n, "'\\r'"); + else if (0 < chr && chr < 128 && isprint(chr)) + return snprintf(str, n, "'%c'", chr); + else + return snprintf(str, n, "%d", chr); +} + +static const char *const ROOT_FIELD = "__ROOT__"; + +static size_t ts_subtree__write_to_string( + Subtree self, char *string, size_t limit, + const TSLanguage *language, bool include_all, + TSSymbol alias_symbol, bool alias_is_named, const char *field_name +) { + if (!self.ptr) return snprintf(string, limit, "(NULL)"); + + char *cursor = string; + char **writer = (limit > 1) ? &cursor : &string; + bool is_root = field_name == ROOT_FIELD; + bool is_visible = + include_all || + ts_subtree_missing(self) || + ( + alias_symbol + ? alias_is_named + : ts_subtree_visible(self) && ts_subtree_named(self) + ); + + if (is_visible) { + if (!is_root) { + cursor += snprintf(*writer, limit, " "); + if (field_name) { + cursor += snprintf(*writer, limit, "%s: ", field_name); + } + } + + if (ts_subtree_is_error(self) && ts_subtree_child_count(self) == 0 && self.ptr->size.bytes > 0) { + cursor += snprintf(*writer, limit, "(UNEXPECTED "); + cursor += ts_subtree__write_char_to_string(*writer, limit, self.ptr->lookahead_char); + } else { + TSSymbol symbol = alias_symbol ? alias_symbol : ts_subtree_symbol(self); + const char *symbol_name = ts_language_symbol_name(language, symbol); + if (ts_subtree_missing(self)) { + cursor += snprintf(*writer, limit, "(MISSING "); + if (alias_is_named || ts_subtree_named(self)) { + cursor += snprintf(*writer, limit, "%s", symbol_name); + } else { + cursor += snprintf(*writer, limit, "\"%s\"", symbol_name); + } + } else { + cursor += snprintf(*writer, limit, "(%s", symbol_name); + } + } + } else if (is_root) { + TSSymbol symbol = alias_symbol ? alias_symbol : ts_subtree_symbol(self); + const char *symbol_name = ts_language_symbol_name(language, symbol); + if (ts_subtree_child_count(self) > 0) { + cursor += snprintf(*writer, limit, "(%s", symbol_name); + } else if (ts_subtree_named(self)) { + cursor += snprintf(*writer, limit, "(%s)", symbol_name); + } else { + cursor += snprintf(*writer, limit, "(\"%s\")", symbol_name); + } + } + + if (ts_subtree_child_count(self)) { + const TSSymbol *alias_sequence = ts_language_alias_sequence(language, self.ptr->production_id); + const TSFieldMapEntry *field_map, *field_map_end; + ts_language_field_map( + language, + self.ptr->production_id, + &field_map, + &field_map_end + ); + + uint32_t structural_child_index = 0; + for (uint32_t i = 0; i < self.ptr->child_count; i++) { + Subtree child = ts_subtree_children(self)[i]; + if (ts_subtree_extra(child)) { + cursor += ts_subtree__write_to_string( + child, *writer, limit, + language, include_all, + 0, false, NULL + ); + } else { + TSSymbol subtree_alias_symbol = alias_sequence + ? alias_sequence[structural_child_index] + : 0; + bool subtree_alias_is_named = subtree_alias_symbol + ? ts_language_symbol_metadata(language, subtree_alias_symbol).named + : false; + + const char *child_field_name = is_visible ? NULL : field_name; + for (const TSFieldMapEntry *map = field_map; map < field_map_end; map++) { + if (!map->inherited && map->child_index == structural_child_index) { + child_field_name = language->field_names[map->field_id]; + break; + } + } + + cursor += ts_subtree__write_to_string( + child, *writer, limit, + language, include_all, + subtree_alias_symbol, subtree_alias_is_named, child_field_name + ); + structural_child_index++; + } + } + } + + if (is_visible) cursor += snprintf(*writer, limit, ")"); + + return cursor - string; +} + +char *ts_subtree_string( + Subtree self, + TSSymbol alias_symbol, + bool alias_is_named, + const TSLanguage *language, + bool include_all +) { + char scratch_string[1]; + size_t size = ts_subtree__write_to_string( + self, scratch_string, 1, + language, include_all, + alias_symbol, alias_is_named, ROOT_FIELD + ) + 1; + char *result = ts_malloc(size * sizeof(char)); + ts_subtree__write_to_string( + self, result, size, + language, include_all, + alias_symbol, alias_is_named, ROOT_FIELD + ); + return result; +} + +void ts_subtree__print_dot_graph(const Subtree *self, uint32_t start_offset, + const TSLanguage *language, TSSymbol alias_symbol, + FILE *f) { + TSSymbol subtree_symbol = ts_subtree_symbol(*self); + TSSymbol symbol = alias_symbol ? alias_symbol : subtree_symbol; + uint32_t end_offset = start_offset + ts_subtree_total_bytes(*self); + fprintf(f, "tree_%p [label=\"", (void *)self); + ts_language_write_symbol_as_dot_string(language, f, symbol); + fprintf(f, "\""); + + if (ts_subtree_child_count(*self) == 0) fprintf(f, ", shape=plaintext"); + if (ts_subtree_extra(*self)) fprintf(f, ", fontcolor=gray"); + + fprintf(f, ", tooltip=\"" + "range: %u - %u\n" + "state: %d\n" + "error-cost: %u\n" + "has-changes: %u\n" + "depends-on-column: %u\n" + "descendant-count: %u\n" + "repeat-depth: %u\n" + "lookahead-bytes: %u", + start_offset, end_offset, + ts_subtree_parse_state(*self), + ts_subtree_error_cost(*self), + ts_subtree_has_changes(*self), + ts_subtree_depends_on_column(*self), + ts_subtree_visible_descendant_count(*self), + ts_subtree_repeat_depth(*self), + ts_subtree_lookahead_bytes(*self) + ); + + if (ts_subtree_is_error(*self) && ts_subtree_child_count(*self) == 0 && self->ptr->lookahead_char != 0) { + fprintf(f, "\ncharacter: '%c'", self->ptr->lookahead_char); + } + + fprintf(f, "\"]\n"); + + uint32_t child_start_offset = start_offset; + uint32_t child_info_offset = + language->max_alias_sequence_length * + ts_subtree_production_id(*self); + for (uint32_t i = 0, n = ts_subtree_child_count(*self); i < n; i++) { + const Subtree *child = &ts_subtree_children(*self)[i]; + TSSymbol subtree_alias_symbol = 0; + if (!ts_subtree_extra(*child) && child_info_offset) { + subtree_alias_symbol = language->alias_sequences[child_info_offset]; + child_info_offset++; + } + ts_subtree__print_dot_graph(child, child_start_offset, language, subtree_alias_symbol, f); + fprintf(f, "tree_%p -> tree_%p [tooltip=%u]\n", (void *)self, (void *)child, i); + child_start_offset += ts_subtree_total_bytes(*child); + } +} + +void ts_subtree_print_dot_graph(Subtree self, const TSLanguage *language, FILE *f) { + fprintf(f, "digraph tree {\n"); + fprintf(f, "edge [arrowhead=none]\n"); + ts_subtree__print_dot_graph(&self, 0, language, 0, f); + fprintf(f, "}\n"); +} + +const ExternalScannerState *ts_subtree_external_scanner_state(Subtree self) { + static const ExternalScannerState empty_state = {{.short_data = {0}}, .length = 0}; + if ( + self.ptr && + !self.data.is_inline && + self.ptr->has_external_tokens && + self.ptr->child_count == 0 + ) { + return &self.ptr->external_scanner_state; + } else { + return &empty_state; + } +} + +bool ts_subtree_external_scanner_state_eq(Subtree self, Subtree other) { + const ExternalScannerState *state_self = ts_subtree_external_scanner_state(self); + const ExternalScannerState *state_other = ts_subtree_external_scanner_state(other); + return ts_external_scanner_state_eq( + state_self, + ts_external_scanner_state_data(state_other), + state_other->length + ); +} diff --git a/parser/nnsrc/subtree.h b/parser/nnsrc/subtree.h new file mode 100644 index 00000000..0b3062e9 --- /dev/null +++ b/parser/nnsrc/subtree.h @@ -0,0 +1,382 @@ +#ifndef TREE_SITTER_SUBTREE_H_ +#define TREE_SITTER_SUBTREE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include "./length.h" +#include "./array.h" +#include "./error_costs.h" +#include "./host.h" +#include "api.h" +#include "./parser.h" + +#define TS_TREE_STATE_NONE USHRT_MAX +#define NULL_SUBTREE ((Subtree) {.ptr = NULL}) + +// The serialized state of an external scanner. +// +// Every time an external token subtree is created after a call to an +// external scanner, the scanner's `serialize` function is called to +// retrieve a serialized copy of its state. The bytes are then copied +// onto the subtree itself so that the scanner's state can later be +// restored using its `deserialize` function. +// +// Small byte arrays are stored inline, and long ones are allocated +// separately on the heap. +typedef struct { + union { + char *long_data; + char short_data[24]; + }; + uint32_t length; +} ExternalScannerState; + +// A compact representation of a subtree. +// +// This representation is used for small leaf nodes that are not +// errors, and were not created by an external scanner. +// +// The idea behind the layout of this struct is that the `is_inline` +// bit will fall exactly into the same location as the least significant +// bit of the pointer in `Subtree` or `MutableSubtree`, respectively. +// Because of alignment, for any valid pointer this will be 0, giving +// us the opportunity to make use of this bit to signify whether to use +// the pointer or the inline struct. +typedef struct SubtreeInlineData SubtreeInlineData; + +#define SUBTREE_BITS \ + bool visible : 1; \ + bool named : 1; \ + bool extra : 1; \ + bool has_changes : 1; \ + bool is_missing : 1; \ + bool is_keyword : 1; + +#define SUBTREE_SIZE \ + uint8_t padding_columns; \ + uint8_t padding_rows : 4; \ + uint8_t lookahead_bytes : 4; \ + uint8_t padding_bytes; \ + uint8_t size_bytes; + +#if TS_BIG_ENDIAN +#if TS_PTR_SIZE == 32 + +struct SubtreeInlineData { + uint16_t parse_state; + uint8_t symbol; + SUBTREE_BITS + bool unused : 1; + bool is_inline : 1; + SUBTREE_SIZE +}; + +#else + +struct SubtreeInlineData { + SUBTREE_SIZE + uint16_t parse_state; + uint8_t symbol; + SUBTREE_BITS + bool unused : 1; + bool is_inline : 1; +}; + +#endif +#else + +struct SubtreeInlineData { + bool is_inline : 1; + SUBTREE_BITS + uint8_t symbol; + uint16_t parse_state; + SUBTREE_SIZE +}; + +#endif + +#undef SUBTREE_BITS +#undef SUBTREE_SIZE + +// A heap-allocated representation of a subtree. +// +// This representation is used for parent nodes, external tokens, +// errors, and other leaf nodes whose data is too large to fit into +// the inline representation. +typedef struct { + volatile uint32_t ref_count; + Length padding; + Length size; + uint32_t lookahead_bytes; + uint32_t error_cost; + uint32_t child_count; + TSSymbol symbol; + TSStateId parse_state; + + bool visible : 1; + bool named : 1; + bool extra : 1; + bool fragile_left : 1; + bool fragile_right : 1; + bool has_changes : 1; + bool has_external_tokens : 1; + bool has_external_scanner_state_change : 1; + bool depends_on_column: 1; + bool is_missing : 1; + bool is_keyword : 1; + + union { + // Non-terminal subtrees (`child_count > 0`) + struct { + uint32_t visible_child_count; + uint32_t named_child_count; + uint32_t visible_descendant_count; + int32_t dynamic_precedence; + uint16_t repeat_depth; + uint16_t production_id; + struct { + TSSymbol symbol; + TSStateId parse_state; + } first_leaf; + }; + + // External terminal subtrees (`child_count == 0 && has_external_tokens`) + ExternalScannerState external_scanner_state; + + // Error terminal subtrees (`child_count == 0 && symbol == ts_builtin_sym_error`) + int32_t lookahead_char; + }; +} SubtreeHeapData; + +// The fundamental building block of a syntax tree. +typedef union { + SubtreeInlineData data; + const SubtreeHeapData *ptr; +} Subtree; + +// Like Subtree, but mutable. +typedef union { + SubtreeInlineData data; + SubtreeHeapData *ptr; +} MutableSubtree; + +typedef Array(Subtree) SubtreeArray; +typedef Array(MutableSubtree) MutableSubtreeArray; + +typedef struct { + MutableSubtreeArray free_trees; + MutableSubtreeArray tree_stack; +} SubtreePool; + +void ts_external_scanner_state_init(ExternalScannerState *, const char *, unsigned); +const char *ts_external_scanner_state_data(const ExternalScannerState *); +bool ts_external_scanner_state_eq(const ExternalScannerState *self, const char *, unsigned); +void ts_external_scanner_state_delete(ExternalScannerState *self); + +void ts_subtree_array_copy(SubtreeArray, SubtreeArray *); +void ts_subtree_array_clear(SubtreePool *, SubtreeArray *); +void ts_subtree_array_delete(SubtreePool *, SubtreeArray *); +void ts_subtree_array_remove_trailing_extras(SubtreeArray *, SubtreeArray *); +void ts_subtree_array_reverse(SubtreeArray *); + +SubtreePool ts_subtree_pool_new(uint32_t capacity); +void ts_subtree_pool_delete(SubtreePool *); + +Subtree ts_subtree_new_leaf( + SubtreePool *, TSSymbol, Length, Length, uint32_t, + TSStateId, bool, bool, bool, const TSLanguage * +); +Subtree ts_subtree_new_error( + SubtreePool *, int32_t, Length, Length, uint32_t, TSStateId, const TSLanguage * +); +MutableSubtree ts_subtree_new_node(TSSymbol, SubtreeArray *, unsigned, const TSLanguage *); +Subtree ts_subtree_new_error_node(SubtreeArray *, bool, const TSLanguage *); +Subtree ts_subtree_new_missing_leaf(SubtreePool *, TSSymbol, Length, uint32_t, const TSLanguage *); +MutableSubtree ts_subtree_make_mut(SubtreePool *, Subtree); +void ts_subtree_retain(Subtree); +void ts_subtree_release(SubtreePool *, Subtree); +int ts_subtree_compare(Subtree, Subtree, SubtreePool *); +void ts_subtree_set_symbol(MutableSubtree *, TSSymbol, const TSLanguage *); +void ts_subtree_summarize(MutableSubtree, const Subtree *, uint32_t, const TSLanguage *); +void ts_subtree_summarize_children(MutableSubtree, const TSLanguage *); +void ts_subtree_balance(Subtree, SubtreePool *, const TSLanguage *); +Subtree ts_subtree_edit(Subtree, const TSInputEdit *edit, SubtreePool *); +char *ts_subtree_string(Subtree, TSSymbol, bool, const TSLanguage *, bool include_all); +void ts_subtree_print_dot_graph(Subtree, const TSLanguage *, FILE *); +Subtree ts_subtree_last_external_token(Subtree); +const ExternalScannerState *ts_subtree_external_scanner_state(Subtree self); +bool ts_subtree_external_scanner_state_eq(Subtree, Subtree); + +#define SUBTREE_GET(self, name) ((self).data.is_inline ? (self).data.name : (self).ptr->name) + +static inline TSSymbol ts_subtree_symbol(Subtree self) { return SUBTREE_GET(self, symbol); } +static inline bool ts_subtree_visible(Subtree self) { return SUBTREE_GET(self, visible); } +static inline bool ts_subtree_named(Subtree self) { return SUBTREE_GET(self, named); } +static inline bool ts_subtree_extra(Subtree self) { return SUBTREE_GET(self, extra); } +static inline bool ts_subtree_has_changes(Subtree self) { return SUBTREE_GET(self, has_changes); } +static inline bool ts_subtree_missing(Subtree self) { return SUBTREE_GET(self, is_missing); } +static inline bool ts_subtree_is_keyword(Subtree self) { return SUBTREE_GET(self, is_keyword); } +static inline TSStateId ts_subtree_parse_state(Subtree self) { return SUBTREE_GET(self, parse_state); } +static inline uint32_t ts_subtree_lookahead_bytes(Subtree self) { return SUBTREE_GET(self, lookahead_bytes); } + +#undef SUBTREE_GET + +// Get the size needed to store a heap-allocated subtree with the given +// number of children. +static inline size_t ts_subtree_alloc_size(uint32_t child_count) { + return child_count * sizeof(Subtree) + sizeof(SubtreeHeapData); +} + +// Get a subtree's children, which are allocated immediately before the +// tree's own heap data. +#define ts_subtree_children(self) \ + ((self).data.is_inline ? NULL : (Subtree *)((self).ptr) - (self).ptr->child_count) + +static inline void ts_subtree_set_extra(MutableSubtree *self, bool is_extra) { + if (self->data.is_inline) { + self->data.extra = is_extra; + } else { + self->ptr->extra = is_extra; + } +} + +static inline TSSymbol ts_subtree_leaf_symbol(Subtree self) { + if (self.data.is_inline) return self.data.symbol; + if (self.ptr->child_count == 0) return self.ptr->symbol; + return self.ptr->first_leaf.symbol; +} + +static inline TSStateId ts_subtree_leaf_parse_state(Subtree self) { + if (self.data.is_inline) return self.data.parse_state; + if (self.ptr->child_count == 0) return self.ptr->parse_state; + return self.ptr->first_leaf.parse_state; +} + +static inline Length ts_subtree_padding(Subtree self) { + if (self.data.is_inline) { + Length result = {self.data.padding_bytes, {self.data.padding_rows, self.data.padding_columns}}; + return result; + } else { + return self.ptr->padding; + } +} + +static inline Length ts_subtree_size(Subtree self) { + if (self.data.is_inline) { + Length result = {self.data.size_bytes, {0, self.data.size_bytes}}; + return result; + } else { + return self.ptr->size; + } +} + +static inline Length ts_subtree_total_size(Subtree self) { + return length_add(ts_subtree_padding(self), ts_subtree_size(self)); +} + +static inline uint32_t ts_subtree_total_bytes(Subtree self) { + return ts_subtree_total_size(self).bytes; +} + +static inline uint32_t ts_subtree_child_count(Subtree self) { + return self.data.is_inline ? 0 : self.ptr->child_count; +} + +static inline uint32_t ts_subtree_repeat_depth(Subtree self) { + return self.data.is_inline ? 0 : self.ptr->repeat_depth; +} + +static inline uint32_t ts_subtree_is_repetition(Subtree self) { + return self.data.is_inline + ? 0 + : !self.ptr->named && !self.ptr->visible && self.ptr->child_count != 0; +} + +static inline uint32_t ts_subtree_visible_descendant_count(Subtree self) { + return (self.data.is_inline || self.ptr->child_count == 0) + ? 0 + : self.ptr->visible_descendant_count; +} + +static inline uint32_t ts_subtree_visible_child_count(Subtree self) { + if (ts_subtree_child_count(self) > 0) { + return self.ptr->visible_child_count; + } else { + return 0; + } +} + +static inline uint32_t ts_subtree_error_cost(Subtree self) { + if (ts_subtree_missing(self)) { + return ERROR_COST_PER_MISSING_TREE + ERROR_COST_PER_RECOVERY; + } else { + return self.data.is_inline ? 0 : self.ptr->error_cost; + } +} + +static inline int32_t ts_subtree_dynamic_precedence(Subtree self) { + return (self.data.is_inline || self.ptr->child_count == 0) ? 0 : self.ptr->dynamic_precedence; +} + +static inline uint16_t ts_subtree_production_id(Subtree self) { + if (ts_subtree_child_count(self) > 0) { + return self.ptr->production_id; + } else { + return 0; + } +} + +static inline bool ts_subtree_fragile_left(Subtree self) { + return self.data.is_inline ? false : self.ptr->fragile_left; +} + +static inline bool ts_subtree_fragile_right(Subtree self) { + return self.data.is_inline ? false : self.ptr->fragile_right; +} + +static inline bool ts_subtree_has_external_tokens(Subtree self) { + return self.data.is_inline ? false : self.ptr->has_external_tokens; +} + +static inline bool ts_subtree_has_external_scanner_state_change(Subtree self) { + return self.data.is_inline ? false : self.ptr->has_external_scanner_state_change; +} + +static inline bool ts_subtree_depends_on_column(Subtree self) { + return self.data.is_inline ? false : self.ptr->depends_on_column; +} + +static inline bool ts_subtree_is_fragile(Subtree self) { + return self.data.is_inline ? false : (self.ptr->fragile_left || self.ptr->fragile_right); +} + +static inline bool ts_subtree_is_error(Subtree self) { + return ts_subtree_symbol(self) == ts_builtin_sym_error; +} + +static inline bool ts_subtree_is_eof(Subtree self) { + return ts_subtree_symbol(self) == ts_builtin_sym_end; +} + +static inline Subtree ts_subtree_from_mut(MutableSubtree self) { + Subtree result; + result.data = self.data; + return result; +} + +static inline MutableSubtree ts_subtree_to_mut_unsafe(Subtree self) { + MutableSubtree result; + result.data = self.data; + return result; +} + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_SUBTREE_H_ diff --git a/parser/nnsrc/tree.c b/parser/nnsrc/tree.c new file mode 100644 index 00000000..1cea1794 --- /dev/null +++ b/parser/nnsrc/tree.c @@ -0,0 +1,165 @@ +#define _POSIX_C_SOURCE 200112L + +#include "api.h" +#include "./array.h" +#include "./get_changed_ranges.h" +#include "./length.h" +#include "./subtree.h" +#include "./tree_cursor.h" +#include "./tree.h" + +TSTree *ts_tree_new( + Subtree root, const TSLanguage *language, + const TSRange *included_ranges, unsigned included_range_count +) { + TSTree *result = ts_malloc(sizeof(TSTree)); + result->root = root; + result->language = ts_language_copy(language); + result->included_ranges = ts_calloc(included_range_count, sizeof(TSRange)); + memcpy(result->included_ranges, included_ranges, included_range_count * sizeof(TSRange)); + result->included_range_count = included_range_count; + return result; +} + +TSTree *ts_tree_copy(const TSTree *self) { + ts_subtree_retain(self->root); + return ts_tree_new(self->root, self->language, self->included_ranges, self->included_range_count); +} + +void ts_tree_delete(TSTree *self) { + if (!self) return; + + SubtreePool pool = ts_subtree_pool_new(0); + ts_subtree_release(&pool, self->root); + ts_subtree_pool_delete(&pool); + ts_language_delete(self->language); + ts_free(self->included_ranges); + ts_free(self); +} + +TSNode ts_tree_root_node(const TSTree *self) { + return ts_node_new(self, &self->root, ts_subtree_padding(self->root), 0); +} + +TSNode ts_tree_root_node_with_offset( + const TSTree *self, + uint32_t offset_bytes, + TSPoint offset_extent +) { + Length offset = {offset_bytes, offset_extent}; + return ts_node_new(self, &self->root, length_add(offset, ts_subtree_padding(self->root)), 0); +} + +const TSLanguage *ts_tree_language(const TSTree *self) { + return self->language; +} + +void ts_tree_edit(TSTree *self, const TSInputEdit *edit) { + for (unsigned i = 0; i < self->included_range_count; i++) { + TSRange *range = &self->included_ranges[i]; + if (range->end_byte >= edit->old_end_byte) { + if (range->end_byte != UINT32_MAX) { + range->end_byte = edit->new_end_byte + (range->end_byte - edit->old_end_byte); + range->end_point = point_add( + edit->new_end_point, + point_sub(range->end_point, edit->old_end_point) + ); + if (range->end_byte < edit->new_end_byte) { + range->end_byte = UINT32_MAX; + range->end_point = POINT_MAX; + } + } + } else if (range->end_byte > edit->start_byte) { + range->end_byte = edit->start_byte; + range->end_point = edit->start_point; + } + if (range->start_byte >= edit->old_end_byte) { + range->start_byte = edit->new_end_byte + (range->start_byte - edit->old_end_byte); + range->start_point = point_add( + edit->new_end_point, + point_sub(range->start_point, edit->old_end_point) + ); + if (range->start_byte < edit->new_end_byte) { + range->start_byte = UINT32_MAX; + range->start_point = POINT_MAX; + } + } else if (range->start_byte > edit->start_byte) { + range->start_byte = edit->start_byte; + range->start_point = edit->start_point; + } + } + + SubtreePool pool = ts_subtree_pool_new(0); + self->root = ts_subtree_edit(self->root, edit, &pool); + ts_subtree_pool_delete(&pool); +} + +TSRange *ts_tree_included_ranges(const TSTree *self, uint32_t *length) { + *length = self->included_range_count; + TSRange *ranges = ts_calloc(self->included_range_count, sizeof(TSRange)); + memcpy(ranges, self->included_ranges, self->included_range_count * sizeof(TSRange)); + return ranges; +} + +TSRange *ts_tree_get_changed_ranges(const TSTree *old_tree, const TSTree *new_tree, uint32_t *length) { + TreeCursor cursor1 = {NULL, array_new(), 0}; + TreeCursor cursor2 = {NULL, array_new(), 0}; + ts_tree_cursor_init(&cursor1, ts_tree_root_node(old_tree)); + ts_tree_cursor_init(&cursor2, ts_tree_root_node(new_tree)); + + TSRangeArray included_range_differences = array_new(); + ts_range_array_get_changed_ranges( + old_tree->included_ranges, old_tree->included_range_count, + new_tree->included_ranges, new_tree->included_range_count, + &included_range_differences + ); + + TSRange *result; + *length = ts_subtree_get_changed_ranges( + &old_tree->root, &new_tree->root, &cursor1, &cursor2, + old_tree->language, &included_range_differences, &result + ); + + array_delete(&included_range_differences); + array_delete(&cursor1.stack); + array_delete(&cursor2.stack); + return result; +} + +#ifdef _WIN32 + +#include +#include + +int _ts_dup(HANDLE handle) { + HANDLE dup_handle; + if (!DuplicateHandle( + GetCurrentProcess(), handle, + GetCurrentProcess(), &dup_handle, + 0, FALSE, DUPLICATE_SAME_ACCESS + )) return -1; + + return _open_osfhandle((intptr_t)dup_handle, 0); +} + +void ts_tree_print_dot_graph(const TSTree *self, int fd) { + FILE *file = _fdopen(_ts_dup((HANDLE)_get_osfhandle(fd)), "a"); + ts_subtree_print_dot_graph(self->root, self->language, file); + fclose(file); +} + +#else + +#include + +int _ts_dup(int file_descriptor) { + return dup(file_descriptor); +} + +void ts_tree_print_dot_graph(const TSTree *self, int file_descriptor) { + FILE *file = fdopen(_ts_dup(file_descriptor), "a"); + ts_subtree_print_dot_graph(self->root, self->language, file); + fclose(file); +} + +#endif diff --git a/parser/nnsrc/tree.h b/parser/nnsrc/tree.h new file mode 100644 index 00000000..f012f888 --- /dev/null +++ b/parser/nnsrc/tree.h @@ -0,0 +1,31 @@ +#ifndef TREE_SITTER_TREE_H_ +#define TREE_SITTER_TREE_H_ + +#include "./subtree.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + const Subtree *child; + const Subtree *parent; + Length position; + TSSymbol alias_symbol; +} ParentCacheEntry; + +struct TSTree { + Subtree root; + const TSLanguage *language; + TSRange *included_ranges; + unsigned included_range_count; +}; + +TSTree *ts_tree_new(Subtree root, const TSLanguage *language, const TSRange *, unsigned); +TSNode ts_node_new(const TSTree *, const Subtree *, Length, TSSymbol); + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_TREE_H_ diff --git a/parser/nnsrc/tree_cursor.c b/parser/nnsrc/tree_cursor.c new file mode 100644 index 00000000..c1a3d8a4 --- /dev/null +++ b/parser/nnsrc/tree_cursor.c @@ -0,0 +1,714 @@ +#include "api.h" +#include "./alloc.h" +#include "./tree_cursor.h" +#include "./language.h" +#include "./tree.h" + +typedef struct { + Subtree parent; + const TSTree *tree; + Length position; + uint32_t child_index; + uint32_t structural_child_index; + uint32_t descendant_index; + const TSSymbol *alias_sequence; +} CursorChildIterator; + +// CursorChildIterator + +static inline bool ts_tree_cursor_is_entry_visible(const TreeCursor *self, uint32_t index) { + TreeCursorEntry *entry = &self->stack.contents[index]; + if (index == 0 || ts_subtree_visible(*entry->subtree)) { + return true; + } else if (!ts_subtree_extra(*entry->subtree)) { + TreeCursorEntry *parent_entry = &self->stack.contents[index - 1]; + return ts_language_alias_at( + self->tree->language, + parent_entry->subtree->ptr->production_id, + entry->structural_child_index + ); + } else { + return false; + } +} + +static inline CursorChildIterator ts_tree_cursor_iterate_children(const TreeCursor *self) { + TreeCursorEntry *last_entry = array_back(&self->stack); + if (ts_subtree_child_count(*last_entry->subtree) == 0) { + return (CursorChildIterator) {NULL_SUBTREE, self->tree, length_zero(), 0, 0, 0, NULL}; + } + const TSSymbol *alias_sequence = ts_language_alias_sequence( + self->tree->language, + last_entry->subtree->ptr->production_id + ); + + uint32_t descendant_index = last_entry->descendant_index; + if (ts_tree_cursor_is_entry_visible(self, self->stack.size - 1)) { + descendant_index += 1; + } + + return (CursorChildIterator) { + .tree = self->tree, + .parent = *last_entry->subtree, + .position = last_entry->position, + .child_index = 0, + .structural_child_index = 0, + .descendant_index = descendant_index, + .alias_sequence = alias_sequence, + }; +} + +static inline bool ts_tree_cursor_child_iterator_next( + CursorChildIterator *self, + TreeCursorEntry *result, + bool *visible +) { + if (!self->parent.ptr || self->child_index == self->parent.ptr->child_count) return false; + const Subtree *child = &ts_subtree_children(self->parent)[self->child_index]; + *result = (TreeCursorEntry) { + .subtree = child, + .position = self->position, + .child_index = self->child_index, + .structural_child_index = self->structural_child_index, + .descendant_index = self->descendant_index, + }; + *visible = ts_subtree_visible(*child); + bool extra = ts_subtree_extra(*child); + if (!extra) { + if (self->alias_sequence) { + *visible |= self->alias_sequence[self->structural_child_index]; + } + self->structural_child_index++; + } + + self->descendant_index += ts_subtree_visible_descendant_count(*child); + if (*visible) { + self->descendant_index += 1; + } + + self->position = length_add(self->position, ts_subtree_size(*child)); + self->child_index++; + + if (self->child_index < self->parent.ptr->child_count) { + Subtree next_child = ts_subtree_children(self->parent)[self->child_index]; + self->position = length_add(self->position, ts_subtree_padding(next_child)); + } + + return true; +} + +// Return a position that, when `b` is added to it, yields `a`. This +// can only be computed if `b` has zero rows. Otherwise, this function +// returns `LENGTH_UNDEFINED`, and the caller needs to recompute +// the position some other way. +static inline Length length_backtrack(Length a, Length b) { + if (length_is_undefined(a) || b.extent.row != 0) { + return LENGTH_UNDEFINED; + } + + Length result; + result.bytes = a.bytes - b.bytes; + result.extent.row = a.extent.row; + result.extent.column = a.extent.column - b.extent.column; + return result; +} + +static inline bool ts_tree_cursor_child_iterator_previous( + CursorChildIterator *self, + TreeCursorEntry *result, + bool *visible +) { + // this is mostly a reverse `ts_tree_cursor_child_iterator_next` taking into + // account unsigned underflow + if (!self->parent.ptr || (int8_t)self->child_index == -1) return false; + const Subtree *child = &ts_subtree_children(self->parent)[self->child_index]; + *result = (TreeCursorEntry) { + .subtree = child, + .position = self->position, + .child_index = self->child_index, + .structural_child_index = self->structural_child_index, + }; + *visible = ts_subtree_visible(*child); + bool extra = ts_subtree_extra(*child); + if (!extra && self->alias_sequence) { + *visible |= self->alias_sequence[self->structural_child_index]; + self->structural_child_index--; + } + + self->position = length_backtrack(self->position, ts_subtree_padding(*child)); + self->child_index--; + + // unsigned can underflow so compare it to child_count + if (self->child_index < self->parent.ptr->child_count) { + Subtree previous_child = ts_subtree_children(self->parent)[self->child_index]; + Length size = ts_subtree_size(previous_child); + self->position = length_backtrack(self->position, size); + } + + return true; +} + +// TSTreeCursor - lifecycle + +TSTreeCursor ts_tree_cursor_new(TSNode node) { + TSTreeCursor self = {NULL, NULL, {0, 0, 0}}; + ts_tree_cursor_init((TreeCursor *)&self, node); + return self; +} + +void ts_tree_cursor_reset(TSTreeCursor *_self, TSNode node) { + ts_tree_cursor_init((TreeCursor *)_self, node); +} + +void ts_tree_cursor_init(TreeCursor *self, TSNode node) { + self->tree = node.tree; + self->root_alias_symbol = node.context[3]; + array_clear(&self->stack); + array_push(&self->stack, ((TreeCursorEntry) { + .subtree = (const Subtree *)node.id, + .position = { + ts_node_start_byte(node), + ts_node_start_point(node) + }, + .child_index = 0, + .structural_child_index = 0, + .descendant_index = 0, + })); +} + +void ts_tree_cursor_delete(TSTreeCursor *_self) { + TreeCursor *self = (TreeCursor *)_self; + array_delete(&self->stack); +} + +// TSTreeCursor - walking the tree + +TreeCursorStep ts_tree_cursor_goto_first_child_internal(TSTreeCursor *_self) { + TreeCursor *self = (TreeCursor *)_self; + bool visible; + TreeCursorEntry entry; + CursorChildIterator iterator = ts_tree_cursor_iterate_children(self); + while (ts_tree_cursor_child_iterator_next(&iterator, &entry, &visible)) { + if (visible) { + array_push(&self->stack, entry); + return TreeCursorStepVisible; + } + if (ts_subtree_visible_child_count(*entry.subtree) > 0) { + array_push(&self->stack, entry); + return TreeCursorStepHidden; + } + } + return TreeCursorStepNone; +} + +bool ts_tree_cursor_goto_first_child(TSTreeCursor *self) { + for (;;) { + switch (ts_tree_cursor_goto_first_child_internal(self)) { + case TreeCursorStepHidden: + continue; + case TreeCursorStepVisible: + return true; + default: + return false; + } + } + return false; +} + +TreeCursorStep ts_tree_cursor_goto_last_child_internal(TSTreeCursor *_self) { + TreeCursor *self = (TreeCursor *)_self; + bool visible; + TreeCursorEntry entry; + CursorChildIterator iterator = ts_tree_cursor_iterate_children(self); + if (!iterator.parent.ptr || iterator.parent.ptr->child_count == 0) return TreeCursorStepNone; + + TreeCursorEntry last_entry = {0}; + TreeCursorStep last_step = TreeCursorStepNone; + while (ts_tree_cursor_child_iterator_next(&iterator, &entry, &visible)) { + if (visible) { + last_entry = entry; + last_step = TreeCursorStepVisible; + } + else if (ts_subtree_visible_child_count(*entry.subtree) > 0) { + last_entry = entry; + last_step = TreeCursorStepHidden; + } + } + if (last_entry.subtree) { + array_push(&self->stack, last_entry); + return last_step; + } + + return TreeCursorStepNone; +} + +bool ts_tree_cursor_goto_last_child(TSTreeCursor *self) { + for (;;) { + switch (ts_tree_cursor_goto_last_child_internal(self)) { + case TreeCursorStepHidden: + continue; + case TreeCursorStepVisible: + return true; + default: + return false; + } + } + return false; +} + +static inline int64_t ts_tree_cursor_goto_first_child_for_byte_and_point( + TSTreeCursor *_self, + uint32_t goal_byte, + TSPoint goal_point +) { + TreeCursor *self = (TreeCursor *)_self; + uint32_t initial_size = self->stack.size; + uint32_t visible_child_index = 0; + + bool did_descend; + do { + did_descend = false; + + bool visible; + TreeCursorEntry entry; + CursorChildIterator iterator = ts_tree_cursor_iterate_children(self); + while (ts_tree_cursor_child_iterator_next(&iterator, &entry, &visible)) { + Length entry_end = length_add(entry.position, ts_subtree_size(*entry.subtree)); + bool at_goal = entry_end.bytes >= goal_byte && point_gte(entry_end.extent, goal_point); + uint32_t visible_child_count = ts_subtree_visible_child_count(*entry.subtree); + if (at_goal) { + if (visible) { + array_push(&self->stack, entry); + return visible_child_index; + } + if (visible_child_count > 0) { + array_push(&self->stack, entry); + did_descend = true; + break; + } + } else if (visible) { + visible_child_index++; + } else { + visible_child_index += visible_child_count; + } + } + } while (did_descend); + + self->stack.size = initial_size; + return -1; +} + +int64_t ts_tree_cursor_goto_first_child_for_byte(TSTreeCursor *self, uint32_t goal_byte) { + return ts_tree_cursor_goto_first_child_for_byte_and_point(self, goal_byte, POINT_ZERO); +} + +int64_t ts_tree_cursor_goto_first_child_for_point(TSTreeCursor *self, TSPoint goal_point) { + return ts_tree_cursor_goto_first_child_for_byte_and_point(self, 0, goal_point); +} + +TreeCursorStep ts_tree_cursor_goto_sibling_internal( + TSTreeCursor *_self, + bool (*advance)(CursorChildIterator *, TreeCursorEntry *, bool *)) { + TreeCursor *self = (TreeCursor *)_self; + uint32_t initial_size = self->stack.size; + + while (self->stack.size > 1) { + TreeCursorEntry entry = array_pop(&self->stack); + CursorChildIterator iterator = ts_tree_cursor_iterate_children(self); + iterator.child_index = entry.child_index; + iterator.structural_child_index = entry.structural_child_index; + iterator.position = entry.position; + iterator.descendant_index = entry.descendant_index; + + bool visible = false; + advance(&iterator, &entry, &visible); + if (visible && self->stack.size + 1 < initial_size) break; + + while (advance(&iterator, &entry, &visible)) { + if (visible) { + array_push(&self->stack, entry); + return TreeCursorStepVisible; + } + + if (ts_subtree_visible_child_count(*entry.subtree)) { + array_push(&self->stack, entry); + return TreeCursorStepHidden; + } + } + } + + self->stack.size = initial_size; + return TreeCursorStepNone; +} + +TreeCursorStep ts_tree_cursor_goto_next_sibling_internal(TSTreeCursor *_self) { + return ts_tree_cursor_goto_sibling_internal(_self, ts_tree_cursor_child_iterator_next); +} + +bool ts_tree_cursor_goto_next_sibling(TSTreeCursor *self) { + switch (ts_tree_cursor_goto_next_sibling_internal(self)) { + case TreeCursorStepHidden: + ts_tree_cursor_goto_first_child(self); + return true; + case TreeCursorStepVisible: + return true; + default: + return false; + } +} + +TreeCursorStep ts_tree_cursor_goto_previous_sibling_internal(TSTreeCursor *_self) { + // since subtracting across row loses column information, we may have to + // restore it + TreeCursor *self = (TreeCursor *)_self; + + // for that, save current position before traversing + TreeCursorStep step = ts_tree_cursor_goto_sibling_internal( + _self, ts_tree_cursor_child_iterator_previous); + if (step == TreeCursorStepNone) + return step; + + // if length is already valid, there's no need to recompute it + if (!length_is_undefined(array_back(&self->stack)->position)) + return step; + + // restore position from the parent node + const TreeCursorEntry *parent = &self->stack.contents[self->stack.size - 2]; + Length position = parent->position; + uint32_t child_index = array_back(&self->stack)->child_index; + const Subtree *children = ts_subtree_children((*(parent->subtree))); + + if (child_index > 0) { + // skip first child padding since its position should match the position of the parent + position = length_add(position, ts_subtree_size(children[0])); + for (uint32_t i = 1; i < child_index; ++i) { + position = length_add(position, ts_subtree_total_size(children[i])); + } + position = length_add(position, ts_subtree_padding(children[child_index])); + } + + array_back(&self->stack)->position = position; + + return step; +} + +bool ts_tree_cursor_goto_previous_sibling(TSTreeCursor *self) { + switch (ts_tree_cursor_goto_previous_sibling_internal(self)) { + case TreeCursorStepHidden: + ts_tree_cursor_goto_last_child(self); + return true; + case TreeCursorStepVisible: + return true; + default: + return false; + } +} + +bool ts_tree_cursor_goto_parent(TSTreeCursor *_self) { + TreeCursor *self = (TreeCursor *)_self; + for (unsigned i = self->stack.size - 2; i + 1 > 0; i--) { + if (ts_tree_cursor_is_entry_visible(self, i)) { + self->stack.size = i + 1; + return true; + } + } + return false; +} + +void ts_tree_cursor_goto_descendant( + TSTreeCursor *_self, + uint32_t goal_descendant_index +) { + TreeCursor *self = (TreeCursor *)_self; + + // Ascend to the lowest ancestor that contains the goal node. + for (;;) { + uint32_t i = self->stack.size - 1; + TreeCursorEntry *entry = &self->stack.contents[i]; + uint32_t next_descendant_index = + entry->descendant_index + + (ts_tree_cursor_is_entry_visible(self, i) ? 1 : 0) + + ts_subtree_visible_descendant_count(*entry->subtree); + if ( + (entry->descendant_index <= goal_descendant_index) && + (next_descendant_index > goal_descendant_index) + ) { + break; + } else if (self->stack.size <= 1) { + return; + } else { + self->stack.size--; + } + } + + // Descend to the goal node. + bool did_descend = true; + do { + did_descend = false; + bool visible; + TreeCursorEntry entry; + CursorChildIterator iterator = ts_tree_cursor_iterate_children(self); + if (iterator.descendant_index > goal_descendant_index) { + return; + } + + while (ts_tree_cursor_child_iterator_next(&iterator, &entry, &visible)) { + if (iterator.descendant_index > goal_descendant_index) { + array_push(&self->stack, entry); + if (visible && entry.descendant_index == goal_descendant_index) { + return; + } else { + did_descend = true; + break; + } + } + } + } while (did_descend); +} + +uint32_t ts_tree_cursor_current_descendant_index(const TSTreeCursor *_self) { + const TreeCursor *self = (const TreeCursor *)_self; + TreeCursorEntry *last_entry = array_back(&self->stack); + return last_entry->descendant_index; +} + +TSNode ts_tree_cursor_current_node(const TSTreeCursor *_self) { + const TreeCursor *self = (const TreeCursor *)_self; + TreeCursorEntry *last_entry = array_back(&self->stack); + TSSymbol alias_symbol = self->root_alias_symbol; + if (self->stack.size > 1 && !ts_subtree_extra(*last_entry->subtree)) { + TreeCursorEntry *parent_entry = &self->stack.contents[self->stack.size - 2]; + alias_symbol = ts_language_alias_at( + self->tree->language, + parent_entry->subtree->ptr->production_id, + last_entry->structural_child_index + ); + } + return ts_node_new( + self->tree, + last_entry->subtree, + last_entry->position, + alias_symbol + ); +} + +// Private - Get various facts about the current node that are needed +// when executing tree queries. +void ts_tree_cursor_current_status( + const TSTreeCursor *_self, + TSFieldId *field_id, + bool *has_later_siblings, + bool *has_later_named_siblings, + bool *can_have_later_siblings_with_this_field, + TSSymbol *supertypes, + unsigned *supertype_count +) { + const TreeCursor *self = (const TreeCursor *)_self; + unsigned max_supertypes = *supertype_count; + *field_id = 0; + *supertype_count = 0; + *has_later_siblings = false; + *has_later_named_siblings = false; + *can_have_later_siblings_with_this_field = false; + + // Walk up the tree, visiting the current node and its invisible ancestors, + // because fields can refer to nodes through invisible *wrapper* nodes, + for (unsigned i = self->stack.size - 1; i > 0; i--) { + TreeCursorEntry *entry = &self->stack.contents[i]; + TreeCursorEntry *parent_entry = &self->stack.contents[i - 1]; + + const TSSymbol *alias_sequence = ts_language_alias_sequence( + self->tree->language, + parent_entry->subtree->ptr->production_id + ); + + #define subtree_symbol(subtree, structural_child_index) \ + (( \ + !ts_subtree_extra(subtree) && \ + alias_sequence && \ + alias_sequence[structural_child_index] \ + ) ? \ + alias_sequence[structural_child_index] : \ + ts_subtree_symbol(subtree)) + + // Stop walking up when a visible ancestor is found. + TSSymbol entry_symbol = subtree_symbol( + *entry->subtree, + entry->structural_child_index + ); + TSSymbolMetadata entry_metadata = ts_language_symbol_metadata( + self->tree->language, + entry_symbol + ); + if (i != self->stack.size - 1 && entry_metadata.visible) break; + + // Record any supertypes + if (entry_metadata.supertype && *supertype_count < max_supertypes) { + supertypes[*supertype_count] = entry_symbol; + (*supertype_count)++; + } + + // Determine if the current node has later siblings. + if (!*has_later_siblings) { + unsigned sibling_count = parent_entry->subtree->ptr->child_count; + unsigned structural_child_index = entry->structural_child_index; + if (!ts_subtree_extra(*entry->subtree)) structural_child_index++; + for (unsigned j = entry->child_index + 1; j < sibling_count; j++) { + Subtree sibling = ts_subtree_children(*parent_entry->subtree)[j]; + TSSymbolMetadata sibling_metadata = ts_language_symbol_metadata( + self->tree->language, + subtree_symbol(sibling, structural_child_index) + ); + if (sibling_metadata.visible) { + *has_later_siblings = true; + if (*has_later_named_siblings) break; + if (sibling_metadata.named) { + *has_later_named_siblings = true; + break; + } + } else if (ts_subtree_visible_child_count(sibling) > 0) { + *has_later_siblings = true; + if (*has_later_named_siblings) break; + if (sibling.ptr->named_child_count > 0) { + *has_later_named_siblings = true; + break; + } + } + if (!ts_subtree_extra(sibling)) structural_child_index++; + } + } + + #undef subtree_symbol + + if (!ts_subtree_extra(*entry->subtree)) { + const TSFieldMapEntry *field_map, *field_map_end; + ts_language_field_map( + self->tree->language, + parent_entry->subtree->ptr->production_id, + &field_map, &field_map_end + ); + + // Look for a field name associated with the current node. + if (!*field_id) { + for (const TSFieldMapEntry *map = field_map; map < field_map_end; map++) { + if (!map->inherited && map->child_index == entry->structural_child_index) { + *field_id = map->field_id; + break; + } + } + } + + // Determine if the current node can have later siblings with the same field name. + if (*field_id) { + for (const TSFieldMapEntry *map = field_map; map < field_map_end; map++) { + if ( + map->field_id == *field_id && + map->child_index > entry->structural_child_index + ) { + *can_have_later_siblings_with_this_field = true; + break; + } + } + } + } + } +} + +uint32_t ts_tree_cursor_current_depth(const TSTreeCursor *_self) { + const TreeCursor *self = (const TreeCursor *)_self; + uint32_t depth = 0; + for (unsigned i = 1; i < self->stack.size; i++) { + if (ts_tree_cursor_is_entry_visible(self, i)) { + depth++; + } + } + return depth; +} + +TSNode ts_tree_cursor_parent_node(const TSTreeCursor *_self) { + const TreeCursor *self = (const TreeCursor *)_self; + for (int i = (int)self->stack.size - 2; i >= 0; i--) { + TreeCursorEntry *entry = &self->stack.contents[i]; + bool is_visible = true; + TSSymbol alias_symbol = 0; + if (i > 0) { + TreeCursorEntry *parent_entry = &self->stack.contents[i - 1]; + alias_symbol = ts_language_alias_at( + self->tree->language, + parent_entry->subtree->ptr->production_id, + entry->structural_child_index + ); + is_visible = (alias_symbol != 0) || ts_subtree_visible(*entry->subtree); + } + if (is_visible) { + return ts_node_new( + self->tree, + entry->subtree, + entry->position, + alias_symbol + ); + } + } + return ts_node_new(NULL, NULL, length_zero(), 0); +} + +TSFieldId ts_tree_cursor_current_field_id(const TSTreeCursor *_self) { + const TreeCursor *self = (const TreeCursor *)_self; + + // Walk up the tree, visiting the current node and its invisible ancestors. + for (unsigned i = self->stack.size - 1; i > 0; i--) { + TreeCursorEntry *entry = &self->stack.contents[i]; + TreeCursorEntry *parent_entry = &self->stack.contents[i - 1]; + + // Stop walking up when another visible node is found. + if ( + i != self->stack.size - 1 && + ts_tree_cursor_is_entry_visible(self, i) + ) break; + + if (ts_subtree_extra(*entry->subtree)) break; + + const TSFieldMapEntry *field_map, *field_map_end; + ts_language_field_map( + self->tree->language, + parent_entry->subtree->ptr->production_id, + &field_map, &field_map_end + ); + for (const TSFieldMapEntry *map = field_map; map < field_map_end; map++) { + if (!map->inherited && map->child_index == entry->structural_child_index) { + return map->field_id; + } + } + } + return 0; +} + +const char *ts_tree_cursor_current_field_name(const TSTreeCursor *_self) { + TSFieldId id = ts_tree_cursor_current_field_id(_self); + if (id) { + const TreeCursor *self = (const TreeCursor *)_self; + return self->tree->language->field_names[id]; + } else { + return NULL; + } +} + +TSTreeCursor ts_tree_cursor_copy(const TSTreeCursor *_cursor) { + const TreeCursor *cursor = (const TreeCursor *)_cursor; + TSTreeCursor res = {NULL, NULL, {0, 0}}; + TreeCursor *copy = (TreeCursor *)&res; + copy->tree = cursor->tree; + copy->root_alias_symbol = cursor->root_alias_symbol; + array_init(©->stack); + array_push_all(©->stack, &cursor->stack); + return res; +} + +void ts_tree_cursor_reset_to(TSTreeCursor *_dst, const TSTreeCursor *_src) { + const TreeCursor *cursor = (const TreeCursor *)_src; + TreeCursor *copy = (TreeCursor *)_dst; + copy->tree = cursor->tree; + copy->root_alias_symbol = cursor->root_alias_symbol; + array_clear(©->stack); + array_push_all(©->stack, &cursor->stack); +} diff --git a/parser/nnsrc/tree_cursor.h b/parser/nnsrc/tree_cursor.h new file mode 100644 index 00000000..96a386df --- /dev/null +++ b/parser/nnsrc/tree_cursor.h @@ -0,0 +1,48 @@ +#ifndef TREE_SITTER_TREE_CURSOR_H_ +#define TREE_SITTER_TREE_CURSOR_H_ + +#include "./subtree.h" + +typedef struct { + const Subtree *subtree; + Length position; + uint32_t child_index; + uint32_t structural_child_index; + uint32_t descendant_index; +} TreeCursorEntry; + +typedef struct { + const TSTree *tree; + Array(TreeCursorEntry) stack; + TSSymbol root_alias_symbol; +} TreeCursor; + +typedef enum { + TreeCursorStepNone, + TreeCursorStepHidden, + TreeCursorStepVisible, +} TreeCursorStep; + +void ts_tree_cursor_init(TreeCursor *, TSNode); +void ts_tree_cursor_current_status( + const TSTreeCursor *, + TSFieldId *, + bool *, + bool *, + bool *, + TSSymbol *, + unsigned * +); + +TreeCursorStep ts_tree_cursor_goto_first_child_internal(TSTreeCursor *); +TreeCursorStep ts_tree_cursor_goto_next_sibling_internal(TSTreeCursor *); + +static inline Subtree ts_tree_cursor_current_subtree(const TSTreeCursor *_self) { + const TreeCursor *self = (const TreeCursor *)_self; + TreeCursorEntry *last_entry = array_back(&self->stack); + return *last_entry->subtree; +} + +TSNode ts_tree_cursor_parent_node(const TSTreeCursor *); + +#endif // TREE_SITTER_TREE_CURSOR_H_ diff --git a/parser/nnsrc/unicode.h b/parser/nnsrc/unicode.h new file mode 100644 index 00000000..0fba56a6 --- /dev/null +++ b/parser/nnsrc/unicode.h @@ -0,0 +1,50 @@ +#ifndef TREE_SITTER_UNICODE_H_ +#define TREE_SITTER_UNICODE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +#define U_EXPORT +#define U_EXPORT2 +#include "unicode/utf8.h" +#include "unicode/utf16.h" + +static const int32_t TS_DECODE_ERROR = U_SENTINEL; + +// These functions read one unicode code point from the given string, +// returning the number of bytes consumed. +typedef uint32_t (*UnicodeDecodeFunction)( + const uint8_t *string, + uint32_t length, + int32_t *code_point +); + +static inline uint32_t ts_decode_utf8( + const uint8_t *string, + uint32_t length, + int32_t *code_point +) { + uint32_t i = 0; + U8_NEXT(string, i, length, *code_point); + return i; +} + +static inline uint32_t ts_decode_utf16( + const uint8_t *string, + uint32_t length, + int32_t *code_point +) { + uint32_t i = 0; + U16_NEXT(((uint16_t *)string), i, length, *code_point); + return i * 2; +} + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_UNICODE_H_ diff --git a/parser/nnsrc/unicode/ICU_SHA b/parser/nnsrc/unicode/ICU_SHA new file mode 100644 index 00000000..3622283b --- /dev/null +++ b/parser/nnsrc/unicode/ICU_SHA @@ -0,0 +1 @@ +552b01f61127d30d6589aa4bf99468224979b661 diff --git a/parser/nnsrc/unicode/LICENSE b/parser/nnsrc/unicode/LICENSE new file mode 100644 index 00000000..2e01e368 --- /dev/null +++ b/parser/nnsrc/unicode/LICENSE @@ -0,0 +1,414 @@ +COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later) + +Copyright © 1991-2019 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in https://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. + +--------------------- + +Third-Party Software Licenses + +This section contains third-party software notices and/or additional +terms for licensed third-party software components included within ICU +libraries. + +1. ICU License - ICU 1.8.1 to ICU 57.1 + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1995-2016 International Business Machines Corporation and others +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, and/or sell copies of the Software, and to permit persons +to whom the Software is furnished to do so, provided that the above +copyright notice(s) and this permission notice appear in all copies of +the Software and that both the above copyright notice(s) and this +permission notice appear in supporting documentation. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY +SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, use +or other dealings in this Software without prior written authorization +of the copyright holder. + +All trademarks and registered trademarks mentioned herein are the +property of their respective owners. + +2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt) + + # The Google Chrome software developed by Google is licensed under + # the BSD license. Other software included in this distribution is + # provided under other licenses, as set forth below. + # + # The BSD License + # http://opensource.org/licenses/bsd-license.php + # Copyright (C) 2006-2008, Google Inc. + # + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions are met: + # + # Redistributions of source code must retain the above copyright notice, + # this list of conditions and the following disclaimer. + # Redistributions in binary form must reproduce the above + # copyright notice, this list of conditions and the following + # disclaimer in the documentation and/or other materials provided with + # the distribution. + # Neither the name of Google Inc. nor the names of its + # contributors may be used to endorse or promote products derived from + # this software without specific prior written permission. + # + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + # + # + # The word list in cjdict.txt are generated by combining three word lists + # listed below with further processing for compound word breaking. The + # frequency is generated with an iterative training against Google web + # corpora. + # + # * Libtabe (Chinese) + # - https://sourceforge.net/project/?group_id=1519 + # - Its license terms and conditions are shown below. + # + # * IPADIC (Japanese) + # - http://chasen.aist-nara.ac.jp/chasen/distribution.html + # - Its license terms and conditions are shown below. + # + # ---------COPYING.libtabe ---- BEGIN-------------------- + # + # /* + # * Copyright (c) 1999 TaBE Project. + # * Copyright (c) 1999 Pai-Hsiang Hsiao. + # * All rights reserved. + # * + # * Redistribution and use in source and binary forms, with or without + # * modification, are permitted provided that the following conditions + # * are met: + # * + # * . Redistributions of source code must retain the above copyright + # * notice, this list of conditions and the following disclaimer. + # * . Redistributions in binary form must reproduce the above copyright + # * notice, this list of conditions and the following disclaimer in + # * the documentation and/or other materials provided with the + # * distribution. + # * . Neither the name of the TaBE Project nor the names of its + # * contributors may be used to endorse or promote products derived + # * from this software without specific prior written permission. + # * + # * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + # * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # * OF THE POSSIBILITY OF SUCH DAMAGE. + # */ + # + # /* + # * Copyright (c) 1999 Computer Systems and Communication Lab, + # * Institute of Information Science, Academia + # * Sinica. All rights reserved. + # * + # * Redistribution and use in source and binary forms, with or without + # * modification, are permitted provided that the following conditions + # * are met: + # * + # * . Redistributions of source code must retain the above copyright + # * notice, this list of conditions and the following disclaimer. + # * . Redistributions in binary form must reproduce the above copyright + # * notice, this list of conditions and the following disclaimer in + # * the documentation and/or other materials provided with the + # * distribution. + # * . Neither the name of the Computer Systems and Communication Lab + # * nor the names of its contributors may be used to endorse or + # * promote products derived from this software without specific + # * prior written permission. + # * + # * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + # * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # * OF THE POSSIBILITY OF SUCH DAMAGE. + # */ + # + # Copyright 1996 Chih-Hao Tsai @ Beckman Institute, + # University of Illinois + # c-tsai4@uiuc.edu http://casper.beckman.uiuc.edu/~c-tsai4 + # + # ---------------COPYING.libtabe-----END-------------------------------- + # + # + # ---------------COPYING.ipadic-----BEGIN------------------------------- + # + # Copyright 2000, 2001, 2002, 2003 Nara Institute of Science + # and Technology. All Rights Reserved. + # + # Use, reproduction, and distribution of this software is permitted. + # Any copy of this software, whether in its original form or modified, + # must include both the above copyright notice and the following + # paragraphs. + # + # Nara Institute of Science and Technology (NAIST), + # the copyright holders, disclaims all warranties with regard to this + # software, including all implied warranties of merchantability and + # fitness, in no event shall NAIST be liable for + # any special, indirect or consequential damages or any damages + # whatsoever resulting from loss of use, data or profits, whether in an + # action of contract, negligence or other tortuous action, arising out + # of or in connection with the use or performance of this software. + # + # A large portion of the dictionary entries + # originate from ICOT Free Software. The following conditions for ICOT + # Free Software applies to the current dictionary as well. + # + # Each User may also freely distribute the Program, whether in its + # original form or modified, to any third party or parties, PROVIDED + # that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear + # on, or be attached to, the Program, which is distributed substantially + # in the same form as set out herein and that such intended + # distribution, if actually made, will neither violate or otherwise + # contravene any of the laws and regulations of the countries having + # jurisdiction over the User or the intended distribution itself. + # + # NO WARRANTY + # + # The program was produced on an experimental basis in the course of the + # research and development conducted during the project and is provided + # to users as so produced on an experimental basis. Accordingly, the + # program is provided without any warranty whatsoever, whether express, + # implied, statutory or otherwise. The term "warranty" used herein + # includes, but is not limited to, any warranty of the quality, + # performance, merchantability and fitness for a particular purpose of + # the program and the nonexistence of any infringement or violation of + # any right of any third party. + # + # Each user of the program will agree and understand, and be deemed to + # have agreed and understood, that there is no warranty whatsoever for + # the program and, accordingly, the entire risk arising from or + # otherwise connected with the program is assumed by the user. + # + # Therefore, neither ICOT, the copyright holder, or any other + # organization that participated in or was otherwise related to the + # development of the program and their respective officials, directors, + # officers and other employees shall be held liable for any and all + # damages, including, without limitation, general, special, incidental + # and consequential damages, arising out of or otherwise in connection + # with the use or inability to use the program or any product, material + # or result produced or otherwise obtained by using the program, + # regardless of whether they have been advised of, or otherwise had + # knowledge of, the possibility of such damages at any time during the + # project or thereafter. Each user will be deemed to have agreed to the + # foregoing by his or her commencement of use of the program. The term + # "use" as used herein includes, but is not limited to, the use, + # modification, copying and distribution of the program and the + # production of secondary products from the program. + # + # In the case where the program, whether in its original form or + # modified, was distributed or delivered to or received by a user from + # any person, organization or entity other than ICOT, unless it makes or + # grants independently of ICOT any specific warranty to the user in + # writing, such person, organization or entity, will also be exempted + # from and not be held liable to the user for any such damages as noted + # above as far as the program is concerned. + # + # ---------------COPYING.ipadic-----END---------------------------------- + +3. Lao Word Break Dictionary Data (laodict.txt) + + # Copyright (c) 2013 International Business Machines Corporation + # and others. All Rights Reserved. + # + # Project: http://code.google.com/p/lao-dictionary/ + # Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt + # License: http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt + # (copied below) + # + # This file is derived from the above dictionary, with slight + # modifications. + # ---------------------------------------------------------------------- + # Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell. + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, + # are permitted provided that the following conditions are met: + # + # + # Redistributions of source code must retain the above copyright notice, this + # list of conditions and the following disclaimer. Redistributions in + # binary form must reproduce the above copyright notice, this list of + # conditions and the following disclaimer in the documentation and/or + # other materials provided with the distribution. + # + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # OF THE POSSIBILITY OF SUCH DAMAGE. + # -------------------------------------------------------------------------- + +4. Burmese Word Break Dictionary Data (burmesedict.txt) + + # Copyright (c) 2014 International Business Machines Corporation + # and others. All Rights Reserved. + # + # This list is part of a project hosted at: + # github.com/kanyawtech/myanmar-karen-word-lists + # + # -------------------------------------------------------------------------- + # Copyright (c) 2013, LeRoy Benjamin Sharon + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions + # are met: Redistributions of source code must retain the above + # copyright notice, this list of conditions and the following + # disclaimer. Redistributions in binary form must reproduce the + # above copyright notice, this list of conditions and the following + # disclaimer in the documentation and/or other materials provided + # with the distribution. + # + # Neither the name Myanmar Karen Word Lists, nor the names of its + # contributors may be used to endorse or promote products derived + # from this software without specific prior written permission. + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS + # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF + # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + # SUCH DAMAGE. + # -------------------------------------------------------------------------- + +5. Time Zone Database + + ICU uses the public domain data and code derived from Time Zone +Database for its time zone support. The ownership of the TZ database +is explained in BCP 175: Procedure for Maintaining the Time Zone +Database section 7. + + # 7. Database Ownership + # + # The TZ database itself is not an IETF Contribution or an IETF + # document. Rather it is a pre-existing and regularly updated work + # that is in the public domain, and is intended to remain in the + # public domain. Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do + # not apply to the TZ Database or contributions that individuals make + # to it. Should any claims be made and substantiated against the TZ + # Database, the organization that is providing the IANA + # Considerations defined in this RFC, under the memorandum of + # understanding with the IETF, currently ICANN, may act in accordance + # with all competent court orders. No ownership claims will be made + # by ICANN or the IETF Trust on the database or the code. Any person + # making a contribution to the database or code waives all rights to + # future claims in that contribution or in the TZ Database. + +6. Google double-conversion + +Copyright 2006-2011, the V8 project authors. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/parser/nnsrc/unicode/README.md b/parser/nnsrc/unicode/README.md new file mode 100644 index 00000000..623b8e38 --- /dev/null +++ b/parser/nnsrc/unicode/README.md @@ -0,0 +1,29 @@ +# ICU Parts + +This directory contains a small subset of files from the Unicode organization's [ICU repository](https://github.com/unicode-org/icu). + +### License + +The license for these files is contained in the `LICENSE` file within this directory. + +### Contents + +* Source files taken from the [`icu4c/source/common/unicode`](https://github.com/unicode-org/icu/tree/552b01f61127d30d6589aa4bf99468224979b661/icu4c/source/common/unicode) directory: + * `utf8.h` + * `utf16.h` + * `umachine.h` +* Empty source files that are referenced by the above source files, but whose original contents in `libicu` are not needed: + * `ptypes.h` + * `urename.h` + * `utf.h` +* `ICU_SHA` - File containing the Git SHA of the commit in the `icu` repository from which the files were obtained. +* `LICENSE` - The license file from the [`icu4c`](https://github.com/unicode-org/icu/tree/552b01f61127d30d6589aa4bf99468224979b661/icu4c) directory of the `icu` repository. +* `README.md` - This text file. + +### Updating ICU + +To incorporate changes from the upstream `icu` repository: + +* Update `ICU_SHA` with the new Git SHA. +* Update `LICENSE` with the license text from the directory mentioned above. +* Update `utf8.h`, `utf16.h`, and `umachine.h` with their new contents in the `icu` repository. diff --git a/parser/nnsrc/unicode/ptypes.h b/parser/nnsrc/unicode/ptypes.h new file mode 100644 index 00000000..ac79ad0f --- /dev/null +++ b/parser/nnsrc/unicode/ptypes.h @@ -0,0 +1 @@ +// This file must exist in order for `utf8.h` and `utf16.h` to be used. diff --git a/parser/nnsrc/unicode/umachine.h b/parser/nnsrc/unicode/umachine.h new file mode 100644 index 00000000..9195824d --- /dev/null +++ b/parser/nnsrc/unicode/umachine.h @@ -0,0 +1,448 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +****************************************************************************** +* +* Copyright (C) 1999-2015, International Business Machines +* Corporation and others. All Rights Reserved. +* +****************************************************************************** +* file name: umachine.h +* encoding: UTF-8 +* tab size: 8 (not used) +* indentation:4 +* +* created on: 1999sep13 +* created by: Markus W. Scherer +* +* This file defines basic types and constants for ICU to be +* platform-independent. umachine.h and utf.h are included into +* utypes.h to provide all the general definitions for ICU. +* All of these definitions used to be in utypes.h before +* the UTF-handling macros made this unmaintainable. +*/ + +#ifndef __UMACHINE_H__ +#define __UMACHINE_H__ + + +/** + * \file + * \brief Basic types and constants for UTF + * + *

Basic types and constants for UTF

+ * This file defines basic types and constants for utf.h to be + * platform-independent. umachine.h and utf.h are included into + * utypes.h to provide all the general definitions for ICU. + * All of these definitions used to be in utypes.h before + * the UTF-handling macros made this unmaintainable. + * + */ +/*==========================================================================*/ +/* Include platform-dependent definitions */ +/* which are contained in the platform-specific file platform.h */ +/*==========================================================================*/ + +#include "unicode/ptypes.h" /* platform.h is included in ptypes.h */ + +/* + * ANSI C headers: + * stddef.h defines wchar_t + */ +#include + +/*==========================================================================*/ +/* For C wrappers, we use the symbol U_STABLE. */ +/* This works properly if the includer is C or C++. */ +/* Functions are declared U_STABLE return-type U_EXPORT2 function-name()... */ +/*==========================================================================*/ + +/** + * \def U_CFUNC + * This is used in a declaration of a library private ICU C function. + * @stable ICU 2.4 + */ + +/** + * \def U_CDECL_BEGIN + * This is used to begin a declaration of a library private ICU C API. + * @stable ICU 2.4 + */ + +/** + * \def U_CDECL_END + * This is used to end a declaration of a library private ICU C API + * @stable ICU 2.4 + */ + +#ifdef __cplusplus +# define U_CFUNC extern "C" +# define U_CDECL_BEGIN extern "C" { +# define U_CDECL_END } +#else +# define U_CFUNC extern +# define U_CDECL_BEGIN +# define U_CDECL_END +#endif + +#ifndef U_ATTRIBUTE_DEPRECATED +/** + * \def U_ATTRIBUTE_DEPRECATED + * This is used for GCC specific attributes + * @internal + */ +#if U_GCC_MAJOR_MINOR >= 302 +# define U_ATTRIBUTE_DEPRECATED __attribute__ ((deprecated)) +/** + * \def U_ATTRIBUTE_DEPRECATED + * This is used for Visual C++ specific attributes + * @internal + */ +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) +# define U_ATTRIBUTE_DEPRECATED __declspec(deprecated) +#else +# define U_ATTRIBUTE_DEPRECATED +#endif +#endif + +/** This is used to declare a function as a public ICU C API @stable ICU 2.0*/ +#define U_CAPI U_CFUNC U_EXPORT +/** This is used to declare a function as a stable public ICU C API*/ +#define U_STABLE U_CAPI +/** This is used to declare a function as a draft public ICU C API */ +#define U_DRAFT U_CAPI +/** This is used to declare a function as a deprecated public ICU C API */ +#define U_DEPRECATED U_CAPI U_ATTRIBUTE_DEPRECATED +/** This is used to declare a function as an obsolete public ICU C API */ +#define U_OBSOLETE U_CAPI +/** This is used to declare a function as an internal ICU C API */ +#define U_INTERNAL U_CAPI + +/** + * \def U_OVERRIDE + * Defined to the C++11 "override" keyword if available. + * Denotes a class or member which is an override of the base class. + * May result in an error if it applied to something not an override. + * @internal + */ +#ifndef U_OVERRIDE +#define U_OVERRIDE override +#endif + +/** + * \def U_FINAL + * Defined to the C++11 "final" keyword if available. + * Denotes a class or member which may not be overridden in subclasses. + * May result in an error if subclasses attempt to override. + * @internal + */ +#if !defined(U_FINAL) || defined(U_IN_DOXYGEN) +#define U_FINAL final +#endif + +// Before ICU 65, function-like, multi-statement ICU macros were just defined as +// series of statements wrapped in { } blocks and the caller could choose to +// either treat them as if they were actual functions and end the invocation +// with a trailing ; creating an empty statement after the block or else omit +// this trailing ; using the knowledge that the macro would expand to { }. +// +// But doing so doesn't work well with macros that look like functions and +// compiler warnings about empty statements (ICU-20601) and ICU 65 therefore +// switches to the standard solution of wrapping such macros in do { } while. +// +// This will however break existing code that depends on being able to invoke +// these macros without a trailing ; so to be able to remain compatible with +// such code the wrapper is itself defined as macros so that it's possible to +// build ICU 65 and later with the old macro behaviour, like this: +// +// CPPFLAGS='-DUPRV_BLOCK_MACRO_BEGIN="" -DUPRV_BLOCK_MACRO_END=""' +// runConfigureICU ... + +/** + * \def UPRV_BLOCK_MACRO_BEGIN + * Defined as the "do" keyword by default. + * @internal + */ +#ifndef UPRV_BLOCK_MACRO_BEGIN +#define UPRV_BLOCK_MACRO_BEGIN do +#endif + +/** + * \def UPRV_BLOCK_MACRO_END + * Defined as "while (FALSE)" by default. + * @internal + */ +#ifndef UPRV_BLOCK_MACRO_END +#define UPRV_BLOCK_MACRO_END while (FALSE) +#endif + +/*==========================================================================*/ +/* limits for int32_t etc., like in POSIX inttypes.h */ +/*==========================================================================*/ + +#ifndef INT8_MIN +/** The smallest value an 8 bit signed integer can hold @stable ICU 2.0 */ +# define INT8_MIN ((int8_t)(-128)) +#endif +#ifndef INT16_MIN +/** The smallest value a 16 bit signed integer can hold @stable ICU 2.0 */ +# define INT16_MIN ((int16_t)(-32767-1)) +#endif +#ifndef INT32_MIN +/** The smallest value a 32 bit signed integer can hold @stable ICU 2.0 */ +# define INT32_MIN ((int32_t)(-2147483647-1)) +#endif + +#ifndef INT8_MAX +/** The largest value an 8 bit signed integer can hold @stable ICU 2.0 */ +# define INT8_MAX ((int8_t)(127)) +#endif +#ifndef INT16_MAX +/** The largest value a 16 bit signed integer can hold @stable ICU 2.0 */ +# define INT16_MAX ((int16_t)(32767)) +#endif +#ifndef INT32_MAX +/** The largest value a 32 bit signed integer can hold @stable ICU 2.0 */ +# define INT32_MAX ((int32_t)(2147483647)) +#endif + +#ifndef UINT8_MAX +/** The largest value an 8 bit unsigned integer can hold @stable ICU 2.0 */ +# define UINT8_MAX ((uint8_t)(255U)) +#endif +#ifndef UINT16_MAX +/** The largest value a 16 bit unsigned integer can hold @stable ICU 2.0 */ +# define UINT16_MAX ((uint16_t)(65535U)) +#endif +#ifndef UINT32_MAX +/** The largest value a 32 bit unsigned integer can hold @stable ICU 2.0 */ +# define UINT32_MAX ((uint32_t)(4294967295U)) +#endif + +#if defined(U_INT64_T_UNAVAILABLE) +# error int64_t is required for decimal format and rule-based number format. +#else +# ifndef INT64_C +/** + * Provides a platform independent way to specify a signed 64-bit integer constant. + * note: may be wrong for some 64 bit platforms - ensure your compiler provides INT64_C + * @stable ICU 2.8 + */ +# define INT64_C(c) c ## LL +# endif +# ifndef UINT64_C +/** + * Provides a platform independent way to specify an unsigned 64-bit integer constant. + * note: may be wrong for some 64 bit platforms - ensure your compiler provides UINT64_C + * @stable ICU 2.8 + */ +# define UINT64_C(c) c ## ULL +# endif +# ifndef U_INT64_MIN +/** The smallest value a 64 bit signed integer can hold @stable ICU 2.8 */ +# define U_INT64_MIN ((int64_t)(INT64_C(-9223372036854775807)-1)) +# endif +# ifndef U_INT64_MAX +/** The largest value a 64 bit signed integer can hold @stable ICU 2.8 */ +# define U_INT64_MAX ((int64_t)(INT64_C(9223372036854775807))) +# endif +# ifndef U_UINT64_MAX +/** The largest value a 64 bit unsigned integer can hold @stable ICU 2.8 */ +# define U_UINT64_MAX ((uint64_t)(UINT64_C(18446744073709551615))) +# endif +#endif + +/*==========================================================================*/ +/* Boolean data type */ +/*==========================================================================*/ + +/** The ICU boolean type @stable ICU 2.0 */ +typedef int8_t UBool; + +#ifndef TRUE +/** The TRUE value of a UBool @stable ICU 2.0 */ +# define TRUE 1 +#endif +#ifndef FALSE +/** The FALSE value of a UBool @stable ICU 2.0 */ +# define FALSE 0 +#endif + + +/*==========================================================================*/ +/* Unicode data types */ +/*==========================================================================*/ + +/* wchar_t-related definitions -------------------------------------------- */ + +/* + * \def U_WCHAR_IS_UTF16 + * Defined if wchar_t uses UTF-16. + * + * @stable ICU 2.0 + */ +/* + * \def U_WCHAR_IS_UTF32 + * Defined if wchar_t uses UTF-32. + * + * @stable ICU 2.0 + */ +#if !defined(U_WCHAR_IS_UTF16) && !defined(U_WCHAR_IS_UTF32) +# ifdef __STDC_ISO_10646__ +# if (U_SIZEOF_WCHAR_T==2) +# define U_WCHAR_IS_UTF16 +# elif (U_SIZEOF_WCHAR_T==4) +# define U_WCHAR_IS_UTF32 +# endif +# elif defined __UCS2__ +# if (U_PF_OS390 <= U_PLATFORM && U_PLATFORM <= U_PF_OS400) && (U_SIZEOF_WCHAR_T==2) +# define U_WCHAR_IS_UTF16 +# endif +# elif defined(__UCS4__) || (U_PLATFORM == U_PF_OS400 && defined(__UTF32__)) +# if (U_SIZEOF_WCHAR_T==4) +# define U_WCHAR_IS_UTF32 +# endif +# elif U_PLATFORM_IS_DARWIN_BASED || (U_SIZEOF_WCHAR_T==4 && U_PLATFORM_IS_LINUX_BASED) +# define U_WCHAR_IS_UTF32 +# elif U_PLATFORM_HAS_WIN32_API +# define U_WCHAR_IS_UTF16 +# endif +#endif + +/* UChar and UChar32 definitions -------------------------------------------- */ + +/** Number of bytes in a UChar. @stable ICU 2.0 */ +#define U_SIZEOF_UCHAR 2 + +/** + * \def U_CHAR16_IS_TYPEDEF + * If 1, then char16_t is a typedef and not a real type (yet) + * @internal + */ +#if (U_PLATFORM == U_PF_AIX) && defined(__cplusplus) &&(U_CPLUSPLUS_VERSION < 11) +// for AIX, uchar.h needs to be included +# include +# define U_CHAR16_IS_TYPEDEF 1 +#elif defined(_MSC_VER) && (_MSC_VER < 1900) +// Versions of Visual Studio/MSVC below 2015 do not support char16_t as a real type, +// and instead use a typedef. https://msdn.microsoft.com/library/bb531344.aspx +# define U_CHAR16_IS_TYPEDEF 1 +#else +# define U_CHAR16_IS_TYPEDEF 0 +#endif + + +/** + * \var UChar + * + * The base type for UTF-16 code units and pointers. + * Unsigned 16-bit integer. + * Starting with ICU 59, C++ API uses char16_t directly, while C API continues to use UChar. + * + * UChar is configurable by defining the macro UCHAR_TYPE + * on the preprocessor or compiler command line: + * -DUCHAR_TYPE=uint16_t or -DUCHAR_TYPE=wchar_t (if U_SIZEOF_WCHAR_T==2) etc. + * (The UCHAR_TYPE can also be \#defined earlier in this file, for outside the ICU library code.) + * This is for transitional use from application code that uses uint16_t or wchar_t for UTF-16. + * + * The default is UChar=char16_t. + * + * C++11 defines char16_t as bit-compatible with uint16_t, but as a distinct type. + * + * In C, char16_t is a simple typedef of uint_least16_t. + * ICU requires uint_least16_t=uint16_t for data memory mapping. + * On macOS, char16_t is not available because the uchar.h standard header is missing. + * + * @stable ICU 4.4 + */ + +#if 1 + // #if 1 is normal. UChar defaults to char16_t in C++. + // For configuration testing of UChar=uint16_t temporarily change this to #if 0. + // The intltest Makefile #defines UCHAR_TYPE=char16_t, + // so we only #define it to uint16_t if it is undefined so far. +#elif !defined(UCHAR_TYPE) +# define UCHAR_TYPE uint16_t +#endif + +#if defined(U_COMBINED_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION) || \ + defined(U_I18N_IMPLEMENTATION) || defined(U_IO_IMPLEMENTATION) + // Inside the ICU library code, never configurable. + typedef char16_t UChar; +#elif defined(UCHAR_TYPE) + typedef UCHAR_TYPE UChar; +#elif defined(__cplusplus) + typedef char16_t UChar; +#else + typedef uint16_t UChar; +#endif + +/** + * \var OldUChar + * Default ICU 58 definition of UChar. + * A base type for UTF-16 code units and pointers. + * Unsigned 16-bit integer. + * + * Define OldUChar to be wchar_t if that is 16 bits wide. + * If wchar_t is not 16 bits wide, then define UChar to be uint16_t. + * + * This makes the definition of OldUChar platform-dependent + * but allows direct string type compatibility with platforms with + * 16-bit wchar_t types. + * + * This is how UChar was defined in ICU 58, for transition convenience. + * Exception: ICU 58 UChar was defined to UCHAR_TYPE if that macro was defined. + * The current UChar responds to UCHAR_TYPE but OldUChar does not. + * + * @stable ICU 59 + */ +#if U_SIZEOF_WCHAR_T==2 + typedef wchar_t OldUChar; +#elif defined(__CHAR16_TYPE__) + typedef __CHAR16_TYPE__ OldUChar; +#else + typedef uint16_t OldUChar; +#endif + +/** + * Define UChar32 as a type for single Unicode code points. + * UChar32 is a signed 32-bit integer (same as int32_t). + * + * The Unicode code point range is 0..0x10ffff. + * All other values (negative or >=0x110000) are illegal as Unicode code points. + * They may be used as sentinel values to indicate "done", "error" + * or similar non-code point conditions. + * + * Before ICU 2.4 (Jitterbug 2146), UChar32 was defined + * to be wchar_t if that is 32 bits wide (wchar_t may be signed or unsigned) + * or else to be uint32_t. + * That is, the definition of UChar32 was platform-dependent. + * + * @see U_SENTINEL + * @stable ICU 2.4 + */ +typedef int32_t UChar32; + +/** + * This value is intended for sentinel values for APIs that + * (take or) return single code points (UChar32). + * It is outside of the Unicode code point range 0..0x10ffff. + * + * For example, a "done" or "error" value in a new API + * could be indicated with U_SENTINEL. + * + * ICU APIs designed before ICU 2.4 usually define service-specific "done" + * values, mostly 0xffff. + * Those may need to be distinguished from + * actual U+ffff text contents by calling functions like + * CharacterIterator::hasNext() or UnicodeString::length(). + * + * @return -1 + * @see UChar32 + * @stable ICU 2.4 + */ +#define U_SENTINEL (-1) + +#include "unicode/urename.h" + +#endif diff --git a/parser/nnsrc/unicode/urename.h b/parser/nnsrc/unicode/urename.h new file mode 100644 index 00000000..ac79ad0f --- /dev/null +++ b/parser/nnsrc/unicode/urename.h @@ -0,0 +1 @@ +// This file must exist in order for `utf8.h` and `utf16.h` to be used. diff --git a/parser/nnsrc/unicode/utf.h b/parser/nnsrc/unicode/utf.h new file mode 100644 index 00000000..ac79ad0f --- /dev/null +++ b/parser/nnsrc/unicode/utf.h @@ -0,0 +1 @@ +// This file must exist in order for `utf8.h` and `utf16.h` to be used. diff --git a/parser/nnsrc/unicode/utf16.h b/parser/nnsrc/unicode/utf16.h new file mode 100644 index 00000000..9fd7d5c8 --- /dev/null +++ b/parser/nnsrc/unicode/utf16.h @@ -0,0 +1,733 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +******************************************************************************* +* +* Copyright (C) 1999-2012, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: utf16.h +* encoding: UTF-8 +* tab size: 8 (not used) +* indentation:4 +* +* created on: 1999sep09 +* created by: Markus W. Scherer +*/ + +/** + * \file + * \brief C API: 16-bit Unicode handling macros + * + * This file defines macros to deal with 16-bit Unicode (UTF-16) code units and strings. + * + * For more information see utf.h and the ICU User Guide Strings chapter + * (http://userguide.icu-project.org/strings). + * + * Usage: + * ICU coding guidelines for if() statements should be followed when using these macros. + * Compound statements (curly braces {}) must be used for if-else-while... + * bodies and all macro statements should be terminated with semicolon. + */ + +#ifndef __UTF16_H__ +#define __UTF16_H__ + +#include "unicode/umachine.h" +#ifndef __UTF_H__ +# include "unicode/utf.h" +#endif + +/* single-code point definitions -------------------------------------------- */ + +/** + * Does this code unit alone encode a code point (BMP, not a surrogate)? + * @param c 16-bit code unit + * @return TRUE or FALSE + * @stable ICU 2.4 + */ +#define U16_IS_SINGLE(c) !U_IS_SURROGATE(c) + +/** + * Is this code unit a lead surrogate (U+d800..U+dbff)? + * @param c 16-bit code unit + * @return TRUE or FALSE + * @stable ICU 2.4 + */ +#define U16_IS_LEAD(c) (((c)&0xfffffc00)==0xd800) + +/** + * Is this code unit a trail surrogate (U+dc00..U+dfff)? + * @param c 16-bit code unit + * @return TRUE or FALSE + * @stable ICU 2.4 + */ +#define U16_IS_TRAIL(c) (((c)&0xfffffc00)==0xdc00) + +/** + * Is this code unit a surrogate (U+d800..U+dfff)? + * @param c 16-bit code unit + * @return TRUE or FALSE + * @stable ICU 2.4 + */ +#define U16_IS_SURROGATE(c) U_IS_SURROGATE(c) + +/** + * Assuming c is a surrogate code point (U16_IS_SURROGATE(c)), + * is it a lead surrogate? + * @param c 16-bit code unit + * @return TRUE or FALSE + * @stable ICU 2.4 + */ +#define U16_IS_SURROGATE_LEAD(c) (((c)&0x400)==0) + +/** + * Assuming c is a surrogate code point (U16_IS_SURROGATE(c)), + * is it a trail surrogate? + * @param c 16-bit code unit + * @return TRUE or FALSE + * @stable ICU 4.2 + */ +#define U16_IS_SURROGATE_TRAIL(c) (((c)&0x400)!=0) + +/** + * Helper constant for U16_GET_SUPPLEMENTARY. + * @internal + */ +#define U16_SURROGATE_OFFSET ((0xd800<<10UL)+0xdc00-0x10000) + +/** + * Get a supplementary code point value (U+10000..U+10ffff) + * from its lead and trail surrogates. + * The result is undefined if the input values are not + * lead and trail surrogates. + * + * @param lead lead surrogate (U+d800..U+dbff) + * @param trail trail surrogate (U+dc00..U+dfff) + * @return supplementary code point (U+10000..U+10ffff) + * @stable ICU 2.4 + */ +#define U16_GET_SUPPLEMENTARY(lead, trail) \ + (((UChar32)(lead)<<10UL)+(UChar32)(trail)-U16_SURROGATE_OFFSET) + + +/** + * Get the lead surrogate (0xd800..0xdbff) for a + * supplementary code point (0x10000..0x10ffff). + * @param supplementary 32-bit code point (U+10000..U+10ffff) + * @return lead surrogate (U+d800..U+dbff) for supplementary + * @stable ICU 2.4 + */ +#define U16_LEAD(supplementary) (UChar)(((supplementary)>>10)+0xd7c0) + +/** + * Get the trail surrogate (0xdc00..0xdfff) for a + * supplementary code point (0x10000..0x10ffff). + * @param supplementary 32-bit code point (U+10000..U+10ffff) + * @return trail surrogate (U+dc00..U+dfff) for supplementary + * @stable ICU 2.4 + */ +#define U16_TRAIL(supplementary) (UChar)(((supplementary)&0x3ff)|0xdc00) + +/** + * How many 16-bit code units are used to encode this Unicode code point? (1 or 2) + * The result is not defined if c is not a Unicode code point (U+0000..U+10ffff). + * @param c 32-bit code point + * @return 1 or 2 + * @stable ICU 2.4 + */ +#define U16_LENGTH(c) ((uint32_t)(c)<=0xffff ? 1 : 2) + +/** + * The maximum number of 16-bit code units per Unicode code point (U+0000..U+10ffff). + * @return 2 + * @stable ICU 2.4 + */ +#define U16_MAX_LENGTH 2 + +/** + * Get a code point from a string at a random-access offset, + * without changing the offset. + * "Unsafe" macro, assumes well-formed UTF-16. + * + * The offset may point to either the lead or trail surrogate unit + * for a supplementary code point, in which case the macro will read + * the adjacent matching surrogate as well. + * The result is undefined if the offset points to a single, unpaired surrogate. + * Iteration through a string is more efficient with U16_NEXT_UNSAFE or U16_NEXT. + * + * @param s const UChar * string + * @param i string offset + * @param c output UChar32 variable + * @see U16_GET + * @stable ICU 2.4 + */ +#define U16_GET_UNSAFE(s, i, c) UPRV_BLOCK_MACRO_BEGIN { \ + (c)=(s)[i]; \ + if(U16_IS_SURROGATE(c)) { \ + if(U16_IS_SURROGATE_LEAD(c)) { \ + (c)=U16_GET_SUPPLEMENTARY((c), (s)[(i)+1]); \ + } else { \ + (c)=U16_GET_SUPPLEMENTARY((s)[(i)-1], (c)); \ + } \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Get a code point from a string at a random-access offset, + * without changing the offset. + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * The offset may point to either the lead or trail surrogate unit + * for a supplementary code point, in which case the macro will read + * the adjacent matching surrogate as well. + * + * The length can be negative for a NUL-terminated string. + * + * If the offset points to a single, unpaired surrogate, then + * c is set to that unpaired surrogate. + * Iteration through a string is more efficient with U16_NEXT_UNSAFE or U16_NEXT. + * + * @param s const UChar * string + * @param start starting string offset (usually 0) + * @param i string offset, must be start<=i(start) && U16_IS_LEAD(__c2=(s)[(i)-1])) { \ + (c)=U16_GET_SUPPLEMENTARY(__c2, (c)); \ + } \ + } \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Get a code point from a string at a random-access offset, + * without changing the offset. + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * The offset may point to either the lead or trail surrogate unit + * for a supplementary code point, in which case the macro will read + * the adjacent matching surrogate as well. + * + * The length can be negative for a NUL-terminated string. + * + * If the offset points to a single, unpaired surrogate, then + * c is set to U+FFFD. + * Iteration through a string is more efficient with U16_NEXT_UNSAFE or U16_NEXT_OR_FFFD. + * + * @param s const UChar * string + * @param start starting string offset (usually 0) + * @param i string offset, must be start<=i(start) && U16_IS_LEAD(__c2=(s)[(i)-1])) { \ + (c)=U16_GET_SUPPLEMENTARY(__c2, (c)); \ + } else { \ + (c)=0xfffd; \ + } \ + } \ + } \ +} UPRV_BLOCK_MACRO_END + +/* definitions with forward iteration --------------------------------------- */ + +/** + * Get a code point from a string at a code point boundary offset, + * and advance the offset to the next code point boundary. + * (Post-incrementing forward iteration.) + * "Unsafe" macro, assumes well-formed UTF-16. + * + * The offset may point to the lead surrogate unit + * for a supplementary code point, in which case the macro will read + * the following trail surrogate as well. + * If the offset points to a trail surrogate, then that itself + * will be returned as the code point. + * The result is undefined if the offset points to a single, unpaired lead surrogate. + * + * @param s const UChar * string + * @param i string offset + * @param c output UChar32 variable + * @see U16_NEXT + * @stable ICU 2.4 + */ +#define U16_NEXT_UNSAFE(s, i, c) UPRV_BLOCK_MACRO_BEGIN { \ + (c)=(s)[(i)++]; \ + if(U16_IS_LEAD(c)) { \ + (c)=U16_GET_SUPPLEMENTARY((c), (s)[(i)++]); \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Get a code point from a string at a code point boundary offset, + * and advance the offset to the next code point boundary. + * (Post-incrementing forward iteration.) + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * The length can be negative for a NUL-terminated string. + * + * The offset may point to the lead surrogate unit + * for a supplementary code point, in which case the macro will read + * the following trail surrogate as well. + * If the offset points to a trail surrogate or + * to a single, unpaired lead surrogate, then c is set to that unpaired surrogate. + * + * @param s const UChar * string + * @param i string offset, must be i>10)+0xd7c0); \ + (s)[(i)++]=(uint16_t)(((c)&0x3ff)|0xdc00); \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Append a code point to a string, overwriting 1 or 2 code units. + * The offset points to the current end of the string contents + * and is advanced (post-increment). + * "Safe" macro, checks for a valid code point. + * If a surrogate pair is written, checks for sufficient space in the string. + * If the code point is not valid or a trail surrogate does not fit, + * then isError is set to TRUE. + * + * @param s const UChar * string buffer + * @param i string offset, must be i>10)+0xd7c0); \ + (s)[(i)++]=(uint16_t)(((c)&0x3ff)|0xdc00); \ + } else /* c>0x10ffff or not enough space */ { \ + (isError)=TRUE; \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Advance the string offset from one code point boundary to the next. + * (Post-incrementing iteration.) + * "Unsafe" macro, assumes well-formed UTF-16. + * + * @param s const UChar * string + * @param i string offset + * @see U16_FWD_1 + * @stable ICU 2.4 + */ +#define U16_FWD_1_UNSAFE(s, i) UPRV_BLOCK_MACRO_BEGIN { \ + if(U16_IS_LEAD((s)[(i)++])) { \ + ++(i); \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Advance the string offset from one code point boundary to the next. + * (Post-incrementing iteration.) + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * The length can be negative for a NUL-terminated string. + * + * @param s const UChar * string + * @param i string offset, must be i0) { \ + U16_FWD_1_UNSAFE(s, i); \ + --__N; \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Advance the string offset from one code point boundary to the n-th next one, + * i.e., move forward by n code points. + * (Post-incrementing iteration.) + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * The length can be negative for a NUL-terminated string. + * + * @param s const UChar * string + * @param i int32_t string offset, must be i0 && ((i)<(length) || ((length)<0 && (s)[i]!=0))) { \ + U16_FWD_1(s, i, length); \ + --__N; \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Adjust a random-access offset to a code point boundary + * at the start of a code point. + * If the offset points to the trail surrogate of a surrogate pair, + * then the offset is decremented. + * Otherwise, it is not modified. + * "Unsafe" macro, assumes well-formed UTF-16. + * + * @param s const UChar * string + * @param i string offset + * @see U16_SET_CP_START + * @stable ICU 2.4 + */ +#define U16_SET_CP_START_UNSAFE(s, i) UPRV_BLOCK_MACRO_BEGIN { \ + if(U16_IS_TRAIL((s)[i])) { \ + --(i); \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Adjust a random-access offset to a code point boundary + * at the start of a code point. + * If the offset points to the trail surrogate of a surrogate pair, + * then the offset is decremented. + * Otherwise, it is not modified. + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * @param s const UChar * string + * @param start starting string offset (usually 0) + * @param i string offset, must be start<=i + * @see U16_SET_CP_START_UNSAFE + * @stable ICU 2.4 + */ +#define U16_SET_CP_START(s, start, i) UPRV_BLOCK_MACRO_BEGIN { \ + if(U16_IS_TRAIL((s)[i]) && (i)>(start) && U16_IS_LEAD((s)[(i)-1])) { \ + --(i); \ + } \ +} UPRV_BLOCK_MACRO_END + +/* definitions with backward iteration -------------------------------------- */ + +/** + * Move the string offset from one code point boundary to the previous one + * and get the code point between them. + * (Pre-decrementing backward iteration.) + * "Unsafe" macro, assumes well-formed UTF-16. + * + * The input offset may be the same as the string length. + * If the offset is behind a trail surrogate unit + * for a supplementary code point, then the macro will read + * the preceding lead surrogate as well. + * If the offset is behind a lead surrogate, then that itself + * will be returned as the code point. + * The result is undefined if the offset is behind a single, unpaired trail surrogate. + * + * @param s const UChar * string + * @param i string offset + * @param c output UChar32 variable + * @see U16_PREV + * @stable ICU 2.4 + */ +#define U16_PREV_UNSAFE(s, i, c) UPRV_BLOCK_MACRO_BEGIN { \ + (c)=(s)[--(i)]; \ + if(U16_IS_TRAIL(c)) { \ + (c)=U16_GET_SUPPLEMENTARY((s)[--(i)], (c)); \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Move the string offset from one code point boundary to the previous one + * and get the code point between them. + * (Pre-decrementing backward iteration.) + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * The input offset may be the same as the string length. + * If the offset is behind a trail surrogate unit + * for a supplementary code point, then the macro will read + * the preceding lead surrogate as well. + * If the offset is behind a lead surrogate or behind a single, unpaired + * trail surrogate, then c is set to that unpaired surrogate. + * + * @param s const UChar * string + * @param start starting string offset (usually 0) + * @param i string offset, must be start(start) && U16_IS_LEAD(__c2=(s)[(i)-1])) { \ + --(i); \ + (c)=U16_GET_SUPPLEMENTARY(__c2, (c)); \ + } \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Move the string offset from one code point boundary to the previous one + * and get the code point between them. + * (Pre-decrementing backward iteration.) + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * The input offset may be the same as the string length. + * If the offset is behind a trail surrogate unit + * for a supplementary code point, then the macro will read + * the preceding lead surrogate as well. + * If the offset is behind a lead surrogate or behind a single, unpaired + * trail surrogate, then c is set to U+FFFD. + * + * @param s const UChar * string + * @param start starting string offset (usually 0) + * @param i string offset, must be start(start) && U16_IS_LEAD(__c2=(s)[(i)-1])) { \ + --(i); \ + (c)=U16_GET_SUPPLEMENTARY(__c2, (c)); \ + } else { \ + (c)=0xfffd; \ + } \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Move the string offset from one code point boundary to the previous one. + * (Pre-decrementing backward iteration.) + * The input offset may be the same as the string length. + * "Unsafe" macro, assumes well-formed UTF-16. + * + * @param s const UChar * string + * @param i string offset + * @see U16_BACK_1 + * @stable ICU 2.4 + */ +#define U16_BACK_1_UNSAFE(s, i) UPRV_BLOCK_MACRO_BEGIN { \ + if(U16_IS_TRAIL((s)[--(i)])) { \ + --(i); \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Move the string offset from one code point boundary to the previous one. + * (Pre-decrementing backward iteration.) + * The input offset may be the same as the string length. + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * @param s const UChar * string + * @param start starting string offset (usually 0) + * @param i string offset, must be start(start) && U16_IS_LEAD((s)[(i)-1])) { \ + --(i); \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Move the string offset from one code point boundary to the n-th one before it, + * i.e., move backward by n code points. + * (Pre-decrementing backward iteration.) + * The input offset may be the same as the string length. + * "Unsafe" macro, assumes well-formed UTF-16. + * + * @param s const UChar * string + * @param i string offset + * @param n number of code points to skip + * @see U16_BACK_N + * @stable ICU 2.4 + */ +#define U16_BACK_N_UNSAFE(s, i, n) UPRV_BLOCK_MACRO_BEGIN { \ + int32_t __N=(n); \ + while(__N>0) { \ + U16_BACK_1_UNSAFE(s, i); \ + --__N; \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Move the string offset from one code point boundary to the n-th one before it, + * i.e., move backward by n code points. + * (Pre-decrementing backward iteration.) + * The input offset may be the same as the string length. + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * @param s const UChar * string + * @param start start of string + * @param i string offset, must be start0 && (i)>(start)) { \ + U16_BACK_1(s, start, i); \ + --__N; \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Adjust a random-access offset to a code point boundary after a code point. + * If the offset is behind the lead surrogate of a surrogate pair, + * then the offset is incremented. + * Otherwise, it is not modified. + * The input offset may be the same as the string length. + * "Unsafe" macro, assumes well-formed UTF-16. + * + * @param s const UChar * string + * @param i string offset + * @see U16_SET_CP_LIMIT + * @stable ICU 2.4 + */ +#define U16_SET_CP_LIMIT_UNSAFE(s, i) UPRV_BLOCK_MACRO_BEGIN { \ + if(U16_IS_LEAD((s)[(i)-1])) { \ + ++(i); \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Adjust a random-access offset to a code point boundary after a code point. + * If the offset is behind the lead surrogate of a surrogate pair, + * then the offset is incremented. + * Otherwise, it is not modified. + * The input offset may be the same as the string length. + * "Safe" macro, handles unpaired surrogates and checks for string boundaries. + * + * The length can be negative for a NUL-terminated string. + * + * @param s const UChar * string + * @param start int32_t starting string offset (usually 0) + * @param i int32_t string offset, start<=i<=length + * @param length int32_t string length + * @see U16_SET_CP_LIMIT_UNSAFE + * @stable ICU 2.4 + */ +#define U16_SET_CP_LIMIT(s, start, i, length) UPRV_BLOCK_MACRO_BEGIN { \ + if((start)<(i) && ((i)<(length) || (length)<0) && U16_IS_LEAD((s)[(i)-1]) && U16_IS_TRAIL((s)[i])) { \ + ++(i); \ + } \ +} UPRV_BLOCK_MACRO_END + +#endif diff --git a/parser/nnsrc/unicode/utf8.h b/parser/nnsrc/unicode/utf8.h new file mode 100644 index 00000000..bb001303 --- /dev/null +++ b/parser/nnsrc/unicode/utf8.h @@ -0,0 +1,881 @@ +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +******************************************************************************* +* +* Copyright (C) 1999-2015, International Business Machines +* Corporation and others. All Rights Reserved. +* +******************************************************************************* +* file name: utf8.h +* encoding: UTF-8 +* tab size: 8 (not used) +* indentation:4 +* +* created on: 1999sep13 +* created by: Markus W. Scherer +*/ + +/** + * \file + * \brief C API: 8-bit Unicode handling macros + * + * This file defines macros to deal with 8-bit Unicode (UTF-8) code units (bytes) and strings. + * + * For more information see utf.h and the ICU User Guide Strings chapter + * (http://userguide.icu-project.org/strings). + * + * Usage: + * ICU coding guidelines for if() statements should be followed when using these macros. + * Compound statements (curly braces {}) must be used for if-else-while... + * bodies and all macro statements should be terminated with semicolon. + */ + +#ifndef __UTF8_H__ +#define __UTF8_H__ + +#include "unicode/umachine.h" +#ifndef __UTF_H__ +# include "unicode/utf.h" +#endif + +/* internal definitions ----------------------------------------------------- */ + +/** + * Counts the trail bytes for a UTF-8 lead byte. + * Returns 0 for 0..0xc1 as well as for 0xf5..0xff. + * leadByte might be evaluated multiple times. + * + * This is internal since it is not meant to be called directly by external clients; + * however it is called by public macros in this file and thus must remain stable. + * + * @param leadByte The first byte of a UTF-8 sequence. Must be 0..0xff. + * @internal + */ +#define U8_COUNT_TRAIL_BYTES(leadByte) \ + (U8_IS_LEAD(leadByte) ? \ + ((uint8_t)(leadByte)>=0xe0)+((uint8_t)(leadByte)>=0xf0)+1 : 0) + +/** + * Counts the trail bytes for a UTF-8 lead byte of a valid UTF-8 sequence. + * Returns 0 for 0..0xc1. Undefined for 0xf5..0xff. + * leadByte might be evaluated multiple times. + * + * This is internal since it is not meant to be called directly by external clients; + * however it is called by public macros in this file and thus must remain stable. + * + * @param leadByte The first byte of a UTF-8 sequence. Must be 0..0xff. + * @internal + */ +#define U8_COUNT_TRAIL_BYTES_UNSAFE(leadByte) \ + (((uint8_t)(leadByte)>=0xc2)+((uint8_t)(leadByte)>=0xe0)+((uint8_t)(leadByte)>=0xf0)) + +/** + * Mask a UTF-8 lead byte, leave only the lower bits that form part of the code point value. + * + * This is internal since it is not meant to be called directly by external clients; + * however it is called by public macros in this file and thus must remain stable. + * @internal + */ +#define U8_MASK_LEAD_BYTE(leadByte, countTrailBytes) ((leadByte)&=(1<<(6-(countTrailBytes)))-1) + +/** + * Internal bit vector for 3-byte UTF-8 validity check, for use in U8_IS_VALID_LEAD3_AND_T1. + * Each bit indicates whether one lead byte + first trail byte pair starts a valid sequence. + * Lead byte E0..EF bits 3..0 are used as byte index, + * first trail byte bits 7..5 are used as bit index into that byte. + * @see U8_IS_VALID_LEAD3_AND_T1 + * @internal + */ +#define U8_LEAD3_T1_BITS "\x20\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x10\x30\x30" + +/** + * Internal 3-byte UTF-8 validity check. + * Non-zero if lead byte E0..EF and first trail byte 00..FF start a valid sequence. + * @internal + */ +#define U8_IS_VALID_LEAD3_AND_T1(lead, t1) (U8_LEAD3_T1_BITS[(lead)&0xf]&(1<<((uint8_t)(t1)>>5))) + +/** + * Internal bit vector for 4-byte UTF-8 validity check, for use in U8_IS_VALID_LEAD4_AND_T1. + * Each bit indicates whether one lead byte + first trail byte pair starts a valid sequence. + * First trail byte bits 7..4 are used as byte index, + * lead byte F0..F4 bits 2..0 are used as bit index into that byte. + * @see U8_IS_VALID_LEAD4_AND_T1 + * @internal + */ +#define U8_LEAD4_T1_BITS "\x00\x00\x00\x00\x00\x00\x00\x00\x1E\x0F\x0F\x0F\x00\x00\x00\x00" + +/** + * Internal 4-byte UTF-8 validity check. + * Non-zero if lead byte F0..F4 and first trail byte 00..FF start a valid sequence. + * @internal + */ +#define U8_IS_VALID_LEAD4_AND_T1(lead, t1) (U8_LEAD4_T1_BITS[(uint8_t)(t1)>>4]&(1<<((lead)&7))) + +/** + * Function for handling "next code point" with error-checking. + * + * This is internal since it is not meant to be called directly by external clients; + * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this + * file and thus must remain stable, and should not be hidden when other internal + * functions are hidden (otherwise public macros would fail to compile). + * @internal + */ +U_STABLE UChar32 U_EXPORT2 +utf8_nextCharSafeBody(const uint8_t *s, int32_t *pi, int32_t length, UChar32 c, UBool strict); + +/** + * Function for handling "append code point" with error-checking. + * + * This is internal since it is not meant to be called directly by external clients; + * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this + * file and thus must remain stable, and should not be hidden when other internal + * functions are hidden (otherwise public macros would fail to compile). + * @internal + */ +U_STABLE int32_t U_EXPORT2 +utf8_appendCharSafeBody(uint8_t *s, int32_t i, int32_t length, UChar32 c, UBool *pIsError); + +/** + * Function for handling "previous code point" with error-checking. + * + * This is internal since it is not meant to be called directly by external clients; + * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this + * file and thus must remain stable, and should not be hidden when other internal + * functions are hidden (otherwise public macros would fail to compile). + * @internal + */ +U_STABLE UChar32 U_EXPORT2 +utf8_prevCharSafeBody(const uint8_t *s, int32_t start, int32_t *pi, UChar32 c, UBool strict); + +/** + * Function for handling "skip backward one code point" with error-checking. + * + * This is internal since it is not meant to be called directly by external clients; + * however it is U_STABLE (not U_INTERNAL) since it is called by public macros in this + * file and thus must remain stable, and should not be hidden when other internal + * functions are hidden (otherwise public macros would fail to compile). + * @internal + */ +U_STABLE int32_t U_EXPORT2 +utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i); + +/* single-code point definitions -------------------------------------------- */ + +/** + * Does this code unit (byte) encode a code point by itself (US-ASCII 0..0x7f)? + * @param c 8-bit code unit (byte) + * @return TRUE or FALSE + * @stable ICU 2.4 + */ +#define U8_IS_SINGLE(c) (((c)&0x80)==0) + +/** + * Is this code unit (byte) a UTF-8 lead byte? (0xC2..0xF4) + * @param c 8-bit code unit (byte) + * @return TRUE or FALSE + * @stable ICU 2.4 + */ +#define U8_IS_LEAD(c) ((uint8_t)((c)-0xc2)<=0x32) +// 0x32=0xf4-0xc2 + +/** + * Is this code unit (byte) a UTF-8 trail byte? (0x80..0xBF) + * @param c 8-bit code unit (byte) + * @return TRUE or FALSE + * @stable ICU 2.4 + */ +#define U8_IS_TRAIL(c) ((int8_t)(c)<-0x40) + +/** + * How many code units (bytes) are used for the UTF-8 encoding + * of this Unicode code point? + * @param c 32-bit code point + * @return 1..4, or 0 if c is a surrogate or not a Unicode code point + * @stable ICU 2.4 + */ +#define U8_LENGTH(c) \ + ((uint32_t)(c)<=0x7f ? 1 : \ + ((uint32_t)(c)<=0x7ff ? 2 : \ + ((uint32_t)(c)<=0xd7ff ? 3 : \ + ((uint32_t)(c)<=0xdfff || (uint32_t)(c)>0x10ffff ? 0 : \ + ((uint32_t)(c)<=0xffff ? 3 : 4)\ + ) \ + ) \ + ) \ + ) + +/** + * The maximum number of UTF-8 code units (bytes) per Unicode code point (U+0000..U+10ffff). + * @return 4 + * @stable ICU 2.4 + */ +#define U8_MAX_LENGTH 4 + +/** + * Get a code point from a string at a random-access offset, + * without changing the offset. + * The offset may point to either the lead byte or one of the trail bytes + * for a code point, in which case the macro will read all of the bytes + * for the code point. + * The result is undefined if the offset points to an illegal UTF-8 + * byte sequence. + * Iteration through a string is more efficient with U8_NEXT_UNSAFE or U8_NEXT. + * + * @param s const uint8_t * string + * @param i string offset + * @param c output UChar32 variable + * @see U8_GET + * @stable ICU 2.4 + */ +#define U8_GET_UNSAFE(s, i, c) UPRV_BLOCK_MACRO_BEGIN { \ + int32_t _u8_get_unsafe_index=(int32_t)(i); \ + U8_SET_CP_START_UNSAFE(s, _u8_get_unsafe_index); \ + U8_NEXT_UNSAFE(s, _u8_get_unsafe_index, c); \ +} UPRV_BLOCK_MACRO_END + +/** + * Get a code point from a string at a random-access offset, + * without changing the offset. + * The offset may point to either the lead byte or one of the trail bytes + * for a code point, in which case the macro will read all of the bytes + * for the code point. + * + * The length can be negative for a NUL-terminated string. + * + * If the offset points to an illegal UTF-8 byte sequence, then + * c is set to a negative value. + * Iteration through a string is more efficient with U8_NEXT_UNSAFE or U8_NEXT. + * + * @param s const uint8_t * string + * @param start int32_t starting string offset + * @param i int32_t string offset, must be start<=i=0xe0 ? \ + ((c)<0xf0 ? /* U+0800..U+FFFF except surrogates */ \ + U8_LEAD3_T1_BITS[(c)&=0xf]&(1<<((__t=(s)[i])>>5)) && \ + (__t&=0x3f, 1) \ + : /* U+10000..U+10FFFF */ \ + ((c)-=0xf0)<=4 && \ + U8_LEAD4_T1_BITS[(__t=(s)[i])>>4]&(1<<(c)) && \ + ((c)=((c)<<6)|(__t&0x3f), ++(i)!=(length)) && \ + (__t=(s)[i]-0x80)<=0x3f) && \ + /* valid second-to-last trail byte */ \ + ((c)=((c)<<6)|__t, ++(i)!=(length)) \ + : /* U+0080..U+07FF */ \ + (c)>=0xc2 && ((c)&=0x1f, 1)) && \ + /* last trail byte */ \ + (__t=(s)[i]-0x80)<=0x3f && \ + ((c)=((c)<<6)|__t, ++(i), 1)) { \ + } else { \ + (c)=(sub); /* ill-formed*/ \ + } \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Append a code point to a string, overwriting 1 to 4 bytes. + * The offset points to the current end of the string contents + * and is advanced (post-increment). + * "Unsafe" macro, assumes a valid code point and sufficient space in the string. + * Otherwise, the result is undefined. + * + * @param s const uint8_t * string buffer + * @param i string offset + * @param c code point to append + * @see U8_APPEND + * @stable ICU 2.4 + */ +#define U8_APPEND_UNSAFE(s, i, c) UPRV_BLOCK_MACRO_BEGIN { \ + uint32_t __uc=(c); \ + if(__uc<=0x7f) { \ + (s)[(i)++]=(uint8_t)__uc; \ + } else { \ + if(__uc<=0x7ff) { \ + (s)[(i)++]=(uint8_t)((__uc>>6)|0xc0); \ + } else { \ + if(__uc<=0xffff) { \ + (s)[(i)++]=(uint8_t)((__uc>>12)|0xe0); \ + } else { \ + (s)[(i)++]=(uint8_t)((__uc>>18)|0xf0); \ + (s)[(i)++]=(uint8_t)(((__uc>>12)&0x3f)|0x80); \ + } \ + (s)[(i)++]=(uint8_t)(((__uc>>6)&0x3f)|0x80); \ + } \ + (s)[(i)++]=(uint8_t)((__uc&0x3f)|0x80); \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Append a code point to a string, overwriting 1 to 4 bytes. + * The offset points to the current end of the string contents + * and is advanced (post-increment). + * "Safe" macro, checks for a valid code point. + * If a non-ASCII code point is written, checks for sufficient space in the string. + * If the code point is not valid or trail bytes do not fit, + * then isError is set to TRUE. + * + * @param s const uint8_t * string buffer + * @param i int32_t string offset, must be i>6)|0xc0); \ + (s)[(i)++]=(uint8_t)((__uc&0x3f)|0x80); \ + } else if((__uc<=0xd7ff || (0xe000<=__uc && __uc<=0xffff)) && (i)+2<(capacity)) { \ + (s)[(i)++]=(uint8_t)((__uc>>12)|0xe0); \ + (s)[(i)++]=(uint8_t)(((__uc>>6)&0x3f)|0x80); \ + (s)[(i)++]=(uint8_t)((__uc&0x3f)|0x80); \ + } else if(0xffff<__uc && __uc<=0x10ffff && (i)+3<(capacity)) { \ + (s)[(i)++]=(uint8_t)((__uc>>18)|0xf0); \ + (s)[(i)++]=(uint8_t)(((__uc>>12)&0x3f)|0x80); \ + (s)[(i)++]=(uint8_t)(((__uc>>6)&0x3f)|0x80); \ + (s)[(i)++]=(uint8_t)((__uc&0x3f)|0x80); \ + } else { \ + (isError)=TRUE; \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Advance the string offset from one code point boundary to the next. + * (Post-incrementing iteration.) + * "Unsafe" macro, assumes well-formed UTF-8. + * + * @param s const uint8_t * string + * @param i string offset + * @see U8_FWD_1 + * @stable ICU 2.4 + */ +#define U8_FWD_1_UNSAFE(s, i) UPRV_BLOCK_MACRO_BEGIN { \ + (i)+=1+U8_COUNT_TRAIL_BYTES_UNSAFE((s)[i]); \ +} UPRV_BLOCK_MACRO_END + +/** + * Advance the string offset from one code point boundary to the next. + * (Post-incrementing iteration.) + * "Safe" macro, checks for illegal sequences and for string boundaries. + * + * The length can be negative for a NUL-terminated string. + * + * @param s const uint8_t * string + * @param i int32_t string offset, must be i=0xf0 */ { \ + if(U8_IS_VALID_LEAD4_AND_T1(__b, __t1) && \ + ++(i)!=(length) && U8_IS_TRAIL((s)[i]) && \ + ++(i)!=(length) && U8_IS_TRAIL((s)[i])) { \ + ++(i); \ + } \ + } \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Advance the string offset from one code point boundary to the n-th next one, + * i.e., move forward by n code points. + * (Post-incrementing iteration.) + * "Unsafe" macro, assumes well-formed UTF-8. + * + * @param s const uint8_t * string + * @param i string offset + * @param n number of code points to skip + * @see U8_FWD_N + * @stable ICU 2.4 + */ +#define U8_FWD_N_UNSAFE(s, i, n) UPRV_BLOCK_MACRO_BEGIN { \ + int32_t __N=(n); \ + while(__N>0) { \ + U8_FWD_1_UNSAFE(s, i); \ + --__N; \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Advance the string offset from one code point boundary to the n-th next one, + * i.e., move forward by n code points. + * (Post-incrementing iteration.) + * "Safe" macro, checks for illegal sequences and for string boundaries. + * + * The length can be negative for a NUL-terminated string. + * + * @param s const uint8_t * string + * @param i int32_t string offset, must be i0 && ((i)<(length) || ((length)<0 && (s)[i]!=0))) { \ + U8_FWD_1(s, i, length); \ + --__N; \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Adjust a random-access offset to a code point boundary + * at the start of a code point. + * If the offset points to a UTF-8 trail byte, + * then the offset is moved backward to the corresponding lead byte. + * Otherwise, it is not modified. + * "Unsafe" macro, assumes well-formed UTF-8. + * + * @param s const uint8_t * string + * @param i string offset + * @see U8_SET_CP_START + * @stable ICU 2.4 + */ +#define U8_SET_CP_START_UNSAFE(s, i) UPRV_BLOCK_MACRO_BEGIN { \ + while(U8_IS_TRAIL((s)[i])) { --(i); } \ +} UPRV_BLOCK_MACRO_END + +/** + * Adjust a random-access offset to a code point boundary + * at the start of a code point. + * If the offset points to a UTF-8 trail byte, + * then the offset is moved backward to the corresponding lead byte. + * Otherwise, it is not modified. + * + * "Safe" macro, checks for illegal sequences and for string boundaries. + * Unlike U8_TRUNCATE_IF_INCOMPLETE(), this macro always reads s[i]. + * + * @param s const uint8_t * string + * @param start int32_t starting string offset (usually 0) + * @param i int32_t string offset, must be start<=i + * @see U8_SET_CP_START_UNSAFE + * @see U8_TRUNCATE_IF_INCOMPLETE + * @stable ICU 2.4 + */ +#define U8_SET_CP_START(s, start, i) UPRV_BLOCK_MACRO_BEGIN { \ + if(U8_IS_TRAIL((s)[(i)])) { \ + (i)=utf8_back1SafeBody(s, start, (i)); \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * If the string ends with a UTF-8 byte sequence that is valid so far + * but incomplete, then reduce the length of the string to end before + * the lead byte of that incomplete sequence. + * For example, if the string ends with E1 80, the length is reduced by 2. + * + * In all other cases (the string ends with a complete sequence, or it is not + * possible for any further trail byte to extend the trailing sequence) + * the length remains unchanged. + * + * Useful for processing text split across multiple buffers + * (save the incomplete sequence for later) + * and for optimizing iteration + * (check for string length only once per character). + * + * "Safe" macro, checks for illegal sequences and for string boundaries. + * Unlike U8_SET_CP_START(), this macro never reads s[length]. + * + * (In UTF-16, simply check for U16_IS_LEAD(last code unit).) + * + * @param s const uint8_t * string + * @param start int32_t starting string offset (usually 0) + * @param length int32_t string length (usually start<=length) + * @see U8_SET_CP_START + * @stable ICU 61 + */ +#define U8_TRUNCATE_IF_INCOMPLETE(s, start, length) UPRV_BLOCK_MACRO_BEGIN { \ + if((length)>(start)) { \ + uint8_t __b1=s[(length)-1]; \ + if(U8_IS_SINGLE(__b1)) { \ + /* common ASCII character */ \ + } else if(U8_IS_LEAD(__b1)) { \ + --(length); \ + } else if(U8_IS_TRAIL(__b1) && ((length)-2)>=(start)) { \ + uint8_t __b2=s[(length)-2]; \ + if(0xe0<=__b2 && __b2<=0xf4) { \ + if(__b2<0xf0 ? U8_IS_VALID_LEAD3_AND_T1(__b2, __b1) : \ + U8_IS_VALID_LEAD4_AND_T1(__b2, __b1)) { \ + (length)-=2; \ + } \ + } else if(U8_IS_TRAIL(__b2) && ((length)-3)>=(start)) { \ + uint8_t __b3=s[(length)-3]; \ + if(0xf0<=__b3 && __b3<=0xf4 && U8_IS_VALID_LEAD4_AND_T1(__b3, __b2)) { \ + (length)-=3; \ + } \ + } \ + } \ + } \ +} UPRV_BLOCK_MACRO_END + +/* definitions with backward iteration -------------------------------------- */ + +/** + * Move the string offset from one code point boundary to the previous one + * and get the code point between them. + * (Pre-decrementing backward iteration.) + * "Unsafe" macro, assumes well-formed UTF-8. + * + * The input offset may be the same as the string length. + * If the offset is behind a multi-byte sequence, then the macro will read + * the whole sequence. + * If the offset is behind a lead byte, then that itself + * will be returned as the code point. + * The result is undefined if the offset is behind an illegal UTF-8 sequence. + * + * @param s const uint8_t * string + * @param i string offset + * @param c output UChar32 variable + * @see U8_PREV + * @stable ICU 2.4 + */ +#define U8_PREV_UNSAFE(s, i, c) UPRV_BLOCK_MACRO_BEGIN { \ + (c)=(uint8_t)(s)[--(i)]; \ + if(U8_IS_TRAIL(c)) { \ + uint8_t __b, __count=1, __shift=6; \ +\ + /* c is a trail byte */ \ + (c)&=0x3f; \ + for(;;) { \ + __b=(s)[--(i)]; \ + if(__b>=0xc0) { \ + U8_MASK_LEAD_BYTE(__b, __count); \ + (c)|=(UChar32)__b<<__shift; \ + break; \ + } else { \ + (c)|=(UChar32)(__b&0x3f)<<__shift; \ + ++__count; \ + __shift+=6; \ + } \ + } \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Move the string offset from one code point boundary to the previous one + * and get the code point between them. + * (Pre-decrementing backward iteration.) + * "Safe" macro, checks for illegal sequences and for string boundaries. + * + * The input offset may be the same as the string length. + * If the offset is behind a multi-byte sequence, then the macro will read + * the whole sequence. + * If the offset is behind a lead byte, then that itself + * will be returned as the code point. + * If the offset is behind an illegal UTF-8 sequence, then c is set to a negative value. + * + * @param s const uint8_t * string + * @param start int32_t starting string offset (usually 0) + * @param i int32_t string offset, must be start0) { \ + U8_BACK_1_UNSAFE(s, i); \ + --__N; \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Move the string offset from one code point boundary to the n-th one before it, + * i.e., move backward by n code points. + * (Pre-decrementing backward iteration.) + * The input offset may be the same as the string length. + * "Safe" macro, checks for illegal sequences and for string boundaries. + * + * @param s const uint8_t * string + * @param start int32_t index of the start of the string + * @param i int32_t string offset, must be start0 && (i)>(start)) { \ + U8_BACK_1(s, start, i); \ + --__N; \ + } \ +} UPRV_BLOCK_MACRO_END + +/** + * Adjust a random-access offset to a code point boundary after a code point. + * If the offset is behind a partial multi-byte sequence, + * then the offset is incremented to behind the whole sequence. + * Otherwise, it is not modified. + * The input offset may be the same as the string length. + * "Unsafe" macro, assumes well-formed UTF-8. + * + * @param s const uint8_t * string + * @param i string offset + * @see U8_SET_CP_LIMIT + * @stable ICU 2.4 + */ +#define U8_SET_CP_LIMIT_UNSAFE(s, i) UPRV_BLOCK_MACRO_BEGIN { \ + U8_BACK_1_UNSAFE(s, i); \ + U8_FWD_1_UNSAFE(s, i); \ +} UPRV_BLOCK_MACRO_END + +/** + * Adjust a random-access offset to a code point boundary after a code point. + * If the offset is behind a partial multi-byte sequence, + * then the offset is incremented to behind the whole sequence. + * Otherwise, it is not modified. + * The input offset may be the same as the string length. + * "Safe" macro, checks for illegal sequences and for string boundaries. + * + * The length can be negative for a NUL-terminated string. + * + * @param s const uint8_t * string + * @param start int32_t starting string offset (usually 0) + * @param i int32_t string offset, must be start<=i<=length + * @param length int32_t string length + * @see U8_SET_CP_LIMIT_UNSAFE + * @stable ICU 2.4 + */ +#define U8_SET_CP_LIMIT(s, start, i, length) UPRV_BLOCK_MACRO_BEGIN { \ + if((start)<(i) && ((i)<(length) || (length)<0)) { \ + U8_BACK_1(s, start, i); \ + U8_FWD_1(s, i, length); \ + } \ +} UPRV_BLOCK_MACRO_END + +#endif diff --git a/parser/nnsrc/wasm/stdlib-symbols.txt b/parser/nnsrc/wasm/stdlib-symbols.txt new file mode 100644 index 00000000..1b6d789e --- /dev/null +++ b/parser/nnsrc/wasm/stdlib-symbols.txt @@ -0,0 +1,24 @@ +"calloc", +"free", +"iswalnum", +"iswalpha", +"iswblank", +"iswdigit", +"iswlower", +"iswspace", +"iswupper", +"iswxdigit", +"malloc", +"memchr", +"memcmp", +"memcpy", +"memmove", +"memset", +"realloc", +"strcmp", +"strlen", +"strncat", +"strncmp", +"strncpy", +"towlower", +"towupper", diff --git a/parser/nnsrc/wasm/stdlib.c b/parser/nnsrc/wasm/stdlib.c new file mode 100644 index 00000000..cfe2e4b3 --- /dev/null +++ b/parser/nnsrc/wasm/stdlib.c @@ -0,0 +1,109 @@ +// This file implements a very simple allocator for external scanners running +// in WASM. Allocation is just bumping a static pointer and growing the heap +// as needed, and freeing is mostly a noop. But in the special case of freeing +// the last-allocated pointer, we'll reuse that pointer again. + +#include +#include +#include +#include + +extern void tree_sitter_debug_message(const char *, size_t); + +#define PAGESIZE 0x10000 +#define MAX_HEAP_SIZE (4 * 1024 * 1024) + +typedef struct { + size_t size; + char data[0]; +} Region; + +static Region *heap_end = NULL; +static Region *heap_start = NULL; +static Region *next = NULL; + +// Get the region metadata for the given heap pointer. +static inline Region *region_for_ptr(void *ptr) { + return ((Region *)ptr) - 1; +} + +// Get the location of the next region after the given region, +// if the given region had the given size. +static inline Region *region_after(Region *self, size_t len) { + char *address = self->data + len; + char *aligned = (char *)((uintptr_t)(address + 3) & ~0x3); + return (Region *)aligned; +} + +static void *get_heap_end() { + return (void *)(__builtin_wasm_memory_size(0) * PAGESIZE); +} + +static int grow_heap(size_t size) { + size_t new_page_count = ((size - 1) / PAGESIZE) + 1; + return __builtin_wasm_memory_grow(0, new_page_count) != SIZE_MAX; +} + +// Clear out the heap, and move it to the given address. +void reset_heap(void *new_heap_start) { + heap_start = new_heap_start; + next = new_heap_start; + heap_end = get_heap_end(); +} + +void *malloc(size_t size) { + Region *region_end = region_after(next, size); + + if (region_end > heap_end) { + if ((char *)region_end - (char *)heap_start > MAX_HEAP_SIZE) { + return NULL; + } + if (!grow_heap(size)) return NULL; + heap_end = get_heap_end(); + } + + void *result = &next->data; + next->size = size; + next = region_end; + + return result; +} + +void free(void *ptr) { + if (ptr == NULL) return; + + Region *region = region_for_ptr(ptr); + Region *region_end = region_after(region, region->size); + + // When freeing the last allocated pointer, re-use that + // pointer for the next allocation. + if (region_end == next) { + next = region; + } +} + +void *calloc(size_t count, size_t size) { + void *result = malloc(count * size); + memset(result, 0, count * size); + return result; +} + +void *realloc(void *ptr, size_t new_size) { + if (ptr == NULL) { + return malloc(new_size); + } + + Region *region = region_for_ptr(ptr); + Region *region_end = region_after(region, region->size); + + // When reallocating the last allocated region, return + // the same pointer, and skip copying the data. + if (region_end == next) { + next = region; + return malloc(new_size); + } + + void *result = malloc(new_size); + memcpy(result, ®ion->data, region->size); + return result; +} diff --git a/parser/nnsrc/wasm/wasm-stdlib.h b/parser/nnsrc/wasm/wasm-stdlib.h new file mode 100644 index 00000000..c1f3bc08 --- /dev/null +++ b/parser/nnsrc/wasm/wasm-stdlib.h @@ -0,0 +1,1302 @@ +unsigned char STDLIB_WASM[] = { + 0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x1e, 0x06, 0x60, + 0x02, 0x7f, 0x7f, 0x01, 0x7f, 0x60, 0x01, 0x7f, 0x00, 0x60, 0x00, 0x00, + 0x60, 0x01, 0x7f, 0x01, 0x7f, 0x60, 0x00, 0x01, 0x7f, 0x60, 0x03, 0x7f, + 0x7f, 0x7f, 0x01, 0x7f, 0x02, 0x9e, 0x01, 0x05, 0x03, 0x65, 0x6e, 0x76, + 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x02, 0x00, 0x02, 0x03, 0x65, + 0x6e, 0x76, 0x19, 0x5f, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x01, 0x70, 0x00, 0x01, 0x16, 0x77, 0x61, 0x73, + 0x69, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x31, 0x08, 0x61, 0x72, 0x67, 0x73, + 0x5f, 0x67, 0x65, 0x74, 0x00, 0x00, 0x16, 0x77, 0x61, 0x73, 0x69, 0x5f, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x70, 0x72, 0x65, + 0x76, 0x69, 0x65, 0x77, 0x31, 0x0e, 0x61, 0x72, 0x67, 0x73, 0x5f, 0x73, + 0x69, 0x7a, 0x65, 0x73, 0x5f, 0x67, 0x65, 0x74, 0x00, 0x00, 0x16, 0x77, + 0x61, 0x73, 0x69, 0x5f, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x5f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x31, 0x09, 0x70, 0x72, + 0x6f, 0x63, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x00, 0x01, 0x03, 0x2a, 0x29, + 0x02, 0x00, 0x02, 0x02, 0x01, 0x03, 0x01, 0x00, 0x00, 0x01, 0x04, 0x00, + 0x00, 0x01, 0x02, 0x02, 0x05, 0x05, 0x03, 0x03, 0x05, 0x05, 0x00, 0x03, + 0x00, 0x03, 0x05, 0x03, 0x05, 0x03, 0x03, 0x03, 0x03, 0x05, 0x05, 0x05, + 0x03, 0x03, 0x00, 0x03, 0x03, 0x06, 0x0d, 0x02, 0x7f, 0x01, 0x41, 0x80, + 0x80, 0x04, 0x0b, 0x7f, 0x00, 0x41, 0x00, 0x0b, 0x07, 0xad, 0x02, 0x1c, + 0x11, 0x5f, 0x5f, 0x77, 0x61, 0x73, 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c, + 0x5f, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x00, 0x03, 0x0f, 0x5f, 0x5f, 0x73, + 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x03, 0x00, 0x06, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x00, 0x06, 0x0a, + 0x72, 0x65, 0x73, 0x65, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x70, 0x00, 0x07, + 0x06, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x08, 0x04, 0x66, 0x72, + 0x65, 0x65, 0x00, 0x09, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x00, + 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x73, 0x65, 0x74, 0x00, 0x14, 0x07, 0x72, + 0x65, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x00, 0x0b, 0x06, 0x6d, 0x65, 0x6d, + 0x63, 0x70, 0x79, 0x00, 0x13, 0x06, 0x73, 0x74, 0x72, 0x6c, 0x65, 0x6e, + 0x00, 0x15, 0x08, 0x69, 0x73, 0x77, 0x61, 0x6c, 0x6e, 0x75, 0x6d, 0x00, + 0x2b, 0x08, 0x69, 0x73, 0x77, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x00, 0x16, + 0x08, 0x69, 0x73, 0x77, 0x62, 0x6c, 0x61, 0x6e, 0x6b, 0x00, 0x22, 0x08, + 0x69, 0x73, 0x77, 0x64, 0x69, 0x67, 0x69, 0x74, 0x00, 0x23, 0x08, 0x69, + 0x73, 0x77, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x00, 0x20, 0x08, 0x69, 0x73, + 0x77, 0x73, 0x70, 0x61, 0x63, 0x65, 0x00, 0x2a, 0x08, 0x69, 0x73, 0x77, + 0x75, 0x70, 0x70, 0x65, 0x72, 0x00, 0x1e, 0x09, 0x69, 0x73, 0x77, 0x78, + 0x64, 0x69, 0x67, 0x69, 0x74, 0x00, 0x27, 0x08, 0x74, 0x6f, 0x77, 0x6c, + 0x6f, 0x77, 0x65, 0x72, 0x00, 0x1a, 0x08, 0x74, 0x6f, 0x77, 0x75, 0x70, + 0x70, 0x65, 0x72, 0x00, 0x1c, 0x06, 0x6d, 0x65, 0x6d, 0x63, 0x68, 0x72, + 0x00, 0x18, 0x06, 0x6d, 0x65, 0x6d, 0x63, 0x6d, 0x70, 0x00, 0x17, 0x07, + 0x6d, 0x65, 0x6d, 0x6d, 0x6f, 0x76, 0x65, 0x00, 0x1f, 0x06, 0x73, 0x74, + 0x72, 0x63, 0x6d, 0x70, 0x00, 0x19, 0x07, 0x73, 0x74, 0x72, 0x6e, 0x63, + 0x61, 0x74, 0x00, 0x24, 0x07, 0x73, 0x74, 0x72, 0x6e, 0x63, 0x6d, 0x70, + 0x00, 0x1d, 0x07, 0x73, 0x74, 0x72, 0x6e, 0x63, 0x70, 0x79, 0x00, 0x26, + 0x08, 0x01, 0x05, 0x0a, 0xe8, 0x2b, 0x29, 0x02, 0x00, 0x0b, 0x03, 0x00, + 0x00, 0x0b, 0x0d, 0x00, 0x41, 0xe8, 0xc2, 0x04, 0x41, 0x00, 0x41, 0x10, + 0xfc, 0x0b, 0x00, 0x0b, 0x52, 0x01, 0x01, 0x7f, 0x02, 0x40, 0x02, 0x40, + 0x23, 0x81, 0x80, 0x80, 0x80, 0x00, 0x41, 0xe8, 0xc2, 0x84, 0x80, 0x00, + 0x6a, 0x28, 0x02, 0x00, 0x0d, 0x00, 0x23, 0x81, 0x80, 0x80, 0x80, 0x00, + 0x41, 0xe8, 0xc2, 0x84, 0x80, 0x00, 0x6a, 0x41, 0x01, 0x36, 0x02, 0x00, + 0x10, 0x83, 0x80, 0x80, 0x80, 0x00, 0x10, 0x8d, 0x80, 0x80, 0x80, 0x00, + 0x21, 0x00, 0x10, 0x92, 0x80, 0x80, 0x80, 0x00, 0x20, 0x00, 0x0d, 0x01, + 0x0f, 0x0b, 0x00, 0x00, 0x0b, 0x20, 0x00, 0x10, 0x90, 0x80, 0x80, 0x80, + 0x00, 0x00, 0x0b, 0x37, 0x01, 0x01, 0x7f, 0x23, 0x81, 0x80, 0x80, 0x80, + 0x00, 0x22, 0x01, 0x41, 0xf0, 0xc2, 0x84, 0x80, 0x00, 0x6a, 0x20, 0x00, + 0x36, 0x02, 0x00, 0x20, 0x01, 0x41, 0xec, 0xc2, 0x84, 0x80, 0x00, 0x6a, + 0x20, 0x00, 0x36, 0x02, 0x00, 0x20, 0x01, 0x41, 0xf4, 0xc2, 0x84, 0x80, + 0x00, 0x6a, 0x3f, 0x00, 0x41, 0x10, 0x74, 0x36, 0x02, 0x00, 0x0b, 0xb4, + 0x01, 0x01, 0x03, 0x7f, 0x02, 0x40, 0x02, 0x40, 0x23, 0x81, 0x80, 0x80, + 0x80, 0x00, 0x22, 0x01, 0x41, 0xf4, 0xc2, 0x84, 0x80, 0x00, 0x6a, 0x28, + 0x02, 0x00, 0x20, 0x01, 0x41, 0xf0, 0xc2, 0x84, 0x80, 0x00, 0x6a, 0x28, + 0x02, 0x00, 0x22, 0x01, 0x20, 0x00, 0x6a, 0x41, 0x07, 0x6a, 0x41, 0x7c, + 0x71, 0x22, 0x02, 0x4f, 0x0d, 0x00, 0x41, 0x00, 0x21, 0x01, 0x20, 0x02, + 0x23, 0x81, 0x80, 0x80, 0x80, 0x00, 0x41, 0xec, 0xc2, 0x84, 0x80, 0x00, + 0x6a, 0x28, 0x02, 0x00, 0x6b, 0x41, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x0d, + 0x01, 0x20, 0x00, 0x41, 0x7f, 0x6a, 0x41, 0x10, 0x76, 0x41, 0x01, 0x6a, + 0x40, 0x00, 0x41, 0x7f, 0x46, 0x0d, 0x01, 0x3f, 0x00, 0x21, 0x01, 0x23, + 0x81, 0x80, 0x80, 0x80, 0x00, 0x22, 0x03, 0x41, 0xf4, 0xc2, 0x84, 0x80, + 0x00, 0x6a, 0x20, 0x01, 0x41, 0x10, 0x74, 0x36, 0x02, 0x00, 0x20, 0x03, + 0x41, 0xf0, 0xc2, 0x84, 0x80, 0x00, 0x6a, 0x28, 0x02, 0x00, 0x21, 0x01, + 0x0b, 0x20, 0x01, 0x20, 0x00, 0x36, 0x02, 0x00, 0x23, 0x81, 0x80, 0x80, + 0x80, 0x00, 0x41, 0xf0, 0xc2, 0x84, 0x80, 0x00, 0x6a, 0x20, 0x02, 0x36, + 0x02, 0x00, 0x20, 0x01, 0x41, 0x04, 0x6a, 0x21, 0x01, 0x0b, 0x20, 0x01, + 0x0b, 0x48, 0x01, 0x02, 0x7f, 0x02, 0x40, 0x20, 0x00, 0x45, 0x0d, 0x00, + 0x20, 0x00, 0x41, 0x7c, 0x6a, 0x22, 0x01, 0x28, 0x02, 0x00, 0x21, 0x02, + 0x23, 0x81, 0x80, 0x80, 0x80, 0x00, 0x41, 0xf0, 0xc2, 0x84, 0x80, 0x00, + 0x6a, 0x28, 0x02, 0x00, 0x20, 0x00, 0x20, 0x02, 0x6a, 0x41, 0x03, 0x6a, + 0x41, 0x7c, 0x71, 0x47, 0x0d, 0x00, 0x23, 0x81, 0x80, 0x80, 0x80, 0x00, + 0x41, 0xf0, 0xc2, 0x84, 0x80, 0x00, 0x6a, 0x20, 0x01, 0x36, 0x02, 0x00, + 0x0b, 0x0b, 0x19, 0x00, 0x20, 0x01, 0x20, 0x00, 0x6c, 0x22, 0x00, 0x10, + 0x88, 0x80, 0x80, 0x80, 0x00, 0x41, 0x00, 0x20, 0x00, 0x10, 0x94, 0x80, + 0x80, 0x80, 0x00, 0x0b, 0x6b, 0x01, 0x02, 0x7f, 0x02, 0x40, 0x20, 0x00, + 0x45, 0x0d, 0x00, 0x20, 0x00, 0x41, 0x7c, 0x6a, 0x22, 0x02, 0x28, 0x02, + 0x00, 0x21, 0x03, 0x02, 0x40, 0x23, 0x81, 0x80, 0x80, 0x80, 0x00, 0x41, + 0xf0, 0xc2, 0x84, 0x80, 0x00, 0x6a, 0x28, 0x02, 0x00, 0x20, 0x00, 0x20, + 0x03, 0x6a, 0x41, 0x03, 0x6a, 0x41, 0x7c, 0x71, 0x47, 0x0d, 0x00, 0x23, + 0x81, 0x80, 0x80, 0x80, 0x00, 0x41, 0xf0, 0xc2, 0x84, 0x80, 0x00, 0x6a, + 0x20, 0x02, 0x36, 0x02, 0x00, 0x0c, 0x01, 0x0b, 0x20, 0x01, 0x10, 0x88, + 0x80, 0x80, 0x80, 0x00, 0x20, 0x00, 0x20, 0x02, 0x28, 0x02, 0x00, 0x10, + 0x93, 0x80, 0x80, 0x80, 0x00, 0x0f, 0x0b, 0x20, 0x01, 0x10, 0x88, 0x80, + 0x80, 0x80, 0x00, 0x0b, 0x0b, 0x00, 0x20, 0x00, 0x10, 0x90, 0x80, 0x80, + 0x80, 0x00, 0x00, 0x0b, 0xd5, 0x01, 0x01, 0x03, 0x7f, 0x23, 0x80, 0x80, + 0x80, 0x80, 0x00, 0x41, 0x10, 0x6b, 0x22, 0x00, 0x24, 0x80, 0x80, 0x80, + 0x80, 0x00, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, + 0x20, 0x00, 0x41, 0x08, 0x6a, 0x20, 0x00, 0x41, 0x0c, 0x6a, 0x10, 0x8f, + 0x80, 0x80, 0x80, 0x00, 0x0d, 0x00, 0x20, 0x00, 0x28, 0x02, 0x08, 0x41, + 0x01, 0x6a, 0x22, 0x01, 0x45, 0x0d, 0x01, 0x20, 0x00, 0x28, 0x02, 0x0c, + 0x10, 0x88, 0x80, 0x80, 0x80, 0x00, 0x22, 0x02, 0x45, 0x0d, 0x02, 0x20, + 0x01, 0x41, 0x04, 0x10, 0x8a, 0x80, 0x80, 0x80, 0x00, 0x22, 0x01, 0x45, + 0x0d, 0x03, 0x20, 0x01, 0x20, 0x02, 0x10, 0x8e, 0x80, 0x80, 0x80, 0x00, + 0x0d, 0x04, 0x20, 0x00, 0x28, 0x02, 0x08, 0x20, 0x01, 0x10, 0x84, 0x80, + 0x80, 0x80, 0x00, 0x21, 0x01, 0x20, 0x00, 0x41, 0x10, 0x6a, 0x24, 0x80, + 0x80, 0x80, 0x80, 0x00, 0x20, 0x01, 0x0f, 0x0b, 0x41, 0xc7, 0x00, 0x10, + 0x8c, 0x80, 0x80, 0x80, 0x00, 0x00, 0x0b, 0x41, 0xc6, 0x00, 0x10, 0x8c, + 0x80, 0x80, 0x80, 0x00, 0x00, 0x0b, 0x41, 0xc6, 0x00, 0x10, 0x8c, 0x80, + 0x80, 0x80, 0x00, 0x00, 0x0b, 0x20, 0x02, 0x10, 0x89, 0x80, 0x80, 0x80, + 0x00, 0x41, 0xc6, 0x00, 0x10, 0x8c, 0x80, 0x80, 0x80, 0x00, 0x00, 0x0b, + 0x20, 0x02, 0x10, 0x89, 0x80, 0x80, 0x80, 0x00, 0x20, 0x01, 0x10, 0x89, + 0x80, 0x80, 0x80, 0x00, 0x41, 0xc7, 0x00, 0x10, 0x8c, 0x80, 0x80, 0x80, + 0x00, 0x00, 0x0b, 0x11, 0x00, 0x20, 0x00, 0x20, 0x01, 0x10, 0x80, 0x80, + 0x80, 0x80, 0x00, 0x41, 0xff, 0xff, 0x03, 0x71, 0x0b, 0x11, 0x00, 0x20, + 0x00, 0x20, 0x01, 0x10, 0x81, 0x80, 0x80, 0x80, 0x00, 0x41, 0xff, 0xff, + 0x03, 0x71, 0x0b, 0x0b, 0x00, 0x20, 0x00, 0x10, 0x82, 0x80, 0x80, 0x80, + 0x00, 0x00, 0x0b, 0x02, 0x00, 0x0b, 0x0e, 0x00, 0x10, 0x91, 0x80, 0x80, + 0x80, 0x00, 0x10, 0x91, 0x80, 0x80, 0x80, 0x00, 0x0b, 0xe6, 0x07, 0x01, + 0x04, 0x7f, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x02, 0x41, 0x20, + 0x4b, 0x0d, 0x00, 0x20, 0x01, 0x41, 0x03, 0x71, 0x45, 0x0d, 0x01, 0x20, + 0x02, 0x45, 0x0d, 0x01, 0x20, 0x00, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x3a, + 0x00, 0x00, 0x20, 0x02, 0x41, 0x7f, 0x6a, 0x21, 0x03, 0x20, 0x00, 0x41, + 0x01, 0x6a, 0x21, 0x04, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x22, 0x05, 0x41, + 0x03, 0x71, 0x45, 0x0d, 0x02, 0x20, 0x03, 0x45, 0x0d, 0x02, 0x20, 0x00, + 0x20, 0x01, 0x2d, 0x00, 0x01, 0x3a, 0x00, 0x01, 0x20, 0x02, 0x41, 0x7e, + 0x6a, 0x21, 0x03, 0x20, 0x00, 0x41, 0x02, 0x6a, 0x21, 0x04, 0x20, 0x01, + 0x41, 0x02, 0x6a, 0x22, 0x05, 0x41, 0x03, 0x71, 0x45, 0x0d, 0x02, 0x20, + 0x03, 0x45, 0x0d, 0x02, 0x20, 0x00, 0x20, 0x01, 0x2d, 0x00, 0x02, 0x3a, + 0x00, 0x02, 0x20, 0x02, 0x41, 0x7d, 0x6a, 0x21, 0x03, 0x20, 0x00, 0x41, + 0x03, 0x6a, 0x21, 0x04, 0x20, 0x01, 0x41, 0x03, 0x6a, 0x22, 0x05, 0x41, + 0x03, 0x71, 0x45, 0x0d, 0x02, 0x20, 0x03, 0x45, 0x0d, 0x02, 0x20, 0x00, + 0x20, 0x01, 0x2d, 0x00, 0x03, 0x3a, 0x00, 0x03, 0x20, 0x02, 0x41, 0x7c, + 0x6a, 0x21, 0x03, 0x20, 0x00, 0x41, 0x04, 0x6a, 0x21, 0x04, 0x20, 0x01, + 0x41, 0x04, 0x6a, 0x21, 0x05, 0x0c, 0x02, 0x0b, 0x20, 0x00, 0x20, 0x01, + 0x20, 0x02, 0xfc, 0x0a, 0x00, 0x00, 0x20, 0x00, 0x0f, 0x0b, 0x20, 0x02, + 0x21, 0x03, 0x20, 0x00, 0x21, 0x04, 0x20, 0x01, 0x21, 0x05, 0x0b, 0x02, + 0x40, 0x02, 0x40, 0x20, 0x04, 0x41, 0x03, 0x71, 0x22, 0x02, 0x0d, 0x00, + 0x02, 0x40, 0x02, 0x40, 0x20, 0x03, 0x41, 0x10, 0x4f, 0x0d, 0x00, 0x20, + 0x03, 0x21, 0x02, 0x0c, 0x01, 0x0b, 0x02, 0x40, 0x20, 0x03, 0x41, 0x70, + 0x6a, 0x22, 0x02, 0x41, 0x10, 0x71, 0x0d, 0x00, 0x20, 0x04, 0x20, 0x05, + 0x29, 0x02, 0x00, 0x37, 0x02, 0x00, 0x20, 0x04, 0x20, 0x05, 0x29, 0x02, + 0x08, 0x37, 0x02, 0x08, 0x20, 0x04, 0x41, 0x10, 0x6a, 0x21, 0x04, 0x20, + 0x05, 0x41, 0x10, 0x6a, 0x21, 0x05, 0x20, 0x02, 0x21, 0x03, 0x0b, 0x20, + 0x02, 0x41, 0x10, 0x49, 0x0d, 0x00, 0x20, 0x03, 0x21, 0x02, 0x03, 0x40, + 0x20, 0x04, 0x20, 0x05, 0x29, 0x02, 0x00, 0x37, 0x02, 0x00, 0x20, 0x04, + 0x20, 0x05, 0x29, 0x02, 0x08, 0x37, 0x02, 0x08, 0x20, 0x04, 0x20, 0x05, + 0x29, 0x02, 0x10, 0x37, 0x02, 0x10, 0x20, 0x04, 0x20, 0x05, 0x29, 0x02, + 0x18, 0x37, 0x02, 0x18, 0x20, 0x04, 0x41, 0x20, 0x6a, 0x21, 0x04, 0x20, + 0x05, 0x41, 0x20, 0x6a, 0x21, 0x05, 0x20, 0x02, 0x41, 0x60, 0x6a, 0x22, + 0x02, 0x41, 0x0f, 0x4b, 0x0d, 0x00, 0x0b, 0x0b, 0x02, 0x40, 0x20, 0x02, + 0x41, 0x08, 0x49, 0x0d, 0x00, 0x20, 0x04, 0x20, 0x05, 0x29, 0x02, 0x00, + 0x37, 0x02, 0x00, 0x20, 0x05, 0x41, 0x08, 0x6a, 0x21, 0x05, 0x20, 0x04, + 0x41, 0x08, 0x6a, 0x21, 0x04, 0x0b, 0x02, 0x40, 0x20, 0x02, 0x41, 0x04, + 0x71, 0x45, 0x0d, 0x00, 0x20, 0x04, 0x20, 0x05, 0x28, 0x02, 0x00, 0x36, + 0x02, 0x00, 0x20, 0x05, 0x41, 0x04, 0x6a, 0x21, 0x05, 0x20, 0x04, 0x41, + 0x04, 0x6a, 0x21, 0x04, 0x0b, 0x02, 0x40, 0x20, 0x02, 0x41, 0x02, 0x71, + 0x45, 0x0d, 0x00, 0x20, 0x04, 0x20, 0x05, 0x2f, 0x00, 0x00, 0x3b, 0x00, + 0x00, 0x20, 0x04, 0x41, 0x02, 0x6a, 0x21, 0x04, 0x20, 0x05, 0x41, 0x02, + 0x6a, 0x21, 0x05, 0x0b, 0x20, 0x02, 0x41, 0x01, 0x71, 0x45, 0x0d, 0x01, + 0x20, 0x04, 0x20, 0x05, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x00, + 0x0f, 0x0b, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, + 0x20, 0x03, 0x41, 0x20, 0x49, 0x0d, 0x00, 0x02, 0x40, 0x02, 0x40, 0x20, + 0x02, 0x41, 0x7f, 0x6a, 0x0e, 0x03, 0x03, 0x00, 0x01, 0x07, 0x0b, 0x20, + 0x04, 0x20, 0x05, 0x28, 0x02, 0x00, 0x3b, 0x00, 0x00, 0x20, 0x04, 0x20, + 0x05, 0x41, 0x02, 0x6a, 0x28, 0x01, 0x00, 0x36, 0x02, 0x02, 0x20, 0x04, + 0x20, 0x05, 0x41, 0x06, 0x6a, 0x29, 0x01, 0x00, 0x37, 0x02, 0x06, 0x20, + 0x04, 0x41, 0x12, 0x6a, 0x21, 0x02, 0x20, 0x05, 0x41, 0x12, 0x6a, 0x21, + 0x01, 0x41, 0x0e, 0x21, 0x06, 0x20, 0x05, 0x41, 0x0e, 0x6a, 0x28, 0x01, + 0x00, 0x21, 0x05, 0x41, 0x0e, 0x21, 0x03, 0x0c, 0x03, 0x0b, 0x20, 0x04, + 0x20, 0x05, 0x28, 0x02, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x04, 0x20, 0x05, + 0x41, 0x01, 0x6a, 0x28, 0x00, 0x00, 0x36, 0x02, 0x01, 0x20, 0x04, 0x20, + 0x05, 0x41, 0x05, 0x6a, 0x29, 0x00, 0x00, 0x37, 0x02, 0x05, 0x20, 0x04, + 0x41, 0x11, 0x6a, 0x21, 0x02, 0x20, 0x05, 0x41, 0x11, 0x6a, 0x21, 0x01, + 0x41, 0x0d, 0x21, 0x06, 0x20, 0x05, 0x41, 0x0d, 0x6a, 0x28, 0x00, 0x00, + 0x21, 0x05, 0x41, 0x0f, 0x21, 0x03, 0x0c, 0x02, 0x0b, 0x02, 0x40, 0x02, + 0x40, 0x20, 0x03, 0x41, 0x10, 0x4f, 0x0d, 0x00, 0x20, 0x04, 0x21, 0x02, + 0x20, 0x05, 0x21, 0x01, 0x0c, 0x01, 0x0b, 0x20, 0x04, 0x20, 0x05, 0x2d, + 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x04, 0x20, 0x05, 0x28, 0x00, 0x01, + 0x36, 0x00, 0x01, 0x20, 0x04, 0x20, 0x05, 0x29, 0x00, 0x05, 0x37, 0x00, + 0x05, 0x20, 0x04, 0x20, 0x05, 0x2f, 0x00, 0x0d, 0x3b, 0x00, 0x0d, 0x20, + 0x04, 0x20, 0x05, 0x2d, 0x00, 0x0f, 0x3a, 0x00, 0x0f, 0x20, 0x04, 0x41, + 0x10, 0x6a, 0x21, 0x02, 0x20, 0x05, 0x41, 0x10, 0x6a, 0x21, 0x01, 0x0b, + 0x20, 0x03, 0x41, 0x08, 0x71, 0x0d, 0x02, 0x0c, 0x03, 0x0b, 0x20, 0x04, + 0x20, 0x05, 0x28, 0x02, 0x00, 0x22, 0x02, 0x3a, 0x00, 0x00, 0x20, 0x04, + 0x20, 0x02, 0x41, 0x10, 0x76, 0x3a, 0x00, 0x02, 0x20, 0x04, 0x20, 0x02, + 0x41, 0x08, 0x76, 0x3a, 0x00, 0x01, 0x20, 0x04, 0x20, 0x05, 0x41, 0x03, + 0x6a, 0x28, 0x00, 0x00, 0x36, 0x02, 0x03, 0x20, 0x04, 0x20, 0x05, 0x41, + 0x07, 0x6a, 0x29, 0x00, 0x00, 0x37, 0x02, 0x07, 0x20, 0x04, 0x41, 0x13, + 0x6a, 0x21, 0x02, 0x20, 0x05, 0x41, 0x13, 0x6a, 0x21, 0x01, 0x41, 0x0f, + 0x21, 0x06, 0x20, 0x05, 0x41, 0x0f, 0x6a, 0x28, 0x00, 0x00, 0x21, 0x05, + 0x41, 0x0d, 0x21, 0x03, 0x0b, 0x20, 0x04, 0x20, 0x06, 0x6a, 0x20, 0x05, + 0x36, 0x02, 0x00, 0x0b, 0x20, 0x02, 0x20, 0x01, 0x29, 0x00, 0x00, 0x37, + 0x00, 0x00, 0x20, 0x02, 0x41, 0x08, 0x6a, 0x21, 0x02, 0x20, 0x01, 0x41, + 0x08, 0x6a, 0x21, 0x01, 0x0b, 0x02, 0x40, 0x20, 0x03, 0x41, 0x04, 0x71, + 0x45, 0x0d, 0x00, 0x20, 0x02, 0x20, 0x01, 0x28, 0x00, 0x00, 0x36, 0x00, + 0x00, 0x20, 0x02, 0x41, 0x04, 0x6a, 0x21, 0x02, 0x20, 0x01, 0x41, 0x04, + 0x6a, 0x21, 0x01, 0x0b, 0x02, 0x40, 0x20, 0x03, 0x41, 0x02, 0x71, 0x45, + 0x0d, 0x00, 0x20, 0x02, 0x20, 0x01, 0x2f, 0x00, 0x00, 0x3b, 0x00, 0x00, + 0x20, 0x02, 0x41, 0x02, 0x6a, 0x21, 0x02, 0x20, 0x01, 0x41, 0x02, 0x6a, + 0x21, 0x01, 0x0b, 0x20, 0x03, 0x41, 0x01, 0x71, 0x45, 0x0d, 0x00, 0x20, + 0x02, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x0b, 0x20, 0x00, + 0x0b, 0x88, 0x03, 0x02, 0x03, 0x7f, 0x01, 0x7e, 0x02, 0x40, 0x20, 0x02, + 0x41, 0x21, 0x49, 0x0d, 0x00, 0x20, 0x00, 0x20, 0x01, 0x20, 0x02, 0xfc, + 0x0b, 0x00, 0x20, 0x00, 0x0f, 0x0b, 0x02, 0x40, 0x20, 0x02, 0x45, 0x0d, + 0x00, 0x20, 0x00, 0x20, 0x01, 0x3a, 0x00, 0x00, 0x20, 0x02, 0x20, 0x00, + 0x6a, 0x22, 0x03, 0x41, 0x7f, 0x6a, 0x20, 0x01, 0x3a, 0x00, 0x00, 0x20, + 0x02, 0x41, 0x03, 0x49, 0x0d, 0x00, 0x20, 0x00, 0x20, 0x01, 0x3a, 0x00, + 0x02, 0x20, 0x00, 0x20, 0x01, 0x3a, 0x00, 0x01, 0x20, 0x03, 0x41, 0x7d, + 0x6a, 0x20, 0x01, 0x3a, 0x00, 0x00, 0x20, 0x03, 0x41, 0x7e, 0x6a, 0x20, + 0x01, 0x3a, 0x00, 0x00, 0x20, 0x02, 0x41, 0x07, 0x49, 0x0d, 0x00, 0x20, + 0x00, 0x20, 0x01, 0x3a, 0x00, 0x03, 0x20, 0x03, 0x41, 0x7c, 0x6a, 0x20, + 0x01, 0x3a, 0x00, 0x00, 0x20, 0x02, 0x41, 0x09, 0x49, 0x0d, 0x00, 0x20, + 0x00, 0x41, 0x00, 0x20, 0x00, 0x6b, 0x41, 0x03, 0x71, 0x22, 0x04, 0x6a, + 0x22, 0x05, 0x20, 0x01, 0x41, 0xff, 0x01, 0x71, 0x41, 0x81, 0x82, 0x84, + 0x08, 0x6c, 0x22, 0x03, 0x36, 0x02, 0x00, 0x20, 0x05, 0x20, 0x02, 0x20, + 0x04, 0x6b, 0x41, 0x7c, 0x71, 0x22, 0x01, 0x6a, 0x22, 0x02, 0x41, 0x7c, + 0x6a, 0x20, 0x03, 0x36, 0x02, 0x00, 0x20, 0x01, 0x41, 0x09, 0x49, 0x0d, + 0x00, 0x20, 0x05, 0x20, 0x03, 0x36, 0x02, 0x08, 0x20, 0x05, 0x20, 0x03, + 0x36, 0x02, 0x04, 0x20, 0x02, 0x41, 0x78, 0x6a, 0x20, 0x03, 0x36, 0x02, + 0x00, 0x20, 0x02, 0x41, 0x74, 0x6a, 0x20, 0x03, 0x36, 0x02, 0x00, 0x20, + 0x01, 0x41, 0x19, 0x49, 0x0d, 0x00, 0x20, 0x05, 0x20, 0x03, 0x36, 0x02, + 0x18, 0x20, 0x05, 0x20, 0x03, 0x36, 0x02, 0x14, 0x20, 0x05, 0x20, 0x03, + 0x36, 0x02, 0x10, 0x20, 0x05, 0x20, 0x03, 0x36, 0x02, 0x0c, 0x20, 0x02, + 0x41, 0x70, 0x6a, 0x20, 0x03, 0x36, 0x02, 0x00, 0x20, 0x02, 0x41, 0x6c, + 0x6a, 0x20, 0x03, 0x36, 0x02, 0x00, 0x20, 0x02, 0x41, 0x68, 0x6a, 0x20, + 0x03, 0x36, 0x02, 0x00, 0x20, 0x02, 0x41, 0x64, 0x6a, 0x20, 0x03, 0x36, + 0x02, 0x00, 0x20, 0x01, 0x20, 0x05, 0x41, 0x04, 0x71, 0x41, 0x18, 0x72, + 0x22, 0x02, 0x6b, 0x22, 0x01, 0x41, 0x20, 0x49, 0x0d, 0x00, 0x20, 0x03, + 0xad, 0x42, 0x81, 0x80, 0x80, 0x80, 0x10, 0x7e, 0x21, 0x06, 0x20, 0x05, + 0x20, 0x02, 0x6a, 0x21, 0x02, 0x03, 0x40, 0x20, 0x02, 0x20, 0x06, 0x37, + 0x03, 0x18, 0x20, 0x02, 0x20, 0x06, 0x37, 0x03, 0x10, 0x20, 0x02, 0x20, + 0x06, 0x37, 0x03, 0x08, 0x20, 0x02, 0x20, 0x06, 0x37, 0x03, 0x00, 0x20, + 0x02, 0x41, 0x20, 0x6a, 0x21, 0x02, 0x20, 0x01, 0x41, 0x60, 0x6a, 0x22, + 0x01, 0x41, 0x1f, 0x4b, 0x0d, 0x00, 0x0b, 0x0b, 0x20, 0x00, 0x0b, 0xcc, + 0x01, 0x01, 0x03, 0x7f, 0x20, 0x00, 0x21, 0x01, 0x02, 0x40, 0x02, 0x40, + 0x20, 0x00, 0x41, 0x03, 0x71, 0x45, 0x0d, 0x00, 0x02, 0x40, 0x20, 0x00, + 0x2d, 0x00, 0x00, 0x0d, 0x00, 0x20, 0x00, 0x20, 0x00, 0x6b, 0x0f, 0x0b, + 0x20, 0x00, 0x41, 0x01, 0x6a, 0x22, 0x01, 0x41, 0x03, 0x71, 0x45, 0x0d, + 0x00, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x45, 0x0d, 0x01, 0x20, 0x00, 0x41, + 0x02, 0x6a, 0x22, 0x01, 0x41, 0x03, 0x71, 0x45, 0x0d, 0x00, 0x20, 0x01, + 0x2d, 0x00, 0x00, 0x45, 0x0d, 0x01, 0x20, 0x00, 0x41, 0x03, 0x6a, 0x22, + 0x01, 0x41, 0x03, 0x71, 0x45, 0x0d, 0x00, 0x20, 0x01, 0x2d, 0x00, 0x00, + 0x45, 0x0d, 0x01, 0x20, 0x00, 0x41, 0x04, 0x6a, 0x22, 0x01, 0x41, 0x03, + 0x71, 0x0d, 0x01, 0x0b, 0x20, 0x01, 0x41, 0x7c, 0x6a, 0x21, 0x02, 0x20, + 0x01, 0x41, 0x7b, 0x6a, 0x21, 0x01, 0x03, 0x40, 0x20, 0x01, 0x41, 0x04, + 0x6a, 0x21, 0x01, 0x20, 0x02, 0x41, 0x04, 0x6a, 0x22, 0x02, 0x28, 0x02, + 0x00, 0x22, 0x03, 0x41, 0x7f, 0x73, 0x20, 0x03, 0x41, 0xff, 0xfd, 0xfb, + 0x77, 0x6a, 0x71, 0x41, 0x80, 0x81, 0x82, 0x84, 0x78, 0x71, 0x45, 0x0d, + 0x00, 0x0b, 0x03, 0x40, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x20, + 0x02, 0x2d, 0x00, 0x00, 0x21, 0x03, 0x20, 0x02, 0x41, 0x01, 0x6a, 0x21, + 0x02, 0x20, 0x03, 0x0d, 0x00, 0x0b, 0x0b, 0x20, 0x01, 0x20, 0x00, 0x6b, + 0x0b, 0x44, 0x00, 0x02, 0x40, 0x20, 0x00, 0x41, 0xff, 0xff, 0x07, 0x4b, + 0x0d, 0x00, 0x20, 0x00, 0x41, 0x08, 0x76, 0x41, 0x80, 0x80, 0x84, 0x80, + 0x00, 0x6a, 0x2d, 0x00, 0x00, 0x41, 0x05, 0x74, 0x20, 0x00, 0x41, 0x03, + 0x76, 0x41, 0x1f, 0x71, 0x72, 0x41, 0x80, 0x80, 0x84, 0x80, 0x00, 0x6a, + 0x2d, 0x00, 0x00, 0x20, 0x00, 0x41, 0x07, 0x71, 0x76, 0x41, 0x01, 0x71, + 0x0f, 0x0b, 0x20, 0x00, 0x41, 0xfe, 0xff, 0x0b, 0x49, 0x0b, 0x49, 0x01, + 0x03, 0x7f, 0x41, 0x00, 0x21, 0x03, 0x02, 0x40, 0x20, 0x02, 0x45, 0x0d, + 0x00, 0x02, 0x40, 0x03, 0x40, 0x20, 0x00, 0x2d, 0x00, 0x00, 0x22, 0x04, + 0x20, 0x01, 0x2d, 0x00, 0x00, 0x22, 0x05, 0x47, 0x0d, 0x01, 0x20, 0x01, + 0x41, 0x01, 0x6a, 0x21, 0x01, 0x20, 0x00, 0x41, 0x01, 0x6a, 0x21, 0x00, + 0x20, 0x02, 0x41, 0x7f, 0x6a, 0x22, 0x02, 0x0d, 0x00, 0x0c, 0x02, 0x0b, + 0x0b, 0x20, 0x04, 0x20, 0x05, 0x6b, 0x21, 0x03, 0x0b, 0x20, 0x03, 0x0b, + 0xf2, 0x02, 0x01, 0x03, 0x7f, 0x20, 0x02, 0x41, 0x00, 0x47, 0x21, 0x03, + 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x00, 0x41, 0x03, + 0x71, 0x45, 0x0d, 0x00, 0x20, 0x02, 0x45, 0x0d, 0x00, 0x02, 0x40, 0x20, + 0x00, 0x2d, 0x00, 0x00, 0x20, 0x01, 0x41, 0xff, 0x01, 0x71, 0x47, 0x0d, + 0x00, 0x20, 0x00, 0x21, 0x04, 0x20, 0x02, 0x21, 0x05, 0x0c, 0x03, 0x0b, + 0x20, 0x02, 0x41, 0x7f, 0x6a, 0x22, 0x05, 0x41, 0x00, 0x47, 0x21, 0x03, + 0x20, 0x00, 0x41, 0x01, 0x6a, 0x22, 0x04, 0x41, 0x03, 0x71, 0x45, 0x0d, + 0x01, 0x20, 0x05, 0x45, 0x0d, 0x01, 0x20, 0x04, 0x2d, 0x00, 0x00, 0x20, + 0x01, 0x41, 0xff, 0x01, 0x71, 0x46, 0x0d, 0x02, 0x20, 0x02, 0x41, 0x7e, + 0x6a, 0x22, 0x05, 0x41, 0x00, 0x47, 0x21, 0x03, 0x20, 0x00, 0x41, 0x02, + 0x6a, 0x22, 0x04, 0x41, 0x03, 0x71, 0x45, 0x0d, 0x01, 0x20, 0x05, 0x45, + 0x0d, 0x01, 0x20, 0x04, 0x2d, 0x00, 0x00, 0x20, 0x01, 0x41, 0xff, 0x01, + 0x71, 0x46, 0x0d, 0x02, 0x20, 0x02, 0x41, 0x7d, 0x6a, 0x22, 0x05, 0x41, + 0x00, 0x47, 0x21, 0x03, 0x20, 0x00, 0x41, 0x03, 0x6a, 0x22, 0x04, 0x41, + 0x03, 0x71, 0x45, 0x0d, 0x01, 0x20, 0x05, 0x45, 0x0d, 0x01, 0x20, 0x04, + 0x2d, 0x00, 0x00, 0x20, 0x01, 0x41, 0xff, 0x01, 0x71, 0x46, 0x0d, 0x02, + 0x20, 0x00, 0x41, 0x04, 0x6a, 0x21, 0x04, 0x20, 0x02, 0x41, 0x7c, 0x6a, + 0x22, 0x05, 0x41, 0x00, 0x47, 0x21, 0x03, 0x0c, 0x01, 0x0b, 0x20, 0x02, + 0x21, 0x05, 0x20, 0x00, 0x21, 0x04, 0x0b, 0x20, 0x03, 0x45, 0x0d, 0x01, + 0x02, 0x40, 0x20, 0x04, 0x2d, 0x00, 0x00, 0x20, 0x01, 0x41, 0xff, 0x01, + 0x71, 0x46, 0x0d, 0x00, 0x20, 0x05, 0x41, 0x04, 0x49, 0x0d, 0x00, 0x20, + 0x01, 0x41, 0xff, 0x01, 0x71, 0x41, 0x81, 0x82, 0x84, 0x08, 0x6c, 0x21, + 0x00, 0x03, 0x40, 0x20, 0x04, 0x28, 0x02, 0x00, 0x20, 0x00, 0x73, 0x22, + 0x02, 0x41, 0x7f, 0x73, 0x20, 0x02, 0x41, 0xff, 0xfd, 0xfb, 0x77, 0x6a, + 0x71, 0x41, 0x80, 0x81, 0x82, 0x84, 0x78, 0x71, 0x0d, 0x02, 0x20, 0x04, + 0x41, 0x04, 0x6a, 0x21, 0x04, 0x20, 0x05, 0x41, 0x7c, 0x6a, 0x22, 0x05, + 0x41, 0x03, 0x4b, 0x0d, 0x00, 0x0b, 0x0b, 0x20, 0x05, 0x45, 0x0d, 0x01, + 0x0b, 0x20, 0x01, 0x41, 0xff, 0x01, 0x71, 0x21, 0x02, 0x03, 0x40, 0x02, + 0x40, 0x20, 0x04, 0x2d, 0x00, 0x00, 0x20, 0x02, 0x47, 0x0d, 0x00, 0x20, + 0x04, 0x0f, 0x0b, 0x20, 0x04, 0x41, 0x01, 0x6a, 0x21, 0x04, 0x20, 0x05, + 0x41, 0x7f, 0x6a, 0x22, 0x05, 0x0d, 0x00, 0x0b, 0x0b, 0x41, 0x00, 0x0b, + 0x67, 0x01, 0x02, 0x7f, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x21, 0x02, 0x02, + 0x40, 0x20, 0x00, 0x2d, 0x00, 0x00, 0x22, 0x03, 0x45, 0x0d, 0x00, 0x20, + 0x03, 0x20, 0x02, 0x41, 0xff, 0x01, 0x71, 0x47, 0x0d, 0x00, 0x20, 0x00, + 0x41, 0x01, 0x6a, 0x21, 0x00, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, + 0x03, 0x40, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x21, 0x02, 0x20, 0x00, 0x2d, + 0x00, 0x00, 0x22, 0x03, 0x45, 0x0d, 0x01, 0x20, 0x00, 0x41, 0x01, 0x6a, + 0x21, 0x00, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x20, 0x03, 0x20, + 0x02, 0x41, 0xff, 0x01, 0x71, 0x46, 0x0d, 0x00, 0x0b, 0x0b, 0x20, 0x03, + 0x20, 0x02, 0x41, 0xff, 0x01, 0x71, 0x6b, 0x0b, 0x0c, 0x00, 0x20, 0x00, + 0x41, 0x00, 0x10, 0x9b, 0x80, 0x80, 0x80, 0x00, 0x0b, 0xbc, 0x02, 0x01, + 0x06, 0x7f, 0x02, 0x40, 0x20, 0x00, 0x41, 0xff, 0xff, 0x07, 0x4b, 0x0d, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x41, 0xff, 0x01, 0x71, 0x22, 0x02, 0x41, + 0x03, 0x6e, 0x22, 0x03, 0x41, 0x03, 0x6c, 0x6b, 0x41, 0xff, 0x01, 0x71, + 0x41, 0x02, 0x74, 0x41, 0xc0, 0x9e, 0x84, 0x80, 0x00, 0x6a, 0x28, 0x02, + 0x00, 0x20, 0x00, 0x41, 0x08, 0x76, 0x22, 0x04, 0x41, 0xa0, 0xa9, 0x84, + 0x80, 0x00, 0x6a, 0x2d, 0x00, 0x00, 0x41, 0xd6, 0x00, 0x6c, 0x20, 0x03, + 0x6a, 0x41, 0xa0, 0xa9, 0x84, 0x80, 0x00, 0x6a, 0x2d, 0x00, 0x00, 0x6c, + 0x41, 0x0b, 0x76, 0x41, 0x06, 0x70, 0x20, 0x04, 0x41, 0x90, 0xbe, 0x84, + 0x80, 0x00, 0x6a, 0x2d, 0x00, 0x00, 0x6a, 0x41, 0x02, 0x74, 0x41, 0xd0, + 0x9e, 0x84, 0x80, 0x00, 0x6a, 0x28, 0x02, 0x00, 0x22, 0x03, 0x41, 0x08, + 0x75, 0x21, 0x04, 0x02, 0x40, 0x20, 0x03, 0x41, 0xff, 0x01, 0x71, 0x22, + 0x03, 0x41, 0x01, 0x4b, 0x0d, 0x00, 0x20, 0x04, 0x41, 0x00, 0x20, 0x03, + 0x20, 0x01, 0x73, 0x6b, 0x71, 0x20, 0x00, 0x6a, 0x0f, 0x0b, 0x20, 0x04, + 0x41, 0xff, 0x01, 0x71, 0x22, 0x03, 0x45, 0x0d, 0x00, 0x20, 0x04, 0x41, + 0x08, 0x76, 0x21, 0x04, 0x03, 0x40, 0x02, 0x40, 0x20, 0x02, 0x20, 0x03, + 0x41, 0x01, 0x76, 0x22, 0x05, 0x20, 0x04, 0x6a, 0x22, 0x06, 0x41, 0x01, + 0x74, 0x41, 0x90, 0xa6, 0x84, 0x80, 0x00, 0x6a, 0x2d, 0x00, 0x00, 0x22, + 0x07, 0x47, 0x0d, 0x00, 0x02, 0x40, 0x20, 0x06, 0x41, 0x01, 0x74, 0x41, + 0x91, 0xa6, 0x84, 0x80, 0x00, 0x6a, 0x2d, 0x00, 0x00, 0x41, 0x02, 0x74, + 0x41, 0xd0, 0x9e, 0x84, 0x80, 0x00, 0x6a, 0x28, 0x02, 0x00, 0x22, 0x03, + 0x41, 0xff, 0x01, 0x71, 0x22, 0x04, 0x41, 0x01, 0x4b, 0x0d, 0x00, 0x20, + 0x03, 0x41, 0x08, 0x75, 0x41, 0x00, 0x20, 0x04, 0x20, 0x01, 0x73, 0x6b, + 0x71, 0x20, 0x00, 0x6a, 0x0f, 0x0b, 0x41, 0x7f, 0x41, 0x01, 0x20, 0x01, + 0x1b, 0x20, 0x00, 0x6a, 0x0f, 0x0b, 0x20, 0x04, 0x20, 0x06, 0x20, 0x02, + 0x20, 0x07, 0x49, 0x22, 0x07, 0x1b, 0x21, 0x04, 0x20, 0x05, 0x20, 0x03, + 0x20, 0x05, 0x6b, 0x20, 0x07, 0x1b, 0x22, 0x03, 0x0d, 0x00, 0x0b, 0x0b, + 0x20, 0x00, 0x0b, 0x0c, 0x00, 0x20, 0x00, 0x41, 0x01, 0x10, 0x9b, 0x80, + 0x80, 0x80, 0x00, 0x0b, 0x7b, 0x01, 0x02, 0x7f, 0x02, 0x40, 0x20, 0x02, + 0x0d, 0x00, 0x41, 0x00, 0x0f, 0x0b, 0x02, 0x40, 0x02, 0x40, 0x20, 0x00, + 0x2d, 0x00, 0x00, 0x22, 0x03, 0x45, 0x0d, 0x00, 0x20, 0x00, 0x41, 0x01, + 0x6a, 0x21, 0x00, 0x20, 0x02, 0x41, 0x7f, 0x6a, 0x21, 0x02, 0x03, 0x40, + 0x20, 0x03, 0x41, 0xff, 0x01, 0x71, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x22, + 0x04, 0x47, 0x0d, 0x02, 0x20, 0x04, 0x45, 0x0d, 0x02, 0x20, 0x02, 0x41, + 0x00, 0x46, 0x0d, 0x02, 0x20, 0x02, 0x41, 0x7f, 0x6a, 0x21, 0x02, 0x20, + 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x20, 0x00, 0x2d, 0x00, 0x00, 0x21, + 0x03, 0x20, 0x00, 0x41, 0x01, 0x6a, 0x21, 0x00, 0x20, 0x03, 0x0d, 0x00, + 0x0b, 0x0b, 0x41, 0x00, 0x21, 0x03, 0x0b, 0x20, 0x03, 0x41, 0xff, 0x01, + 0x71, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x6b, 0x0b, 0x0d, 0x00, 0x20, 0x00, + 0x10, 0x9a, 0x80, 0x80, 0x80, 0x00, 0x20, 0x00, 0x47, 0x0b, 0xbf, 0x09, + 0x01, 0x04, 0x7f, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x20, 0x02, 0x41, + 0x21, 0x4f, 0x0d, 0x00, 0x20, 0x00, 0x20, 0x01, 0x46, 0x0d, 0x02, 0x20, + 0x01, 0x20, 0x00, 0x20, 0x02, 0x6a, 0x22, 0x03, 0x6b, 0x41, 0x00, 0x20, + 0x02, 0x41, 0x01, 0x74, 0x6b, 0x4b, 0x0d, 0x01, 0x0b, 0x20, 0x00, 0x20, + 0x01, 0x20, 0x02, 0xfc, 0x0a, 0x00, 0x00, 0x0c, 0x01, 0x0b, 0x20, 0x01, + 0x20, 0x00, 0x73, 0x41, 0x03, 0x71, 0x21, 0x04, 0x02, 0x40, 0x02, 0x40, + 0x02, 0x40, 0x20, 0x00, 0x20, 0x01, 0x4f, 0x0d, 0x00, 0x02, 0x40, 0x20, + 0x04, 0x45, 0x0d, 0x00, 0x20, 0x02, 0x21, 0x05, 0x20, 0x00, 0x21, 0x03, + 0x0c, 0x03, 0x0b, 0x02, 0x40, 0x20, 0x00, 0x41, 0x03, 0x71, 0x0d, 0x00, + 0x20, 0x02, 0x21, 0x05, 0x20, 0x00, 0x21, 0x03, 0x0c, 0x02, 0x0b, 0x20, + 0x02, 0x45, 0x0d, 0x03, 0x20, 0x00, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x3a, + 0x00, 0x00, 0x20, 0x02, 0x41, 0x7f, 0x6a, 0x21, 0x05, 0x02, 0x40, 0x20, + 0x00, 0x41, 0x01, 0x6a, 0x22, 0x03, 0x41, 0x03, 0x71, 0x0d, 0x00, 0x20, + 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x0c, 0x02, 0x0b, 0x20, 0x05, 0x45, + 0x0d, 0x03, 0x20, 0x00, 0x20, 0x01, 0x2d, 0x00, 0x01, 0x3a, 0x00, 0x01, + 0x20, 0x02, 0x41, 0x7e, 0x6a, 0x21, 0x05, 0x02, 0x40, 0x20, 0x00, 0x41, + 0x02, 0x6a, 0x22, 0x03, 0x41, 0x03, 0x71, 0x0d, 0x00, 0x20, 0x01, 0x41, + 0x02, 0x6a, 0x21, 0x01, 0x0c, 0x02, 0x0b, 0x20, 0x05, 0x45, 0x0d, 0x03, + 0x20, 0x00, 0x20, 0x01, 0x2d, 0x00, 0x02, 0x3a, 0x00, 0x02, 0x20, 0x02, + 0x41, 0x7d, 0x6a, 0x21, 0x05, 0x02, 0x40, 0x20, 0x00, 0x41, 0x03, 0x6a, + 0x22, 0x03, 0x41, 0x03, 0x71, 0x0d, 0x00, 0x20, 0x01, 0x41, 0x03, 0x6a, + 0x21, 0x01, 0x0c, 0x02, 0x0b, 0x20, 0x05, 0x45, 0x0d, 0x03, 0x20, 0x00, + 0x20, 0x01, 0x2d, 0x00, 0x03, 0x3a, 0x00, 0x03, 0x20, 0x00, 0x41, 0x04, + 0x6a, 0x21, 0x03, 0x20, 0x01, 0x41, 0x04, 0x6a, 0x21, 0x01, 0x20, 0x02, + 0x41, 0x7c, 0x6a, 0x21, 0x05, 0x0c, 0x01, 0x0b, 0x02, 0x40, 0x20, 0x04, + 0x0d, 0x00, 0x02, 0x40, 0x20, 0x03, 0x41, 0x03, 0x71, 0x45, 0x0d, 0x00, + 0x20, 0x02, 0x45, 0x0d, 0x04, 0x20, 0x00, 0x20, 0x02, 0x41, 0x7f, 0x6a, + 0x22, 0x03, 0x6a, 0x22, 0x04, 0x20, 0x01, 0x20, 0x03, 0x6a, 0x2d, 0x00, + 0x00, 0x3a, 0x00, 0x00, 0x02, 0x40, 0x20, 0x04, 0x41, 0x03, 0x71, 0x0d, + 0x00, 0x20, 0x03, 0x21, 0x02, 0x0c, 0x01, 0x0b, 0x20, 0x03, 0x45, 0x0d, + 0x04, 0x20, 0x00, 0x20, 0x02, 0x41, 0x7e, 0x6a, 0x22, 0x03, 0x6a, 0x22, + 0x04, 0x20, 0x01, 0x20, 0x03, 0x6a, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, + 0x02, 0x40, 0x20, 0x04, 0x41, 0x03, 0x71, 0x0d, 0x00, 0x20, 0x03, 0x21, + 0x02, 0x0c, 0x01, 0x0b, 0x20, 0x03, 0x45, 0x0d, 0x04, 0x20, 0x00, 0x20, + 0x02, 0x41, 0x7d, 0x6a, 0x22, 0x03, 0x6a, 0x22, 0x04, 0x20, 0x01, 0x20, + 0x03, 0x6a, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x02, 0x40, 0x20, 0x04, + 0x41, 0x03, 0x71, 0x0d, 0x00, 0x20, 0x03, 0x21, 0x02, 0x0c, 0x01, 0x0b, + 0x20, 0x03, 0x45, 0x0d, 0x04, 0x20, 0x00, 0x20, 0x02, 0x41, 0x7c, 0x6a, + 0x22, 0x02, 0x6a, 0x20, 0x01, 0x20, 0x02, 0x6a, 0x2d, 0x00, 0x00, 0x3a, + 0x00, 0x00, 0x0b, 0x20, 0x02, 0x41, 0x04, 0x49, 0x0d, 0x00, 0x02, 0x40, + 0x20, 0x02, 0x41, 0x7c, 0x6a, 0x22, 0x06, 0x41, 0x02, 0x76, 0x41, 0x01, + 0x6a, 0x41, 0x03, 0x71, 0x22, 0x03, 0x45, 0x0d, 0x00, 0x20, 0x01, 0x41, + 0x7c, 0x6a, 0x21, 0x04, 0x20, 0x00, 0x41, 0x7c, 0x6a, 0x21, 0x05, 0x03, + 0x40, 0x20, 0x05, 0x20, 0x02, 0x6a, 0x20, 0x04, 0x20, 0x02, 0x6a, 0x28, + 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x02, 0x41, 0x7c, 0x6a, 0x21, 0x02, + 0x20, 0x03, 0x41, 0x7f, 0x6a, 0x22, 0x03, 0x0d, 0x00, 0x0b, 0x0b, 0x20, + 0x06, 0x41, 0x0c, 0x49, 0x0d, 0x00, 0x20, 0x01, 0x41, 0x70, 0x6a, 0x21, + 0x05, 0x20, 0x00, 0x41, 0x70, 0x6a, 0x21, 0x06, 0x03, 0x40, 0x20, 0x06, + 0x20, 0x02, 0x6a, 0x22, 0x03, 0x41, 0x0c, 0x6a, 0x20, 0x05, 0x20, 0x02, + 0x6a, 0x22, 0x04, 0x41, 0x0c, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, + 0x20, 0x03, 0x41, 0x08, 0x6a, 0x20, 0x04, 0x41, 0x08, 0x6a, 0x28, 0x02, + 0x00, 0x36, 0x02, 0x00, 0x20, 0x03, 0x41, 0x04, 0x6a, 0x20, 0x04, 0x41, + 0x04, 0x6a, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x03, 0x20, 0x04, + 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x02, 0x41, 0x70, 0x6a, 0x22, + 0x02, 0x41, 0x03, 0x4b, 0x0d, 0x00, 0x0b, 0x0b, 0x20, 0x02, 0x45, 0x0d, + 0x02, 0x20, 0x02, 0x21, 0x03, 0x02, 0x40, 0x20, 0x02, 0x41, 0x03, 0x71, + 0x22, 0x04, 0x45, 0x0d, 0x00, 0x20, 0x01, 0x41, 0x7f, 0x6a, 0x21, 0x05, + 0x20, 0x00, 0x41, 0x7f, 0x6a, 0x21, 0x06, 0x20, 0x02, 0x21, 0x03, 0x03, + 0x40, 0x20, 0x06, 0x20, 0x03, 0x6a, 0x20, 0x05, 0x20, 0x03, 0x6a, 0x2d, + 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x03, 0x41, 0x7f, 0x6a, 0x21, 0x03, + 0x20, 0x04, 0x41, 0x7f, 0x6a, 0x22, 0x04, 0x0d, 0x00, 0x0b, 0x0b, 0x20, + 0x02, 0x41, 0x04, 0x49, 0x0d, 0x02, 0x20, 0x01, 0x41, 0x7c, 0x6a, 0x21, + 0x04, 0x20, 0x00, 0x41, 0x7c, 0x6a, 0x21, 0x05, 0x03, 0x40, 0x20, 0x05, + 0x20, 0x03, 0x6a, 0x22, 0x01, 0x41, 0x03, 0x6a, 0x20, 0x04, 0x20, 0x03, + 0x6a, 0x22, 0x02, 0x41, 0x03, 0x6a, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, + 0x20, 0x01, 0x41, 0x02, 0x6a, 0x20, 0x02, 0x41, 0x02, 0x6a, 0x2d, 0x00, + 0x00, 0x3a, 0x00, 0x00, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x20, 0x02, 0x41, + 0x01, 0x6a, 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x01, 0x20, 0x02, + 0x2d, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x03, 0x41, 0x7c, 0x6a, 0x22, + 0x03, 0x0d, 0x00, 0x0c, 0x03, 0x0b, 0x0b, 0x20, 0x05, 0x41, 0x04, 0x49, + 0x0d, 0x00, 0x02, 0x40, 0x20, 0x05, 0x41, 0x7c, 0x6a, 0x22, 0x04, 0x41, + 0x02, 0x76, 0x41, 0x01, 0x6a, 0x41, 0x07, 0x71, 0x22, 0x02, 0x45, 0x0d, + 0x00, 0x20, 0x05, 0x20, 0x02, 0x41, 0x02, 0x74, 0x6b, 0x21, 0x05, 0x03, + 0x40, 0x20, 0x03, 0x20, 0x01, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, + 0x01, 0x41, 0x04, 0x6a, 0x21, 0x01, 0x20, 0x03, 0x41, 0x04, 0x6a, 0x21, + 0x03, 0x20, 0x02, 0x41, 0x7f, 0x6a, 0x22, 0x02, 0x0d, 0x00, 0x0b, 0x0b, + 0x20, 0x04, 0x41, 0x1c, 0x49, 0x0d, 0x00, 0x03, 0x40, 0x20, 0x03, 0x20, + 0x01, 0x28, 0x02, 0x00, 0x36, 0x02, 0x00, 0x20, 0x03, 0x20, 0x01, 0x28, + 0x02, 0x04, 0x36, 0x02, 0x04, 0x20, 0x03, 0x20, 0x01, 0x28, 0x02, 0x08, + 0x36, 0x02, 0x08, 0x20, 0x03, 0x20, 0x01, 0x28, 0x02, 0x0c, 0x36, 0x02, + 0x0c, 0x20, 0x03, 0x20, 0x01, 0x28, 0x02, 0x10, 0x36, 0x02, 0x10, 0x20, + 0x03, 0x20, 0x01, 0x28, 0x02, 0x14, 0x36, 0x02, 0x14, 0x20, 0x03, 0x20, + 0x01, 0x28, 0x02, 0x18, 0x36, 0x02, 0x18, 0x20, 0x03, 0x20, 0x01, 0x28, + 0x02, 0x1c, 0x36, 0x02, 0x1c, 0x20, 0x01, 0x41, 0x20, 0x6a, 0x21, 0x01, + 0x20, 0x03, 0x41, 0x20, 0x6a, 0x21, 0x03, 0x20, 0x05, 0x41, 0x60, 0x6a, + 0x22, 0x05, 0x41, 0x03, 0x4b, 0x0d, 0x00, 0x0b, 0x0b, 0x20, 0x05, 0x45, + 0x0d, 0x00, 0x02, 0x40, 0x02, 0x40, 0x20, 0x05, 0x41, 0x07, 0x71, 0x22, + 0x02, 0x0d, 0x00, 0x20, 0x05, 0x21, 0x04, 0x0c, 0x01, 0x0b, 0x20, 0x05, + 0x41, 0x78, 0x71, 0x21, 0x04, 0x03, 0x40, 0x20, 0x03, 0x20, 0x01, 0x2d, + 0x00, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x03, 0x41, 0x01, 0x6a, 0x21, 0x03, + 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x20, 0x02, 0x41, 0x7f, 0x6a, + 0x22, 0x02, 0x0d, 0x00, 0x0b, 0x0b, 0x20, 0x05, 0x41, 0x08, 0x49, 0x0d, + 0x00, 0x03, 0x40, 0x20, 0x03, 0x20, 0x01, 0x2d, 0x00, 0x00, 0x3a, 0x00, + 0x00, 0x20, 0x03, 0x20, 0x01, 0x2d, 0x00, 0x01, 0x3a, 0x00, 0x01, 0x20, + 0x03, 0x20, 0x01, 0x2d, 0x00, 0x02, 0x3a, 0x00, 0x02, 0x20, 0x03, 0x20, + 0x01, 0x2d, 0x00, 0x03, 0x3a, 0x00, 0x03, 0x20, 0x03, 0x20, 0x01, 0x2d, + 0x00, 0x04, 0x3a, 0x00, 0x04, 0x20, 0x03, 0x20, 0x01, 0x2d, 0x00, 0x05, + 0x3a, 0x00, 0x05, 0x20, 0x03, 0x20, 0x01, 0x2d, 0x00, 0x06, 0x3a, 0x00, + 0x06, 0x20, 0x03, 0x20, 0x01, 0x2d, 0x00, 0x07, 0x3a, 0x00, 0x07, 0x20, + 0x03, 0x41, 0x08, 0x6a, 0x21, 0x03, 0x20, 0x01, 0x41, 0x08, 0x6a, 0x21, + 0x01, 0x20, 0x04, 0x41, 0x78, 0x6a, 0x22, 0x04, 0x0d, 0x00, 0x0b, 0x0b, + 0x20, 0x00, 0x0b, 0x0d, 0x00, 0x20, 0x00, 0x10, 0x9c, 0x80, 0x80, 0x80, + 0x00, 0x20, 0x00, 0x47, 0x0b, 0x0d, 0x00, 0x20, 0x00, 0x41, 0x20, 0x46, + 0x20, 0x00, 0x41, 0x09, 0x46, 0x72, 0x0b, 0x0a, 0x00, 0x20, 0x00, 0x10, + 0xa1, 0x80, 0x80, 0x80, 0x00, 0x0b, 0x0a, 0x00, 0x20, 0x00, 0x41, 0x50, + 0x6a, 0x41, 0x0a, 0x49, 0x0b, 0x4d, 0x01, 0x02, 0x7f, 0x20, 0x00, 0x20, + 0x00, 0x10, 0x95, 0x80, 0x80, 0x80, 0x00, 0x6a, 0x21, 0x03, 0x02, 0x40, + 0x20, 0x02, 0x45, 0x0d, 0x00, 0x03, 0x40, 0x20, 0x01, 0x2d, 0x00, 0x00, + 0x22, 0x04, 0x45, 0x0d, 0x01, 0x20, 0x03, 0x20, 0x04, 0x3a, 0x00, 0x00, + 0x20, 0x03, 0x41, 0x01, 0x6a, 0x21, 0x03, 0x20, 0x01, 0x41, 0x01, 0x6a, + 0x21, 0x01, 0x20, 0x02, 0x41, 0x7f, 0x6a, 0x22, 0x02, 0x0d, 0x00, 0x0b, + 0x0b, 0x20, 0x03, 0x41, 0x00, 0x3a, 0x00, 0x00, 0x20, 0x00, 0x0b, 0xef, + 0x03, 0x01, 0x04, 0x7f, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, 0x02, 0x40, + 0x02, 0x40, 0x20, 0x01, 0x20, 0x00, 0x73, 0x41, 0x03, 0x71, 0x45, 0x0d, + 0x00, 0x20, 0x00, 0x21, 0x03, 0x0c, 0x01, 0x0b, 0x20, 0x02, 0x41, 0x00, + 0x47, 0x21, 0x04, 0x02, 0x40, 0x02, 0x40, 0x20, 0x01, 0x41, 0x03, 0x71, + 0x0d, 0x00, 0x20, 0x00, 0x21, 0x03, 0x0c, 0x01, 0x0b, 0x02, 0x40, 0x20, + 0x02, 0x0d, 0x00, 0x20, 0x00, 0x21, 0x03, 0x0c, 0x01, 0x0b, 0x20, 0x00, + 0x20, 0x01, 0x2d, 0x00, 0x00, 0x22, 0x03, 0x3a, 0x00, 0x00, 0x02, 0x40, + 0x20, 0x03, 0x0d, 0x00, 0x20, 0x00, 0x21, 0x03, 0x20, 0x02, 0x21, 0x05, + 0x0c, 0x05, 0x0b, 0x20, 0x00, 0x41, 0x01, 0x6a, 0x21, 0x03, 0x20, 0x02, + 0x41, 0x7f, 0x6a, 0x22, 0x05, 0x41, 0x00, 0x47, 0x21, 0x04, 0x02, 0x40, + 0x20, 0x01, 0x41, 0x01, 0x6a, 0x22, 0x06, 0x41, 0x03, 0x71, 0x45, 0x0d, + 0x00, 0x20, 0x05, 0x45, 0x0d, 0x00, 0x20, 0x03, 0x20, 0x06, 0x2d, 0x00, + 0x00, 0x22, 0x04, 0x3a, 0x00, 0x00, 0x20, 0x04, 0x45, 0x0d, 0x05, 0x20, + 0x00, 0x41, 0x02, 0x6a, 0x21, 0x03, 0x20, 0x02, 0x41, 0x7e, 0x6a, 0x22, + 0x05, 0x41, 0x00, 0x47, 0x21, 0x04, 0x02, 0x40, 0x20, 0x01, 0x41, 0x02, + 0x6a, 0x22, 0x06, 0x41, 0x03, 0x71, 0x45, 0x0d, 0x00, 0x20, 0x05, 0x45, + 0x0d, 0x00, 0x20, 0x03, 0x20, 0x06, 0x2d, 0x00, 0x00, 0x22, 0x04, 0x3a, + 0x00, 0x00, 0x20, 0x04, 0x45, 0x0d, 0x06, 0x20, 0x00, 0x41, 0x03, 0x6a, + 0x21, 0x03, 0x20, 0x02, 0x41, 0x7d, 0x6a, 0x22, 0x05, 0x41, 0x00, 0x47, + 0x21, 0x04, 0x02, 0x40, 0x20, 0x01, 0x41, 0x03, 0x6a, 0x22, 0x06, 0x41, + 0x03, 0x71, 0x45, 0x0d, 0x00, 0x20, 0x05, 0x45, 0x0d, 0x00, 0x20, 0x03, + 0x20, 0x06, 0x2d, 0x00, 0x00, 0x22, 0x04, 0x3a, 0x00, 0x00, 0x20, 0x04, + 0x45, 0x0d, 0x07, 0x20, 0x00, 0x41, 0x04, 0x6a, 0x21, 0x03, 0x20, 0x01, + 0x41, 0x04, 0x6a, 0x21, 0x01, 0x20, 0x02, 0x41, 0x7c, 0x6a, 0x22, 0x02, + 0x41, 0x00, 0x47, 0x21, 0x04, 0x0c, 0x03, 0x0b, 0x20, 0x06, 0x21, 0x01, + 0x20, 0x05, 0x21, 0x02, 0x0c, 0x02, 0x0b, 0x20, 0x06, 0x21, 0x01, 0x20, + 0x05, 0x21, 0x02, 0x0c, 0x01, 0x0b, 0x20, 0x06, 0x21, 0x01, 0x20, 0x05, + 0x21, 0x02, 0x0b, 0x20, 0x04, 0x45, 0x0d, 0x02, 0x02, 0x40, 0x20, 0x01, + 0x2d, 0x00, 0x00, 0x0d, 0x00, 0x20, 0x02, 0x21, 0x05, 0x0c, 0x04, 0x0b, + 0x20, 0x02, 0x41, 0x04, 0x49, 0x0d, 0x00, 0x03, 0x40, 0x20, 0x01, 0x28, + 0x02, 0x00, 0x22, 0x00, 0x41, 0x7f, 0x73, 0x20, 0x00, 0x41, 0xff, 0xfd, + 0xfb, 0x77, 0x6a, 0x71, 0x41, 0x80, 0x81, 0x82, 0x84, 0x78, 0x71, 0x0d, + 0x02, 0x20, 0x03, 0x20, 0x00, 0x36, 0x02, 0x00, 0x20, 0x03, 0x41, 0x04, + 0x6a, 0x21, 0x03, 0x20, 0x01, 0x41, 0x04, 0x6a, 0x21, 0x01, 0x20, 0x02, + 0x41, 0x7c, 0x6a, 0x22, 0x02, 0x41, 0x03, 0x4b, 0x0d, 0x00, 0x0b, 0x0b, + 0x20, 0x02, 0x45, 0x0d, 0x01, 0x0b, 0x03, 0x40, 0x20, 0x03, 0x20, 0x01, + 0x2d, 0x00, 0x00, 0x22, 0x00, 0x3a, 0x00, 0x00, 0x02, 0x40, 0x20, 0x00, + 0x0d, 0x00, 0x20, 0x02, 0x21, 0x05, 0x0c, 0x03, 0x0b, 0x20, 0x03, 0x41, + 0x01, 0x6a, 0x21, 0x03, 0x20, 0x01, 0x41, 0x01, 0x6a, 0x21, 0x01, 0x20, + 0x02, 0x41, 0x7f, 0x6a, 0x22, 0x02, 0x0d, 0x00, 0x0b, 0x0b, 0x41, 0x00, + 0x21, 0x05, 0x0b, 0x20, 0x03, 0x41, 0x00, 0x20, 0x05, 0x10, 0x94, 0x80, + 0x80, 0x80, 0x00, 0x0b, 0x11, 0x00, 0x20, 0x00, 0x20, 0x01, 0x20, 0x02, + 0x10, 0xa5, 0x80, 0x80, 0x80, 0x00, 0x1a, 0x20, 0x00, 0x0b, 0x17, 0x00, + 0x20, 0x00, 0x41, 0x50, 0x6a, 0x41, 0x0a, 0x49, 0x20, 0x00, 0x41, 0x20, + 0x72, 0x41, 0x9f, 0x7f, 0x6a, 0x41, 0x06, 0x49, 0x72, 0x0b, 0x2a, 0x01, + 0x03, 0x7f, 0x41, 0x00, 0x21, 0x01, 0x03, 0x40, 0x20, 0x00, 0x20, 0x01, + 0x6a, 0x21, 0x02, 0x20, 0x01, 0x41, 0x04, 0x6a, 0x22, 0x03, 0x21, 0x01, + 0x20, 0x02, 0x28, 0x02, 0x00, 0x0d, 0x00, 0x0b, 0x20, 0x03, 0x41, 0x7c, + 0x6a, 0x41, 0x02, 0x75, 0x0b, 0x45, 0x01, 0x01, 0x7f, 0x02, 0x40, 0x20, + 0x01, 0x45, 0x0d, 0x00, 0x20, 0x00, 0x41, 0x7c, 0x6a, 0x21, 0x00, 0x02, + 0x40, 0x03, 0x40, 0x20, 0x00, 0x41, 0x04, 0x6a, 0x22, 0x00, 0x28, 0x02, + 0x00, 0x22, 0x02, 0x45, 0x0d, 0x01, 0x20, 0x02, 0x20, 0x01, 0x47, 0x0d, + 0x00, 0x0b, 0x0b, 0x20, 0x00, 0x41, 0x00, 0x20, 0x02, 0x1b, 0x0f, 0x0b, + 0x20, 0x00, 0x20, 0x00, 0x10, 0xa8, 0x80, 0x80, 0x80, 0x00, 0x41, 0x02, + 0x74, 0x6a, 0x0b, 0x1d, 0x00, 0x02, 0x40, 0x20, 0x00, 0x0d, 0x00, 0x41, + 0x00, 0x0f, 0x0b, 0x41, 0x90, 0xc2, 0x84, 0x80, 0x00, 0x20, 0x00, 0x10, + 0xa9, 0x80, 0x80, 0x80, 0x00, 0x41, 0x00, 0x47, 0x0b, 0x24, 0x01, 0x01, + 0x7f, 0x41, 0x01, 0x21, 0x01, 0x02, 0x40, 0x20, 0x00, 0x41, 0x50, 0x6a, + 0x41, 0x0a, 0x49, 0x0d, 0x00, 0x20, 0x00, 0x10, 0x96, 0x80, 0x80, 0x80, + 0x00, 0x41, 0x00, 0x47, 0x21, 0x01, 0x0b, 0x20, 0x01, 0x0b, 0x0b, 0xf1, + 0x42, 0x01, 0x00, 0x41, 0x80, 0x80, 0x04, 0x0b, 0xe8, 0x42, 0x12, 0x11, + 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, + 0x1f, 0x20, 0x21, 0x11, 0x22, 0x23, 0x24, 0x11, 0x25, 0x26, 0x27, 0x28, + 0x29, 0x2a, 0x2b, 0x2c, 0x11, 0x2d, 0x2e, 0x2f, 0x10, 0x10, 0x30, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x31, 0x32, 0x33, 0x10, 0x34, 0x35, + 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x36, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x37, 0x11, 0x11, 0x11, 0x11, 0x38, 0x11, 0x39, 0x3a, 0x3b, 0x3c, + 0x3d, 0x3e, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x3f, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x40, 0x41, 0x11, 0x42, + 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x11, 0x4b, 0x4c, 0x4d, + 0x4e, 0x4f, 0x50, 0x51, 0x10, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, + 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x10, 0x5e, 0x5f, 0x60, 0x10, 0x11, 0x11, + 0x11, 0x61, 0x62, 0x63, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x11, 0x11, 0x11, 0x11, 0x64, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, + 0x65, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x11, + 0x66, 0x67, 0x10, 0x10, 0x68, 0x69, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, + 0x11, 0x11, 0x11, 0x11, 0x11, 0x6a, 0x11, 0x11, 0x6b, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x11, 0x6c, + 0x6d, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x6e, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x6f, 0x70, + 0x71, 0x72, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x73, 0x74, + 0x75, 0x10, 0x10, 0x10, 0x10, 0x10, 0x76, 0x77, 0x10, 0x10, 0x10, 0x10, + 0x78, 0x10, 0x10, 0x79, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x07, 0xfe, 0xff, + 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x20, 0x04, 0xff, 0xff, + 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xff, 0x03, 0x00, 0x1f, 0x50, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xdf, 0xbc, 0x40, 0xd7, 0xff, 0xff, 0xfb, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x03, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xbf, 0xb6, 0x00, 0xff, 0xff, 0xff, 0x87, + 0x07, 0x00, 0x00, 0x00, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xfe, 0xff, 0xc3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xef, 0x1f, 0xfe, 0xe1, 0xff, 0x9f, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x07, 0x30, 0x04, 0xff, 0xff, 0xff, 0xfc, 0xff, 0x1f, + 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xdf, 0x3f, 0x00, 0x00, 0xf0, 0xff, 0xf8, 0x03, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xdf, + 0xe1, 0xff, 0xcf, 0xff, 0xfe, 0xff, 0xef, 0x9f, 0xf9, 0xff, 0xff, 0xfd, + 0xc5, 0xe3, 0x9f, 0x59, 0x80, 0xb0, 0xcf, 0xff, 0x03, 0x10, 0xee, 0x87, + 0xf9, 0xff, 0xff, 0xfd, 0x6d, 0xc3, 0x87, 0x19, 0x02, 0x5e, 0xc0, 0xff, + 0x3f, 0x00, 0xee, 0xbf, 0xfb, 0xff, 0xff, 0xfd, 0xed, 0xe3, 0xbf, 0x1b, + 0x01, 0x00, 0xcf, 0xff, 0x00, 0x1e, 0xee, 0x9f, 0xf9, 0xff, 0xff, 0xfd, + 0xed, 0xe3, 0x9f, 0x19, 0xc0, 0xb0, 0xcf, 0xff, 0x02, 0x00, 0xec, 0xc7, + 0x3d, 0xd6, 0x18, 0xc7, 0xff, 0xc3, 0xc7, 0x1d, 0x81, 0x00, 0xc0, 0xff, + 0x00, 0x00, 0xef, 0xdf, 0xfd, 0xff, 0xff, 0xfd, 0xff, 0xe3, 0xdf, 0x1d, + 0x60, 0x07, 0xcf, 0xff, 0x00, 0x00, 0xef, 0xdf, 0xfd, 0xff, 0xff, 0xfd, + 0xef, 0xe3, 0xdf, 0x1d, 0x60, 0x40, 0xcf, 0xff, 0x06, 0x00, 0xef, 0xdf, + 0xfd, 0xff, 0xff, 0xff, 0xff, 0xe7, 0xdf, 0x5d, 0xf0, 0x80, 0xcf, 0xff, + 0x00, 0xfc, 0xec, 0xff, 0x7f, 0xfc, 0xff, 0xff, 0xfb, 0x2f, 0x7f, 0x80, + 0x5f, 0xff, 0xc0, 0xff, 0x0c, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x7f, + 0xff, 0x07, 0x3f, 0x20, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xd6, 0xf7, + 0xff, 0xff, 0xaf, 0xff, 0xff, 0x3b, 0x5f, 0x20, 0xff, 0xf3, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0xfe, + 0xff, 0xff, 0xff, 0x1f, 0xfe, 0xff, 0x03, 0xff, 0xff, 0xfe, 0xff, 0xff, + 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf9, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x20, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x3d, 0x7f, 0x3d, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3d, + 0xff, 0xff, 0xff, 0xff, 0x3d, 0x7f, 0x3d, 0xff, 0x7f, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x3d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0xfe, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xff, 0xff, 0xfe, 0xff, + 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, + 0xff, 0x01, 0xff, 0xdf, 0x0f, 0x00, 0xff, 0xff, 0x0f, 0x00, 0xff, 0xff, + 0x0f, 0x00, 0xff, 0xdf, 0x0d, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xcf, 0xff, 0xff, 0x01, 0x80, 0x10, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, + 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x0f, + 0xff, 0x01, 0xc0, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x1f, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0x03, 0xff, 0x03, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x7f, 0xfe, 0xff, 0x1f, 0x00, 0xff, 0x03, 0xff, 0x03, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xef, 0x0f, 0xff, 0x03, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xbf, 0xff, 0x03, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x00, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0x01, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, + 0x6f, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x1f, 0x00, 0xff, 0xff, + 0x3f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x3f, 0xff, 0xaa, 0xff, 0xff, + 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x5f, 0xdc, 0x1f, + 0xcf, 0x0f, 0xff, 0x1f, 0xdc, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, + 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x84, 0xfc, 0x2f, 0x3e, 0x50, 0xbd, 0xff, 0xf3, 0xe0, 0x43, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x78, + 0x0c, 0x00, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x20, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0xff, 0xff, 0x7f, 0x00, 0x7f, 0x7f, + 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0xfe, 0x03, + 0x3e, 0x1f, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0xe0, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf7, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xff, 0xff, + 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0x1f, + 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, + 0xf0, 0x8f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0xfc, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x2f, 0x00, 0xff, 0x03, 0x00, 0x00, 0xfc, 0xe8, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0xff, 0xff, + 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x00, 0x80, + 0xff, 0x03, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x00, 0xff, 0x3f, 0xff, 0x03, 0xff, 0xff, 0x7f, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x05, 0x00, 0x00, 0x38, 0xff, 0xff, + 0x3c, 0x00, 0x7e, 0x7e, 0x7e, 0x00, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xf7, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0x03, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0xff, 0xff, 0x7f, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0x00, 0xf8, 0xe0, 0xff, 0xfd, 0x7f, 0x5f, 0xdb, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x03, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x1f, 0x00, 0x00, 0xff, 0x03, 0xfe, 0xff, 0xff, 0x07, 0xfe, 0xff, + 0xff, 0x07, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x7f, 0xfc, 0xfc, 0xfc, 0x1c, 0x00, 0x00, 0x00, 0x00, 0xff, 0xef, + 0xff, 0xff, 0x7f, 0xff, 0xff, 0xb7, 0xff, 0x3f, 0xff, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0x00, 0xe0, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x07, 0xff, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, + 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x3f, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff, 0xff, + 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0xff, 0xff, 0x3f, 0x00, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfd, 0xff, 0xff, 0xff, 0xff, + 0xbf, 0x91, 0xff, 0xff, 0x3f, 0x00, 0xff, 0xff, 0x7f, 0x00, 0xff, 0xff, + 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x37, 0x00, 0xff, 0xff, 0x3f, 0x00, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xf0, + 0xef, 0xfe, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0x1f, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, + 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x00, 0xff, 0xff, 0x3f, 0x00, 0xff, 0xff, 0x07, 0x00, 0xff, 0xff, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x07, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x1f, 0x80, 0x00, + 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0x7f, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, + 0x00, 0x00, 0xc0, 0xff, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0x03, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xc7, 0xff, 0x70, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x47, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1e, 0x00, + 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, + 0x9f, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xbd, + 0xff, 0xbf, 0xff, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, + 0xff, 0x03, 0xef, 0x9f, 0xf9, 0xff, 0xff, 0xfd, 0xed, 0xe3, 0x9f, 0x19, + 0x81, 0xe0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0x07, 0xff, 0x83, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb3, 0x00, + 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x11, 0x00, + 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x01, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xe7, 0xff, 0x07, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1a, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xe7, 0x7f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x7f, 0x01, 0x00, 0xff, 0x03, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, + 0xfc, 0xff, 0xff, 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xb4, 0xcb, 0x00, + 0xff, 0x03, 0xbf, 0xfd, 0xff, 0xff, 0xff, 0x7f, 0x7b, 0x01, 0xff, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x7f, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x0f, 0x00, 0xff, 0x03, 0xf8, 0xff, 0xff, 0xe0, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x80, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0xff, 0xff, + 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0xf0, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x07, 0xff, 0x1f, 0xff, 0x01, 0xff, 0x43, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x64, 0xde, 0xff, 0xeb, 0xef, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xe7, 0xdf, 0xdf, 0xff, 0xff, + 0xff, 0x7b, 0x5f, 0xfc, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, + 0xff, 0xff, 0xfd, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, + 0xdf, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, + 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xf7, 0xcf, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xf9, 0xdb, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x80, 0x3f, 0xff, 0x43, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x0f, 0xff, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x08, + 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0xff, + 0xff, 0xff, 0x96, 0xfe, 0xf7, 0x0a, 0x84, 0xea, 0x96, 0xaa, 0x96, 0xf7, + 0xf7, 0x5e, 0xff, 0xfb, 0xff, 0x0f, 0xee, 0xfb, 0xff, 0x0f, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x56, 0x01, 0x00, 0x00, 0x39, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, + 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x00, 0xbf, 0x1d, 0x00, 0x00, 0xe7, + 0x02, 0x00, 0x00, 0x79, 0x00, 0x00, 0x02, 0x24, 0x00, 0x00, 0x01, 0x01, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, + 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x01, 0x39, 0xff, 0xff, 0x00, 0x18, + 0xff, 0xff, 0x01, 0x87, 0xff, 0xff, 0x00, 0xd4, 0xfe, 0xff, 0x00, 0xc3, + 0x00, 0x00, 0x01, 0xd2, 0x00, 0x00, 0x01, 0xce, 0x00, 0x00, 0x01, 0xcd, + 0x00, 0x00, 0x01, 0x4f, 0x00, 0x00, 0x01, 0xca, 0x00, 0x00, 0x01, 0xcb, + 0x00, 0x00, 0x01, 0xcf, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x01, 0xd3, + 0x00, 0x00, 0x01, 0xd1, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x01, 0xd5, + 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x01, 0xd6, 0x00, 0x00, 0x01, 0xda, + 0x00, 0x00, 0x01, 0xd9, 0x00, 0x00, 0x01, 0xdb, 0x00, 0x00, 0x00, 0x38, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xb1, 0xff, 0xff, 0x01, 0x9f, + 0xff, 0xff, 0x01, 0xc8, 0xff, 0xff, 0x02, 0x28, 0x24, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x33, + 0xff, 0xff, 0x00, 0x26, 0xff, 0xff, 0x01, 0x7e, 0xff, 0xff, 0x01, 0x2b, + 0x2a, 0x00, 0x01, 0x5d, 0xff, 0xff, 0x01, 0x28, 0x2a, 0x00, 0x00, 0x3f, + 0x2a, 0x00, 0x01, 0x3d, 0xff, 0xff, 0x01, 0x45, 0x00, 0x00, 0x01, 0x47, + 0x00, 0x00, 0x00, 0x1f, 0x2a, 0x00, 0x00, 0x1c, 0x2a, 0x00, 0x00, 0x1e, + 0x2a, 0x00, 0x00, 0x2e, 0xff, 0xff, 0x00, 0x32, 0xff, 0xff, 0x00, 0x36, + 0xff, 0xff, 0x00, 0x35, 0xff, 0xff, 0x00, 0x4f, 0xa5, 0x00, 0x00, 0x4b, + 0xa5, 0x00, 0x00, 0x31, 0xff, 0xff, 0x00, 0x28, 0xa5, 0x00, 0x00, 0x44, + 0xa5, 0x00, 0x00, 0x2f, 0xff, 0xff, 0x00, 0x2d, 0xff, 0xff, 0x00, 0xf7, + 0x29, 0x00, 0x00, 0x41, 0xa5, 0x00, 0x00, 0xfd, 0x29, 0x00, 0x00, 0x2b, + 0xff, 0xff, 0x00, 0x2a, 0xff, 0xff, 0x00, 0xe7, 0x29, 0x00, 0x00, 0x43, + 0xa5, 0x00, 0x00, 0x2a, 0xa5, 0x00, 0x00, 0xbb, 0xff, 0xff, 0x00, 0x27, + 0xff, 0xff, 0x00, 0xb9, 0xff, 0xff, 0x00, 0x25, 0xff, 0xff, 0x00, 0x15, + 0xa5, 0x00, 0x00, 0x12, 0xa5, 0x00, 0x02, 0x24, 0x4c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x01, 0x01, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x54, 0x00, 0x00, 0x01, 0x74, + 0x00, 0x00, 0x01, 0x26, 0x00, 0x00, 0x01, 0x25, 0x00, 0x00, 0x01, 0x40, + 0x00, 0x00, 0x01, 0x3f, 0x00, 0x00, 0x00, 0xda, 0xff, 0xff, 0x00, 0xdb, + 0xff, 0xff, 0x00, 0xe1, 0xff, 0xff, 0x00, 0xc0, 0xff, 0xff, 0x00, 0xc1, + 0xff, 0xff, 0x01, 0x08, 0x00, 0x00, 0x00, 0xc2, 0xff, 0xff, 0x00, 0xc7, + 0xff, 0xff, 0x00, 0xd1, 0xff, 0xff, 0x00, 0xca, 0xff, 0xff, 0x00, 0xf8, + 0xff, 0xff, 0x00, 0xaa, 0xff, 0xff, 0x00, 0xb0, 0xff, 0xff, 0x00, 0x07, + 0x00, 0x00, 0x00, 0x8c, 0xff, 0xff, 0x01, 0xc4, 0xff, 0xff, 0x00, 0xa0, + 0xff, 0xff, 0x01, 0xf9, 0xff, 0xff, 0x02, 0x1a, 0x70, 0x00, 0x01, 0x01, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x20, 0x00, 0x00, 0x00, 0xe0, + 0xff, 0xff, 0x01, 0x50, 0x00, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x00, 0xf1, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x30, 0x00, 0x00, 0x00, 0xd0, + 0xff, 0xff, 0x01, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xc0, 0x0b, 0x00, 0x01, 0x60, 0x1c, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0xd0, 0x97, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0xf8, + 0xff, 0xff, 0x02, 0x05, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, + 0xf4, 0xff, 0x00, 0x9e, 0xe7, 0xff, 0x00, 0xc2, 0x89, 0x00, 0x00, 0xdb, + 0xe7, 0xff, 0x00, 0x92, 0xe7, 0xff, 0x00, 0x93, 0xe7, 0xff, 0x00, 0x9c, + 0xe7, 0xff, 0x00, 0x9d, 0xe7, 0xff, 0x00, 0xa4, 0xe7, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x38, 0x8a, 0x00, 0x00, 0x04, 0x8a, 0x00, 0x00, 0xe6, + 0x0e, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xc5, 0xff, 0xff, 0x01, 0x41, 0xe2, 0xff, 0x02, 0x1d, + 0x8f, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0xf8, 0xff, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x01, 0xaa, 0xff, 0xff, 0x00, 0x4a, + 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x70, + 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0xb6, + 0xff, 0xff, 0x01, 0xf7, 0xff, 0xff, 0x00, 0xdb, 0xe3, 0xff, 0x01, 0x9c, + 0xff, 0xff, 0x01, 0x90, 0xff, 0xff, 0x01, 0x80, 0xff, 0xff, 0x01, 0x82, + 0xff, 0xff, 0x02, 0x05, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, + 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x01, 0x1c, 0x00, 0x00, 0x01, 0x01, + 0x00, 0x00, 0x01, 0xa3, 0xe2, 0xff, 0x01, 0x41, 0xdf, 0xff, 0x01, 0xba, + 0xdf, 0xff, 0x00, 0xe4, 0xff, 0xff, 0x02, 0x0b, 0xb1, 0x00, 0x01, 0x01, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x30, 0x00, 0x00, 0x00, 0xd0, + 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x09, 0xd6, 0xff, 0x01, 0x1a, + 0xf1, 0xff, 0x01, 0x19, 0xd6, 0xff, 0x00, 0xd5, 0xd5, 0xff, 0x00, 0xd8, + 0xd5, 0xff, 0x01, 0xe4, 0xd5, 0xff, 0x01, 0x03, 0xd6, 0xff, 0x01, 0xe1, + 0xd5, 0xff, 0x01, 0xe2, 0xd5, 0xff, 0x01, 0xc1, 0xd5, 0xff, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xa0, 0xe3, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x02, 0x0c, 0xbc, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xbc, + 0x5a, 0xff, 0x01, 0xa0, 0x03, 0x00, 0x01, 0xfc, 0x75, 0xff, 0x01, 0xd8, + 0x5a, 0xff, 0x00, 0x30, 0x00, 0x00, 0x01, 0xb1, 0x5a, 0xff, 0x01, 0xb5, + 0x5a, 0xff, 0x01, 0xbf, 0x5a, 0xff, 0x01, 0xee, 0x5a, 0xff, 0x01, 0xd6, + 0x5a, 0xff, 0x01, 0xeb, 0x5a, 0xff, 0x01, 0xd0, 0xff, 0xff, 0x01, 0xbd, + 0x5a, 0xff, 0x01, 0xc8, 0x75, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, + 0x68, 0xff, 0x00, 0x60, 0xfc, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, + 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x28, + 0x00, 0x00, 0x00, 0xd8, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, + 0x00, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, + 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, + 0x00, 0x00, 0x00, 0xe0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x22, + 0x00, 0x00, 0x00, 0xde, 0xff, 0xff, 0x30, 0x0c, 0x31, 0x0d, 0x78, 0x0e, + 0x7f, 0x0f, 0x80, 0x10, 0x81, 0x11, 0x86, 0x12, 0x89, 0x13, 0x8a, 0x13, + 0x8e, 0x14, 0x8f, 0x15, 0x90, 0x16, 0x93, 0x13, 0x94, 0x17, 0x95, 0x18, + 0x96, 0x19, 0x97, 0x1a, 0x9a, 0x1b, 0x9c, 0x19, 0x9d, 0x1c, 0x9e, 0x1d, + 0x9f, 0x1e, 0xa6, 0x1f, 0xa9, 0x1f, 0xae, 0x1f, 0xb1, 0x20, 0xb2, 0x20, + 0xb7, 0x21, 0xbf, 0x22, 0xc5, 0x23, 0xc8, 0x23, 0xcb, 0x23, 0xdd, 0x24, + 0xf2, 0x23, 0xf6, 0x25, 0xf7, 0x26, 0x20, 0x2d, 0x3a, 0x2e, 0x3d, 0x2f, + 0x3e, 0x30, 0x3f, 0x31, 0x40, 0x31, 0x43, 0x32, 0x44, 0x33, 0x45, 0x34, + 0x50, 0x35, 0x51, 0x36, 0x52, 0x37, 0x53, 0x38, 0x54, 0x39, 0x59, 0x3a, + 0x5b, 0x3b, 0x5c, 0x3c, 0x61, 0x3d, 0x63, 0x3e, 0x65, 0x3f, 0x66, 0x40, + 0x68, 0x41, 0x69, 0x42, 0x6a, 0x40, 0x6b, 0x43, 0x6c, 0x44, 0x6f, 0x42, + 0x71, 0x45, 0x72, 0x46, 0x75, 0x47, 0x7d, 0x48, 0x82, 0x49, 0x87, 0x4a, + 0x89, 0x4b, 0x8a, 0x4c, 0x8b, 0x4c, 0x8c, 0x4d, 0x92, 0x4e, 0x9d, 0x4f, + 0x9e, 0x50, 0x45, 0x57, 0x7b, 0x1d, 0x7c, 0x1d, 0x7d, 0x1d, 0x7f, 0x58, + 0x86, 0x59, 0x88, 0x5a, 0x89, 0x5a, 0x8a, 0x5a, 0x8c, 0x5b, 0x8e, 0x5c, + 0x8f, 0x5c, 0xac, 0x5d, 0xad, 0x5e, 0xae, 0x5e, 0xaf, 0x5e, 0xc2, 0x5f, + 0xcc, 0x60, 0xcd, 0x61, 0xce, 0x61, 0xcf, 0x62, 0xd0, 0x63, 0xd1, 0x64, + 0xd5, 0x65, 0xd6, 0x66, 0xd7, 0x67, 0xf0, 0x68, 0xf1, 0x69, 0xf2, 0x6a, + 0xf3, 0x6b, 0xf4, 0x6c, 0xf5, 0x6d, 0xf9, 0x6e, 0xfd, 0x2d, 0xfe, 0x2d, + 0xff, 0x2d, 0x50, 0x69, 0x51, 0x69, 0x52, 0x69, 0x53, 0x69, 0x54, 0x69, + 0x55, 0x69, 0x56, 0x69, 0x57, 0x69, 0x58, 0x69, 0x59, 0x69, 0x5a, 0x69, + 0x5b, 0x69, 0x5c, 0x69, 0x5d, 0x69, 0x5e, 0x69, 0x5f, 0x69, 0x82, 0x00, + 0x83, 0x00, 0x84, 0x00, 0x85, 0x00, 0x86, 0x00, 0x87, 0x00, 0x88, 0x00, + 0x89, 0x00, 0xc0, 0x75, 0xcf, 0x76, 0x80, 0x89, 0x81, 0x8a, 0x82, 0x8b, + 0x85, 0x8c, 0x86, 0x8d, 0x70, 0x9d, 0x71, 0x9d, 0x76, 0x9e, 0x77, 0x9e, + 0x78, 0x9f, 0x79, 0x9f, 0x7a, 0xa0, 0x7b, 0xa0, 0x7c, 0xa1, 0x7d, 0xa1, + 0xb3, 0xa2, 0xba, 0xa3, 0xbb, 0xa3, 0xbc, 0xa4, 0xbe, 0xa5, 0xc3, 0xa2, + 0xcc, 0xa4, 0xda, 0xa6, 0xdb, 0xa6, 0xe5, 0x6a, 0xea, 0xa7, 0xeb, 0xa7, + 0xec, 0x6e, 0xf3, 0xa2, 0xf8, 0xa8, 0xf9, 0xa8, 0xfa, 0xa9, 0xfb, 0xa9, + 0xfc, 0xa4, 0x26, 0xb0, 0x2a, 0xb1, 0x2b, 0xb2, 0x4e, 0xb3, 0x84, 0x08, + 0x62, 0xba, 0x63, 0xbb, 0x64, 0xbc, 0x65, 0xbd, 0x66, 0xbe, 0x6d, 0xbf, + 0x6e, 0xc0, 0x6f, 0xc1, 0x70, 0xc2, 0x7e, 0xc3, 0x7f, 0xc3, 0x7d, 0xcf, + 0x8d, 0xd0, 0x94, 0xd1, 0xab, 0xd2, 0xac, 0xd3, 0xad, 0xd4, 0xb0, 0xd5, + 0xb1, 0xd6, 0xb2, 0xd7, 0xc4, 0xd8, 0xc5, 0xd9, 0xc6, 0xda, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x0d, 0x06, 0x06, 0x0e, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x0f, 0x10, 0x11, 0x12, 0x06, 0x13, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x14, 0x15, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x16, 0x17, 0x06, 0x06, + 0x06, 0x18, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x19, 0x06, 0x06, 0x06, 0x06, 0x1a, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x1b, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x1c, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x1d, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1e, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, + 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x01, 0x00, 0x54, 0x56, 0x56, 0x56, + 0x56, 0x56, 0x56, 0x56, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x07, + 0x2b, 0x2b, 0x5b, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x4a, 0x56, + 0x56, 0x05, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, + 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x24, 0x50, 0x79, 0x31, 0x50, 0x31, + 0x50, 0x31, 0x38, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, + 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x4e, 0x31, 0x02, 0x4e, 0x0d, 0x0d, + 0x4e, 0x03, 0x4e, 0x00, 0x24, 0x6e, 0x00, 0x4e, 0x31, 0x26, 0x6e, 0x51, + 0x4e, 0x24, 0x50, 0x4e, 0x39, 0x14, 0x81, 0x1b, 0x1d, 0x1d, 0x53, 0x31, + 0x50, 0x31, 0x50, 0x0d, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x1b, 0x53, + 0x24, 0x50, 0x31, 0x02, 0x5c, 0x7b, 0x5c, 0x7b, 0x5c, 0x7b, 0x5c, 0x7b, + 0x5c, 0x7b, 0x14, 0x79, 0x5c, 0x7b, 0x5c, 0x7b, 0x5c, 0x2d, 0x2b, 0x49, + 0x03, 0x48, 0x03, 0x78, 0x5c, 0x7b, 0x14, 0x00, 0x96, 0x0a, 0x01, 0x2b, + 0x28, 0x06, 0x06, 0x00, 0x2a, 0x06, 0x2a, 0x2a, 0x2b, 0x07, 0xbb, 0xb5, + 0x2b, 0x1e, 0x00, 0x2b, 0x07, 0x2b, 0x2b, 0x2b, 0x01, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x01, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2a, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0xcd, 0x46, 0xcd, 0x2b, 0x00, + 0x25, 0x2b, 0x07, 0x01, 0x06, 0x01, 0x55, 0x56, 0x56, 0x56, 0x56, 0x56, + 0x55, 0x56, 0x56, 0x02, 0x24, 0x81, 0x81, 0x81, 0x81, 0x81, 0x15, 0x81, + 0x81, 0x81, 0x00, 0x00, 0x2b, 0x00, 0xb2, 0xd1, 0xb2, 0xd1, 0xb2, 0xd1, + 0xb2, 0xd1, 0x00, 0x00, 0xcd, 0xcc, 0x01, 0x00, 0xd7, 0xd7, 0xd7, 0xd7, + 0xd7, 0x83, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, + 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0x1c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, + 0x31, 0x50, 0x31, 0x02, 0x00, 0x00, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, + 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, + 0x4e, 0x31, 0x50, 0x31, 0x50, 0x4e, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, + 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x02, 0x87, 0xa6, + 0x87, 0xa6, 0x87, 0xa6, 0x87, 0xa6, 0x87, 0xa6, 0x87, 0xa6, 0x87, 0xa6, + 0x87, 0xa6, 0x2a, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x00, 0x00, 0x00, 0x54, 0x56, 0x56, 0x56, 0x56, 0x56, + 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, + 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0c, 0x00, 0x0c, 0x2a, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x07, + 0x2a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x56, 0x56, + 0x6c, 0x81, 0x15, 0x00, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x07, 0x6c, + 0x03, 0x41, 0x2b, 0x2b, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, + 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x2c, 0x56, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x6c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x25, 0x06, 0x25, + 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, + 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, + 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, + 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x56, 0x7a, + 0x9e, 0x26, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, + 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, + 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x25, 0x06, 0x01, 0x2b, 0x2b, + 0x4f, 0x56, 0x56, 0x2c, 0x2b, 0x7f, 0x56, 0x56, 0x39, 0x2b, 0x2b, 0x55, + 0x56, 0x56, 0x2b, 0x2b, 0x4f, 0x56, 0x56, 0x2c, 0x2b, 0x7f, 0x56, 0x56, + 0x81, 0x37, 0x75, 0x5b, 0x7b, 0x5c, 0x2b, 0x2b, 0x4f, 0x56, 0x56, 0x02, + 0xac, 0x04, 0x00, 0x00, 0x39, 0x2b, 0x2b, 0x55, 0x56, 0x56, 0x2b, 0x2b, + 0x4f, 0x56, 0x56, 0x2c, 0x2b, 0x2b, 0x56, 0x56, 0x32, 0x13, 0x81, 0x57, + 0x00, 0x6f, 0x81, 0x7e, 0xc9, 0xd7, 0x7e, 0x2d, 0x81, 0x81, 0x0e, 0x7e, + 0x39, 0x7f, 0x6f, 0x57, 0x00, 0x81, 0x81, 0x7e, 0x15, 0x00, 0x7e, 0x03, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x07, 0x2b, 0x24, 0x2b, 0x97, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2a, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x56, 0x56, 0x56, 0x56, + 0x56, 0x80, 0x81, 0x81, 0x81, 0x81, 0x39, 0xbb, 0x2a, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x01, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, + 0x81, 0x81, 0x81, 0x81, 0x81, 0xc9, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, + 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xac, 0xd0, 0x0d, 0x00, + 0x4e, 0x31, 0x02, 0xb4, 0xc1, 0xc1, 0xd7, 0xd7, 0x24, 0x50, 0x31, 0x50, + 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, + 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, + 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0xd7, 0xd7, 0x53, 0xc1, 0x47, 0xd4, + 0xd7, 0xd7, 0xd7, 0x05, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x07, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x4e, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, + 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x24, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x31, 0x50, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x79, 0x5c, 0x7b, 0x5c, 0x7b, + 0x4f, 0x7b, 0x5c, 0x7b, 0x5c, 0x7b, 0x5c, 0x7b, 0x5c, 0x7b, 0x5c, 0x7b, + 0x5c, 0x7b, 0x5c, 0x7b, 0x5c, 0x7b, 0x5c, 0x7b, 0x5c, 0x2d, 0x2b, 0x2b, + 0x79, 0x14, 0x5c, 0x7b, 0x5c, 0x2d, 0x79, 0x2a, 0x5c, 0x27, 0x5c, 0x7b, + 0x5c, 0x7b, 0x5c, 0x7b, 0xa4, 0x00, 0x0a, 0xb4, 0x5c, 0x7b, 0x5c, 0x7b, + 0x4f, 0x03, 0x2a, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x07, 0x00, 0x48, 0x56, 0x56, + 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x55, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, + 0x56, 0x56, 0x56, 0x56, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x24, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x07, 0x00, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, + 0x56, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x07, 0x00, 0x00, 0x00, 0x00, 0x56, 0x56, 0x56, 0x56, + 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, + 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x56, 0x56, + 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, + 0x56, 0x56, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x2b, + 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x55, 0x56, 0x56, + 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x0e, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x27, 0x51, 0x6f, 0x77, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, + 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x8e, + 0x92, 0x97, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xb4, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc6, 0xc9, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0x00, 0x00, + 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xed, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0a, 0x00, + 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01, 0x20, + 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x03, 0x20, 0x00, 0x00, 0x04, 0x20, + 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x06, 0x20, 0x00, 0x00, 0x08, 0x20, + 0x00, 0x00, 0x09, 0x20, 0x00, 0x00, 0x0a, 0x20, 0x00, 0x00, 0x28, 0x20, + 0x00, 0x00, 0x29, 0x20, 0x00, 0x00, 0x5f, 0x20, 0x00, 0x00, 0x00, 0x30, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x05, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x01, 0xc9, 0x04, 0x2c, 0x00, 0x2a, 0x5f, 0x5f, 0x69, 0x6d, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x77, 0x61, 0x73, 0x69, 0x5f, + 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x70, 0x72, 0x65, + 0x76, 0x69, 0x65, 0x77, 0x31, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x5f, 0x67, + 0x65, 0x74, 0x01, 0x30, 0x5f, 0x5f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, + 0x65, 0x64, 0x5f, 0x77, 0x61, 0x73, 0x69, 0x5f, 0x73, 0x6e, 0x61, 0x70, + 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, + 0x31, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, + 0x5f, 0x67, 0x65, 0x74, 0x02, 0x2b, 0x5f, 0x5f, 0x69, 0x6d, 0x70, 0x6f, + 0x72, 0x74, 0x65, 0x64, 0x5f, 0x77, 0x61, 0x73, 0x69, 0x5f, 0x73, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x31, 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x5f, 0x65, 0x78, 0x69, + 0x74, 0x03, 0x11, 0x5f, 0x5f, 0x77, 0x61, 0x73, 0x6d, 0x5f, 0x63, 0x61, + 0x6c, 0x6c, 0x5f, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x04, 0x13, 0x75, 0x6e, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x77, 0x65, 0x61, 0x6b, + 0x3a, 0x6d, 0x61, 0x69, 0x6e, 0x05, 0x12, 0x5f, 0x5f, 0x77, 0x61, 0x73, + 0x6d, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, + 0x79, 0x06, 0x06, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x07, 0x0a, 0x72, + 0x65, 0x73, 0x65, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x70, 0x08, 0x06, 0x6d, + 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x09, 0x04, 0x66, 0x72, 0x65, 0x65, 0x0a, + 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x0b, 0x07, 0x72, 0x65, 0x61, + 0x6c, 0x6c, 0x6f, 0x63, 0x0c, 0x05, 0x5f, 0x45, 0x78, 0x69, 0x74, 0x0d, + 0x0b, 0x5f, 0x5f, 0x6d, 0x61, 0x69, 0x6e, 0x5f, 0x76, 0x6f, 0x69, 0x64, + 0x0e, 0x0f, 0x5f, 0x5f, 0x77, 0x61, 0x73, 0x69, 0x5f, 0x61, 0x72, 0x67, + 0x73, 0x5f, 0x67, 0x65, 0x74, 0x0f, 0x15, 0x5f, 0x5f, 0x77, 0x61, 0x73, + 0x69, 0x5f, 0x61, 0x72, 0x67, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, + 0x5f, 0x67, 0x65, 0x74, 0x10, 0x10, 0x5f, 0x5f, 0x77, 0x61, 0x73, 0x69, + 0x5f, 0x70, 0x72, 0x6f, 0x63, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x11, 0x05, + 0x64, 0x75, 0x6d, 0x6d, 0x79, 0x12, 0x11, 0x5f, 0x5f, 0x77, 0x61, 0x73, + 0x6d, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x74, 0x6f, 0x72, 0x73, + 0x13, 0x06, 0x6d, 0x65, 0x6d, 0x63, 0x70, 0x79, 0x14, 0x06, 0x6d, 0x65, + 0x6d, 0x73, 0x65, 0x74, 0x15, 0x06, 0x73, 0x74, 0x72, 0x6c, 0x65, 0x6e, + 0x16, 0x08, 0x69, 0x73, 0x77, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x17, 0x06, + 0x6d, 0x65, 0x6d, 0x63, 0x6d, 0x70, 0x18, 0x06, 0x6d, 0x65, 0x6d, 0x63, + 0x68, 0x72, 0x19, 0x06, 0x73, 0x74, 0x72, 0x63, 0x6d, 0x70, 0x1a, 0x08, + 0x74, 0x6f, 0x77, 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x1b, 0x07, 0x63, 0x61, + 0x73, 0x65, 0x6d, 0x61, 0x70, 0x1c, 0x08, 0x74, 0x6f, 0x77, 0x75, 0x70, + 0x70, 0x65, 0x72, 0x1d, 0x07, 0x73, 0x74, 0x72, 0x6e, 0x63, 0x6d, 0x70, + 0x1e, 0x08, 0x69, 0x73, 0x77, 0x75, 0x70, 0x70, 0x65, 0x72, 0x1f, 0x07, + 0x6d, 0x65, 0x6d, 0x6d, 0x6f, 0x76, 0x65, 0x20, 0x08, 0x69, 0x73, 0x77, + 0x6c, 0x6f, 0x77, 0x65, 0x72, 0x21, 0x07, 0x69, 0x73, 0x62, 0x6c, 0x61, + 0x6e, 0x6b, 0x22, 0x08, 0x69, 0x73, 0x77, 0x62, 0x6c, 0x61, 0x6e, 0x6b, + 0x23, 0x08, 0x69, 0x73, 0x77, 0x64, 0x69, 0x67, 0x69, 0x74, 0x24, 0x07, + 0x73, 0x74, 0x72, 0x6e, 0x63, 0x61, 0x74, 0x25, 0x09, 0x5f, 0x5f, 0x73, + 0x74, 0x70, 0x6e, 0x63, 0x70, 0x79, 0x26, 0x07, 0x73, 0x74, 0x72, 0x6e, + 0x63, 0x70, 0x79, 0x27, 0x09, 0x69, 0x73, 0x77, 0x78, 0x64, 0x69, 0x67, + 0x69, 0x74, 0x28, 0x06, 0x77, 0x63, 0x73, 0x6c, 0x65, 0x6e, 0x29, 0x06, + 0x77, 0x63, 0x73, 0x63, 0x68, 0x72, 0x2a, 0x08, 0x69, 0x73, 0x77, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x2b, 0x08, 0x69, 0x73, 0x77, 0x61, 0x6c, 0x6e, + 0x75, 0x6d, 0x07, 0x33, 0x02, 0x00, 0x0f, 0x5f, 0x5f, 0x73, 0x74, 0x61, + 0x63, 0x6b, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x01, 0x1f, + 0x47, 0x4f, 0x54, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x5f, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x09, 0x0a, 0x01, 0x00, 0x07, + 0x2e, 0x72, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x00, 0x76, 0x09, 0x70, 0x72, + 0x6f, 0x64, 0x75, 0x63, 0x65, 0x72, 0x73, 0x01, 0x0c, 0x70, 0x72, 0x6f, + 0x63, 0x65, 0x73, 0x73, 0x65, 0x64, 0x2d, 0x62, 0x79, 0x01, 0x05, 0x63, + 0x6c, 0x61, 0x6e, 0x67, 0x56, 0x31, 0x37, 0x2e, 0x30, 0x2e, 0x36, 0x20, + 0x28, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6c, 0x6c, 0x76, 0x6d, + 0x2f, 0x6c, 0x6c, 0x76, 0x6d, 0x2d, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x20, 0x36, 0x30, 0x30, 0x39, 0x37, 0x30, 0x38, 0x62, 0x34, 0x33, + 0x36, 0x37, 0x31, 0x37, 0x31, 0x63, 0x63, 0x64, 0x62, 0x66, 0x34, 0x62, + 0x35, 0x39, 0x30, 0x35, 0x63, 0x62, 0x36, 0x61, 0x38, 0x30, 0x33, 0x37, + 0x35, 0x33, 0x66, 0x65, 0x31, 0x38, 0x29, 0x00, 0x39, 0x0f, 0x74, 0x61, + 0x72, 0x67, 0x65, 0x74, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x73, 0x03, 0x2b, 0x0b, 0x62, 0x75, 0x6c, 0x6b, 0x2d, 0x6d, 0x65, 0x6d, + 0x6f, 0x72, 0x79, 0x2b, 0x0f, 0x6d, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x2d, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x73, 0x2b, 0x08, 0x73, 0x69, + 0x67, 0x6e, 0x2d, 0x65, 0x78, 0x74 +}; +unsigned int STDLIB_WASM_LEN = 15582; diff --git a/parser/nnsrc/wasm_store.c b/parser/nnsrc/wasm_store.c new file mode 100644 index 00000000..37523818 --- /dev/null +++ b/parser/nnsrc/wasm_store.c @@ -0,0 +1,1847 @@ +#include "api.h" +#include "./parser.h" +#include + +#ifdef TREE_SITTER_FEATURE_WASM + +#include "./alloc.h" +#include "./array.h" +#include "./atomic.h" +#include "./language.h" +#include "./lexer.h" +#include "./wasm/wasm-stdlib.h" +#include "./wasm_store.h" + +#include +#include +#include + +#define array_len(a) (sizeof(a) / sizeof(a[0])) + +// The following symbols from the C and C++ standard libraries are available +// for external scanners to use. +const char *STDLIB_SYMBOLS[] = { + #include "./stdlib-symbols.txt" +}; + +// The contents of the `dylink.0` custom section of a wasm module, +// as specified by the current WebAssembly dynamic linking ABI proposal. +typedef struct { + uint32_t memory_size; + uint32_t memory_align; + uint32_t table_size; + uint32_t table_align; +} WasmDylinkInfo; + +// WasmLanguageId - A pointer used to identify a language. This language id is +// reference-counted, so that its ownership can be shared between the language +// itself and the instances of the language that are held in wasm stores. +typedef struct { + volatile uint32_t ref_count; + volatile uint32_t is_language_deleted; +} WasmLanguageId; + +// LanguageWasmModule - Additional data associated with a wasm-backed +// `TSLanguage`. This data is read-only and does not reference a particular +// wasm store, so it can be shared by all users of a `TSLanguage`. A pointer to +// this is stored on the language itself. +typedef struct { + volatile uint32_t ref_count; + WasmLanguageId *language_id; + wasmtime_module_t *module; + const char *name; + char *symbol_name_buffer; + char *field_name_buffer; + WasmDylinkInfo dylink_info; +} LanguageWasmModule; + +// LanguageWasmInstance - Additional data associated with an instantiation of +// a `TSLanguage` in a particular wasm store. The wasm store holds one of +// these structs for each language that it has instantiated. +typedef struct { + WasmLanguageId *language_id; + wasmtime_instance_t instance; + int32_t external_states_address; + int32_t lex_main_fn_index; + int32_t lex_keyword_fn_index; + int32_t scanner_create_fn_index; + int32_t scanner_destroy_fn_index; + int32_t scanner_serialize_fn_index; + int32_t scanner_deserialize_fn_index; + int32_t scanner_scan_fn_index; +} LanguageWasmInstance; + +typedef struct { + uint32_t reset_heap; + uint32_t proc_exit; + uint32_t abort; + uint32_t assert_fail; + uint32_t notify_memory_growth; + uint32_t debug_message; + uint32_t at_exit; + uint32_t args_get; + uint32_t args_sizes_get; +} BuiltinFunctionIndices; + +// TSWasmStore - A struct that allows a given `Parser` to use wasm-backed +// languages. This struct is mutable, and can only be used by one parser at a +// time. +struct TSWasmStore { + wasm_engine_t *engine; + wasmtime_store_t *store; + wasmtime_table_t function_table; + wasmtime_memory_t memory; + TSLexer *current_lexer; + LanguageWasmInstance *current_instance; + Array(LanguageWasmInstance) language_instances; + uint32_t current_memory_offset; + uint32_t current_function_table_offset; + uint32_t *stdlib_fn_indices; + BuiltinFunctionIndices builtin_fn_indices; + wasmtime_global_t stack_pointer_global; + wasm_globaltype_t *const_i32_type; + bool has_error; + uint32_t lexer_address; +}; + +typedef Array(char) StringData; + +// LanguageInWasmMemory - The memory layout of a `TSLanguage` when compiled to +// wasm32. This is used to copy static language data out of the wasm memory. +typedef struct { + uint32_t version; + uint32_t symbol_count; + uint32_t alias_count; + uint32_t token_count; + uint32_t external_token_count; + uint32_t state_count; + uint32_t large_state_count; + uint32_t production_id_count; + uint32_t field_count; + uint16_t max_alias_sequence_length; + int32_t parse_table; + int32_t small_parse_table; + int32_t small_parse_table_map; + int32_t parse_actions; + int32_t symbol_names; + int32_t field_names; + int32_t field_map_slices; + int32_t field_map_entries; + int32_t symbol_metadata; + int32_t public_symbol_map; + int32_t alias_map; + int32_t alias_sequences; + int32_t lex_modes; + int32_t lex_fn; + int32_t keyword_lex_fn; + TSSymbol keyword_capture_token; + struct { + int32_t states; + int32_t symbol_map; + int32_t create; + int32_t destroy; + int32_t scan; + int32_t serialize; + int32_t deserialize; + } external_scanner; + int32_t primary_state_ids; +} LanguageInWasmMemory; + +// LexerInWasmMemory - The memory layout of a `TSLexer` when compiled to wasm32. +// This is used to copy mutable lexing state in and out of the wasm memory. +typedef struct { + int32_t lookahead; + TSSymbol result_symbol; + int32_t advance; + int32_t mark_end; + int32_t get_column; + int32_t is_at_included_range_start; + int32_t eof; +} LexerInWasmMemory; + +static volatile uint32_t NEXT_LANGUAGE_ID; + +// Linear memory layout: +// [ <-- stack | stdlib statics | lexer | language statics --> | serialization_buffer | heap --> ] +#define MAX_MEMORY_SIZE (128 * 1024 * 1024 / MEMORY_PAGE_SIZE) + +/************************ + * WasmDylinkMemoryInfo + ***********************/ + +static uint8_t read_u8(const uint8_t **p, const uint8_t *end) { + return *(*p)++; +} + +static inline uint64_t read_uleb128(const uint8_t **p, const uint8_t *end) { + uint64_t value = 0; + unsigned shift = 0; + do { + if (*p == end) return UINT64_MAX; + value += (uint64_t)(**p & 0x7f) << shift; + shift += 7; + } while (*((*p)++) >= 128); + return value; +} + +static bool wasm_dylink_info__parse( + const uint8_t *bytes, + size_t length, + WasmDylinkInfo *info +) { + const uint8_t WASM_MAGIC_NUMBER[4] = {0, 'a', 's', 'm'}; + const uint8_t WASM_VERSION[4] = {1, 0, 0, 0}; + const uint8_t WASM_CUSTOM_SECTION = 0x0; + const uint8_t WASM_DYLINK_MEM_INFO = 0x1; + + const uint8_t *p = bytes; + const uint8_t *end = bytes + length; + + if (length < 8) return false; + if (memcmp(p, WASM_MAGIC_NUMBER, 4) != 0) return false; + p += 4; + if (memcmp(p, WASM_VERSION, 4) != 0) return false; + p += 4; + + while (p < end) { + uint8_t section_id = read_u8(&p, end); + uint32_t section_length = read_uleb128(&p, end); + const uint8_t *section_end = p + section_length; + if (section_end > end) return false; + + if (section_id == WASM_CUSTOM_SECTION) { + uint32_t name_length = read_uleb128(&p, section_end); + const uint8_t *name_end = p + name_length; + if (name_end > section_end) return false; + + if (name_length == 8 && memcmp(p, "dylink.0", 8) == 0) { + p = name_end; + while (p < section_end) { + uint8_t subsection_type = read_u8(&p, section_end); + uint32_t subsection_size = read_uleb128(&p, section_end); + const uint8_t *subsection_end = p + subsection_size; + if (subsection_end > section_end) return false; + if (subsection_type == WASM_DYLINK_MEM_INFO) { + info->memory_size = read_uleb128(&p, subsection_end); + info->memory_align = read_uleb128(&p, subsection_end); + info->table_size = read_uleb128(&p, subsection_end); + info->table_align = read_uleb128(&p, subsection_end); + return true; + } + p = subsection_end; + } + } + } + p = section_end; + } + return false; +} + +/******************************************* + * Native callbacks exposed to wasm modules + *******************************************/ + + static wasm_trap_t *callback__abort( + void *env, + wasmtime_caller_t* caller, + wasmtime_val_raw_t *args_and_results, + size_t args_and_results_len +) { + return wasmtime_trap_new("wasm module called abort", 24); +} + +static wasm_trap_t *callback__debug_message( + void *env, + wasmtime_caller_t* caller, + wasmtime_val_raw_t *args_and_results, + size_t args_and_results_len +) { + wasmtime_context_t *context = wasmtime_caller_context(caller); + TSWasmStore *store = env; + assert(args_and_results_len == 2); + uint32_t string_address = args_and_results[0].i32; + uint32_t value = args_and_results[1].i32; + uint8_t *memory = wasmtime_memory_data(context, &store->memory); + printf("DEBUG: %s %u\n", &memory[string_address], value); + return NULL; +} + +static wasm_trap_t *callback__noop( + void *env, + wasmtime_caller_t* caller, + wasmtime_val_raw_t *args_and_results, + size_t args_and_results_len +) { + return NULL; +} + +static wasm_trap_t *callback__lexer_advance( + void *env, + wasmtime_caller_t* caller, + wasmtime_val_raw_t *args_and_results, + size_t args_and_results_len +) { + wasmtime_context_t *context = wasmtime_caller_context(caller); + assert(args_and_results_len == 2); + + TSWasmStore *store = env; + TSLexer *lexer = store->current_lexer; + bool skip = args_and_results[1].i32; + lexer->advance(lexer, skip); + + uint8_t *memory = wasmtime_memory_data(context, &store->memory); + memcpy(&memory[store->lexer_address], &lexer->lookahead, sizeof(lexer->lookahead)); + return NULL; +} + +static wasm_trap_t *callback__lexer_mark_end( + void *env, + wasmtime_caller_t* caller, + wasmtime_val_raw_t *args_and_results, + size_t args_and_results_len +) { + TSWasmStore *store = env; + TSLexer *lexer = store->current_lexer; + lexer->mark_end(lexer); + return NULL; +} + +static wasm_trap_t *callback__lexer_get_column( + void *env, + wasmtime_caller_t* caller, + wasmtime_val_raw_t *args_and_results, + size_t args_and_results_len +) { + TSWasmStore *store = env; + TSLexer *lexer = store->current_lexer; + uint32_t result = lexer->get_column(lexer); + args_and_results[0].i32 = result; + return NULL; +} + +static wasm_trap_t *callback__lexer_is_at_included_range_start( + void *env, + wasmtime_caller_t* caller, + wasmtime_val_raw_t *args_and_results, + size_t args_and_results_len +) { + TSWasmStore *store = env; + TSLexer *lexer = store->current_lexer; + bool result = lexer->is_at_included_range_start(lexer); + args_and_results[0].i32 = result; + return NULL; +} + +static wasm_trap_t *callback__lexer_eof( + void *env, + wasmtime_caller_t* caller, + wasmtime_val_raw_t *args_and_results, + size_t args_and_results_len +) { + TSWasmStore *store = env; + TSLexer *lexer = store->current_lexer; + bool result = lexer->eof(lexer); + args_and_results[0].i32 = result; + return NULL; +} + +typedef struct { + uint32_t *storage_location; + wasmtime_func_unchecked_callback_t callback; + wasm_functype_t *type; +} FunctionDefinition; + +static void *copy(const void *data, size_t size) { + void *result = ts_malloc(size); + memcpy(result, data, size); + return result; +} + +static void *copy_unsized_static_array( + const uint8_t *data, + int32_t start_address, + const int32_t all_addresses[], + size_t address_count +) { + int32_t end_address = 0; + for (unsigned i = 0; i < address_count; i++) { + if (all_addresses[i] > start_address) { + if (!end_address || all_addresses[i] < end_address) { + end_address = all_addresses[i]; + } + } + } + + if (!end_address) return NULL; + size_t size = end_address - start_address; + void *result = ts_malloc(size); + memcpy(result, &data[start_address], size); + return result; +} + +static void *copy_strings( + const uint8_t *data, + int32_t array_address, + size_t count, + StringData *string_data +) { + const char **result = ts_malloc(count * sizeof(char *)); + for (unsigned i = 0; i < count; i++) { + int32_t address; + memcpy(&address, &data[array_address + i * sizeof(address)], sizeof(address)); + if (address == 0) { + result[i] = (const char *)-1; + } else { + const uint8_t *string = &data[address]; + uint32_t len = strlen((const char *)string); + result[i] = (const char *)(uintptr_t)string_data->size; + array_extend(string_data, len + 1, string); + } + } + for (unsigned i = 0; i < count; i++) { + if (result[i] == (const char *)-1) { + result[i] = NULL; + } else { + result[i] = string_data->contents + (uintptr_t)result[i]; + } + } + return result; +} + +static bool name_eq(const wasm_name_t *name, const char *string) { + return strncmp(string, name->data, name->size) == 0; +} + +static inline wasm_functype_t* wasm_functype_new_4_0( + wasm_valtype_t* p1, + wasm_valtype_t* p2, + wasm_valtype_t* p3, + wasm_valtype_t* p4 +) { + wasm_valtype_t* ps[4] = {p1, p2, p3, p4}; + wasm_valtype_vec_t params, results; + wasm_valtype_vec_new(¶ms, 4, ps); + wasm_valtype_vec_new_empty(&results); + return wasm_functype_new(¶ms, &results); +} + +#define format(output, ...) \ + do { \ + size_t message_length = snprintf((char *)NULL, 0, __VA_ARGS__); \ + *output = ts_malloc(message_length + 1); \ + snprintf(*output, message_length + 1, __VA_ARGS__); \ + } while (0) + +WasmLanguageId *language_id_new() { + WasmLanguageId *self = ts_malloc(sizeof(WasmLanguageId)); + self->is_language_deleted = false; + self->ref_count = 1; + return self; +} + +WasmLanguageId *language_id_clone(WasmLanguageId *self) { + atomic_inc(&self->ref_count); + return self; +} + +void language_id_delete(WasmLanguageId *self) { + if (atomic_dec(&self->ref_count) == 0) { + ts_free(self); + } +} + +static wasmtime_extern_t get_builtin_extern( + wasmtime_table_t *table, + unsigned index +) { + return (wasmtime_extern_t) { + .kind = WASMTIME_EXTERN_FUNC, + .of.func = (wasmtime_func_t) { + .store_id = table->store_id, + .__private = index + } + }; +} + +static bool ts_wasm_store__provide_builtin_import( + TSWasmStore *self, + const wasm_name_t *import_name, + wasmtime_extern_t *import +) { + wasmtime_error_t *error = NULL; + wasmtime_context_t *context = wasmtime_store_context(self->store); + + // Dynamic linking parameters + if (name_eq(import_name, "__memory_base")) { + wasmtime_val_t value = WASM_I32_VAL(self->current_memory_offset); + wasmtime_global_t global; + error = wasmtime_global_new(context, self->const_i32_type, &value, &global); + assert(!error); + *import = (wasmtime_extern_t) {.kind = WASMTIME_EXTERN_GLOBAL, .of.global = global}; + } else if (name_eq(import_name, "__table_base")) { + wasmtime_val_t value = WASM_I32_VAL(self->current_function_table_offset); + wasmtime_global_t global; + error = wasmtime_global_new(context, self->const_i32_type, &value, &global); + assert(!error); + *import = (wasmtime_extern_t) {.kind = WASMTIME_EXTERN_GLOBAL, .of.global = global}; + } else if (name_eq(import_name, "__stack_pointer")) { + *import = (wasmtime_extern_t) {.kind = WASMTIME_EXTERN_GLOBAL, .of.global = self->stack_pointer_global}; + } else if (name_eq(import_name, "__indirect_function_table")) { + *import = (wasmtime_extern_t) {.kind = WASMTIME_EXTERN_TABLE, .of.table = self->function_table}; + } else if (name_eq(import_name, "memory")) { + *import = (wasmtime_extern_t) {.kind = WASMTIME_EXTERN_MEMORY, .of.memory = self->memory}; + } + + // Builtin functions + else if (name_eq(import_name, "__assert_fail")) { + *import = get_builtin_extern(&self->function_table, self->builtin_fn_indices.assert_fail); + } else if (name_eq(import_name, "__cxa_atexit")) { + *import = get_builtin_extern(&self->function_table, self->builtin_fn_indices.at_exit); + } else if (name_eq(import_name, "args_get")) { + *import = get_builtin_extern(&self->function_table, self->builtin_fn_indices.args_get); + } else if (name_eq(import_name, "args_sizes_get")) { + *import = get_builtin_extern(&self->function_table, self->builtin_fn_indices.args_sizes_get); + } else if (name_eq(import_name, "abort")) { + *import = get_builtin_extern(&self->function_table, self->builtin_fn_indices.abort); + } else if (name_eq(import_name, "proc_exit")) { + *import = get_builtin_extern(&self->function_table, self->builtin_fn_indices.proc_exit); + } else if (name_eq(import_name, "emscripten_notify_memory_growth")) { + *import = get_builtin_extern(&self->function_table, self->builtin_fn_indices.notify_memory_growth); + } else if (name_eq(import_name, "tree_sitter_debug_message")) { + *import = get_builtin_extern(&self->function_table, self->builtin_fn_indices.debug_message); + } else { + return false; + } + + return true; +} + +static bool ts_wasm_store__call_module_initializer( + TSWasmStore *self, + const wasm_name_t *export_name, + wasmtime_extern_t *export, + wasm_trap_t **trap +) { + if ( + name_eq(export_name, "_initialize") || + name_eq(export_name, "__wasm_apply_data_relocs") || + name_eq(export_name, "__wasm_call_ctors") + ) { + wasmtime_context_t *context = wasmtime_store_context(self->store); + wasmtime_func_t initialization_func = export->of.func; + wasmtime_error_t *error = wasmtime_func_call(context, &initialization_func, NULL, 0, NULL, 0, trap); + assert(!error); + return true; + } else { + return false; + } +} + +TSWasmStore *ts_wasm_store_new(TSWasmEngine *engine, TSWasmError *wasm_error) { + TSWasmStore *self = ts_calloc(1, sizeof(TSWasmStore)); + wasmtime_store_t *store = wasmtime_store_new(engine, self, NULL); + wasmtime_context_t *context = wasmtime_store_context(store); + wasmtime_error_t *error = NULL; + wasm_trap_t *trap = NULL; + wasm_message_t message = WASM_EMPTY_VEC; + wasm_exporttype_vec_t export_types = WASM_EMPTY_VEC; + wasmtime_extern_t *imports = NULL; + wasmtime_module_t *stdlib_module = NULL; + wasm_memorytype_t *memory_type = NULL; + wasm_tabletype_t *table_type = NULL; + + // Define functions called by scanners via function pointers on the lexer. + LexerInWasmMemory lexer = { + .lookahead = 0, + .result_symbol = 0, + }; + FunctionDefinition lexer_definitions[] = { + { + (uint32_t *)&lexer.advance, + callback__lexer_advance, + wasm_functype_new_2_0(wasm_valtype_new_i32(), wasm_valtype_new_i32()) + }, + { + (uint32_t *)&lexer.mark_end, + callback__lexer_mark_end, + wasm_functype_new_1_0(wasm_valtype_new_i32()) + }, + { + (uint32_t *)&lexer.get_column, + callback__lexer_get_column, + wasm_functype_new_1_1(wasm_valtype_new_i32(), wasm_valtype_new_i32()) + }, + { + (uint32_t *)&lexer.is_at_included_range_start, + callback__lexer_is_at_included_range_start, + wasm_functype_new_1_1(wasm_valtype_new_i32(), wasm_valtype_new_i32()) + }, + { + (uint32_t *)&lexer.eof, + callback__lexer_eof, + wasm_functype_new_1_1(wasm_valtype_new_i32(), wasm_valtype_new_i32()) + }, + }; + + // Define builtin functions that can be imported by scanners. + BuiltinFunctionIndices builtin_fn_indices; + FunctionDefinition builtin_definitions[] = { + { + &builtin_fn_indices.proc_exit, + callback__abort, + wasm_functype_new_1_0(wasm_valtype_new_i32()) + }, + { + &builtin_fn_indices.abort, + callback__abort, + wasm_functype_new_0_0() + }, + { + &builtin_fn_indices.assert_fail, + callback__abort, + wasm_functype_new_4_0(wasm_valtype_new_i32(), wasm_valtype_new_i32(), wasm_valtype_new_i32(), wasm_valtype_new_i32()) + }, + { + &builtin_fn_indices.notify_memory_growth, + callback__noop, + wasm_functype_new_1_0(wasm_valtype_new_i32()) + }, + { + &builtin_fn_indices.debug_message, + callback__debug_message, + wasm_functype_new_2_0(wasm_valtype_new_i32(), wasm_valtype_new_i32()) + }, + { + &builtin_fn_indices.at_exit, + callback__noop, + wasm_functype_new_3_1(wasm_valtype_new_i32(), wasm_valtype_new_i32(), wasm_valtype_new_i32(), wasm_valtype_new_i32()) + }, + { + &builtin_fn_indices.args_get, + callback__noop, + wasm_functype_new_2_1(wasm_valtype_new_i32(), wasm_valtype_new_i32(), wasm_valtype_new_i32()) + }, + { + &builtin_fn_indices.args_sizes_get, + callback__noop, + wasm_functype_new_2_1(wasm_valtype_new_i32(), wasm_valtype_new_i32(), wasm_valtype_new_i32()) + }, + }; + + // Create all of the wasm functions. + unsigned builtin_definitions_len = array_len(builtin_definitions); + unsigned lexer_definitions_len = array_len(lexer_definitions); + for (unsigned i = 0; i < builtin_definitions_len; i++) { + FunctionDefinition *definition = &builtin_definitions[i]; + wasmtime_func_t func; + wasmtime_func_new_unchecked(context, definition->type, definition->callback, self, NULL, &func); + *definition->storage_location = func.__private; + wasm_functype_delete(definition->type); + } + for (unsigned i = 0; i < lexer_definitions_len; i++) { + FunctionDefinition *definition = &lexer_definitions[i]; + wasmtime_func_t func; + wasmtime_func_new_unchecked(context, definition->type, definition->callback, self, NULL, &func); + *definition->storage_location = func.__private; + wasm_functype_delete(definition->type); + } + + // Compile the stdlib module. + error = wasmtime_module_new(engine, STDLIB_WASM, STDLIB_WASM_LEN, &stdlib_module); + if (error) { + wasmtime_error_message(error, &message); + wasm_error->kind = TSWasmErrorKindCompile; + format( + &wasm_error->message, + "failed to compile wasm stdlib: %.*s", + (int)message.size, message.data + ); + goto error; + } + + // Retrieve the stdlib module's imports. + wasm_importtype_vec_t import_types = WASM_EMPTY_VEC; + wasmtime_module_imports(stdlib_module, &import_types); + + // Find the initial number of memory pages needed by the stdlib. + const wasm_memorytype_t *stdlib_memory_type; + for (unsigned i = 0; i < import_types.size; i++) { + wasm_importtype_t *import_type = import_types.data[i]; + const wasm_name_t *import_name = wasm_importtype_name(import_type); + if (name_eq(import_name, "memory")) { + const wasm_externtype_t *type = wasm_importtype_type(import_type); + stdlib_memory_type = wasm_externtype_as_memorytype_const(type); + } + } + if (!stdlib_memory_type) { + wasm_error->kind = TSWasmErrorKindCompile; + format( + &wasm_error->message, + "wasm stdlib is missing the 'memory' import" + ); + goto error; + } + + // Initialize store's memory + uint64_t initial_memory_pages = wasmtime_memorytype_minimum(stdlib_memory_type); + wasm_limits_t memory_limits = {.min = initial_memory_pages, .max = MAX_MEMORY_SIZE}; + memory_type = wasm_memorytype_new(&memory_limits); + wasmtime_memory_t memory; + error = wasmtime_memory_new(context, memory_type, &memory); + if (error) { + wasmtime_error_message(error, &message); + wasm_error->kind = TSWasmErrorKindAllocate; + format( + &wasm_error->message, + "failed to allocate wasm memory: %.*s", + (int)message.size, message.data + ); + goto error; + } + wasm_memorytype_delete(memory_type); + memory_type = NULL; + + // Initialize store's function table + wasm_limits_t table_limits = {.min = 1, .max = wasm_limits_max_default}; + table_type = wasm_tabletype_new(wasm_valtype_new(WASM_FUNCREF), &table_limits); + wasmtime_val_t initializer = {.kind = WASMTIME_FUNCREF}; + wasmtime_table_t function_table; + error = wasmtime_table_new(context, table_type, &initializer, &function_table); + if (error) { + wasmtime_error_message(error, &message); + wasm_error->kind = TSWasmErrorKindAllocate; + format( + &wasm_error->message, + "failed to allocate wasm table: %.*s", + (int)message.size, message.data + ); + goto error; + } + wasm_tabletype_delete(table_type); + table_type = NULL; + + unsigned stdlib_symbols_len = array_len(STDLIB_SYMBOLS); + + // Define globals for the stack and heap start addresses. + wasm_globaltype_t *const_i32_type = wasm_globaltype_new(wasm_valtype_new_i32(), WASM_CONST); + wasm_globaltype_t *var_i32_type = wasm_globaltype_new(wasm_valtype_new_i32(), WASM_VAR); + + wasmtime_val_t stack_pointer_value = WASM_I32_VAL(0); + wasmtime_global_t stack_pointer_global; + error = wasmtime_global_new(context, var_i32_type, &stack_pointer_value, &stack_pointer_global); + assert(!error); + + *self = (TSWasmStore) { + .engine = engine, + .store = store, + .memory = memory, + .function_table = function_table, + .language_instances = array_new(), + .stdlib_fn_indices = ts_calloc(stdlib_symbols_len, sizeof(uint32_t)), + .builtin_fn_indices = builtin_fn_indices, + .stack_pointer_global = stack_pointer_global, + .current_memory_offset = 0, + .current_function_table_offset = 0, + .const_i32_type = const_i32_type, + }; + + // Set up the imports for the stdlib module. + imports = ts_calloc(import_types.size, sizeof(wasmtime_extern_t)); + for (unsigned i = 0; i < import_types.size; i++) { + wasm_importtype_t *type = import_types.data[i]; + const wasm_name_t *import_name = wasm_importtype_name(type); + if (!ts_wasm_store__provide_builtin_import(self, import_name, &imports[i])) { + wasm_error->kind = TSWasmErrorKindInstantiate; + format( + &wasm_error->message, + "unexpected import in wasm stdlib: %.*s\n", + (int)import_name->size, import_name->data + ); + goto error; + } + } + + // Instantiate the stdlib module. + wasmtime_instance_t instance; + error = wasmtime_instance_new(context, stdlib_module, imports, import_types.size, &instance, &trap); + ts_free(imports); + imports = NULL; + if (error) { + wasmtime_error_message(error, &message); + wasm_error->kind = TSWasmErrorKindInstantiate; + format( + &wasm_error->message, + "failed to instantiate wasm stdlib module: %.*s", + (int)message.size, message.data + ); + goto error; + } + if (trap) { + wasm_trap_message(trap, &message); + wasm_error->kind = TSWasmErrorKindInstantiate; + format( + &wasm_error->message, + "trapped when instantiating wasm stdlib module: %.*s", + (int)message.size, message.data + ); + goto error; + } + wasm_importtype_vec_delete(&import_types); + + // Process the stdlib module's exports. + for (unsigned i = 0; i < stdlib_symbols_len; i++) { + self->stdlib_fn_indices[i] = UINT32_MAX; + } + wasmtime_module_exports(stdlib_module, &export_types); + for (unsigned i = 0; i < export_types.size; i++) { + wasm_exporttype_t *export_type = export_types.data[i]; + const wasm_name_t *name = wasm_exporttype_name(export_type); + + char *export_name; + size_t name_len; + wasmtime_extern_t export = {.kind = WASM_EXTERN_GLOBAL}; + bool exists = wasmtime_instance_export_nth(context, &instance, i, &export_name, &name_len, &export); + assert(exists); + + if (export.kind == WASMTIME_EXTERN_GLOBAL) { + if (name_eq(name, "__stack_pointer")) { + self->stack_pointer_global = export.of.global; + } + } + + if (export.kind == WASMTIME_EXTERN_FUNC) { + if (ts_wasm_store__call_module_initializer(self, name, &export, &trap)) { + if (trap) { + wasm_trap_message(trap, &message); + wasm_error->kind = TSWasmErrorKindInstantiate; + format( + &wasm_error->message, + "trap when calling stdlib relocation function: %.*s\n", + (int)message.size, message.data + ); + goto error; + } + continue; + } + + if (name_eq(name, "reset_heap")) { + self->builtin_fn_indices.reset_heap = export.of.func.__private; + continue; + } + + for (unsigned j = 0; j < stdlib_symbols_len; j++) { + if (name_eq(name, STDLIB_SYMBOLS[j])) { + self->stdlib_fn_indices[j] = export.of.func.__private; + break; + } + } + } + } + + if (self->builtin_fn_indices.reset_heap == UINT32_MAX) { + wasm_error->kind = TSWasmErrorKindInstantiate; + format( + &wasm_error->message, + "missing malloc reset function in wasm stdlib" + ); + goto error; + } + + for (unsigned i = 0; i < stdlib_symbols_len; i++) { + if (self->stdlib_fn_indices[i] == UINT32_MAX) { + wasm_error->kind = TSWasmErrorKindInstantiate; + format( + &wasm_error->message, + "missing exported symbol in wasm stdlib: %s", + STDLIB_SYMBOLS[i] + ); + goto error; + } + } + + wasm_exporttype_vec_delete(&export_types); + wasmtime_module_delete(stdlib_module); + + // Add all of the lexer callback functions to the function table. Store their function table + // indices on the in-memory lexer. + uint32_t table_index; + error = wasmtime_table_grow(context, &function_table, lexer_definitions_len, &initializer, &table_index); + if (error) { + wasmtime_error_message(error, &message); + wasm_error->kind = TSWasmErrorKindAllocate; + format( + &wasm_error->message, + "failed to grow wasm table to initial size: %.*s", + (int)message.size, message.data + ); + goto error; + } + for (unsigned i = 0; i < lexer_definitions_len; i++) { + FunctionDefinition *definition = &lexer_definitions[i]; + wasmtime_func_t func = {function_table.store_id, *definition->storage_location}; + wasmtime_val_t func_val = {.kind = WASMTIME_FUNCREF, .of.funcref = func}; + error = wasmtime_table_set(context, &function_table, table_index, &func_val); + assert(!error); + *(int32_t *)(definition->storage_location) = table_index; + table_index++; + } + + self->current_function_table_offset = table_index; + self->lexer_address = initial_memory_pages * MEMORY_PAGE_SIZE; + self->current_memory_offset = self->lexer_address + sizeof(LexerInWasmMemory); + + // Grow the memory enough to hold the builtin lexer and serialization buffer. + uint32_t new_pages_needed = (self->current_memory_offset - self->lexer_address - 1) / MEMORY_PAGE_SIZE + 1; + uint64_t prev_memory_size; + wasmtime_memory_grow(context, &memory, new_pages_needed, &prev_memory_size); + + uint8_t *memory_data = wasmtime_memory_data(context, &memory); + memcpy(&memory_data[self->lexer_address], &lexer, sizeof(lexer)); + return self; + +error: + ts_free(self); + if (stdlib_module) wasmtime_module_delete(stdlib_module); + if (store) wasmtime_store_delete(store); + if (import_types.size) wasm_importtype_vec_delete(&import_types); + if (memory_type) wasm_memorytype_delete(memory_type); + if (table_type) wasm_tabletype_delete(table_type); + if (trap) wasm_trap_delete(trap); + if (error) wasmtime_error_delete(error); + if (message.size) wasm_byte_vec_delete(&message); + if (export_types.size) wasm_exporttype_vec_delete(&export_types); + if (imports) ts_free(imports); + return NULL; +} + +void ts_wasm_store_delete(TSWasmStore *self) { + if (!self) return; + ts_free(self->stdlib_fn_indices); + wasm_globaltype_delete(self->const_i32_type); + wasmtime_store_delete(self->store); + wasm_engine_delete(self->engine); + for (unsigned i = 0; i < self->language_instances.size; i++) { + LanguageWasmInstance *instance = &self->language_instances.contents[i]; + language_id_delete(instance->language_id); + } + array_delete(&self->language_instances); + ts_free(self); +} + +size_t ts_wasm_store_language_count(const TSWasmStore *self) { + size_t result = 0; + for (unsigned i = 0; i < self->language_instances.size; i++) { + const WasmLanguageId *id = self->language_instances.contents[i].language_id; + if (!id->is_language_deleted) { + result++; + } + } + return result; +} + +static uint32_t ts_wasm_store__heap_address(TSWasmStore *self) { + return self->current_memory_offset + TREE_SITTER_SERIALIZATION_BUFFER_SIZE; +} + +static uint32_t ts_wasm_store__serialization_buffer_address(TSWasmStore *self) { + return self->current_memory_offset; +} + +static bool ts_wasm_store__instantiate( + TSWasmStore *self, + wasmtime_module_t *module, + const char *language_name, + const WasmDylinkInfo *dylink_info, + wasmtime_instance_t *result, + int32_t *language_address, + char **error_message +) { + wasmtime_error_t *error = NULL; + wasm_trap_t *trap = NULL; + wasm_message_t message = WASM_EMPTY_VEC; + char *language_function_name = NULL; + wasmtime_extern_t *imports = NULL; + wasmtime_context_t *context = wasmtime_store_context(self->store); + + // Grow the function table to make room for the new functions. + wasmtime_val_t initializer = {.kind = WASMTIME_FUNCREF}; + uint32_t prev_table_size; + error = wasmtime_table_grow(context, &self->function_table, dylink_info->table_size, &initializer, &prev_table_size); + if (error) { + format(error_message, "invalid function table size %u", dylink_info->table_size); + goto error; + } + + // Grow the memory to make room for the new data. + uint32_t needed_memory_size = ts_wasm_store__heap_address(self) + dylink_info->memory_size; + uint32_t current_memory_size = wasmtime_memory_data_size(context, &self->memory); + if (needed_memory_size > current_memory_size) { + uint32_t pages_to_grow = ( + needed_memory_size - current_memory_size + MEMORY_PAGE_SIZE - 1) / + MEMORY_PAGE_SIZE; + uint64_t prev_memory_size; + error = wasmtime_memory_grow(context, &self->memory, pages_to_grow, &prev_memory_size); + if (error) { + format(error_message, "invalid memory size %u", dylink_info->memory_size); + goto error; + } + } + + // Construct the language function name as string. + format(&language_function_name, "tree_sitter_%s", language_name); + + const uint64_t store_id = self->function_table.store_id; + + // Build the imports list for the module. + wasm_importtype_vec_t import_types = WASM_EMPTY_VEC; + wasmtime_module_imports(module, &import_types); + imports = ts_calloc(import_types.size, sizeof(wasmtime_extern_t)); + + for (unsigned i = 0; i < import_types.size; i++) { + const wasm_importtype_t *import_type = import_types.data[i]; + const wasm_name_t *import_name = wasm_importtype_name(import_type); + if (import_name->size == 0) { + format(error_message, "empty import name"); + goto error; + } + + if (ts_wasm_store__provide_builtin_import(self, import_name, &imports[i])) { + continue; + } + + bool defined_in_stdlib = false; + for (unsigned j = 0; j < array_len(STDLIB_SYMBOLS); j++) { + if (name_eq(import_name, STDLIB_SYMBOLS[j])) { + uint16_t address = self->stdlib_fn_indices[j]; + imports[i] = (wasmtime_extern_t) {.kind = WASMTIME_EXTERN_FUNC, .of.func = {store_id, address}}; + defined_in_stdlib = true; + break; + } + } + + if (!defined_in_stdlib) { + format( + error_message, + "invalid import '%.*s'\n", + (int)import_name->size, import_name->data + ); + goto error; + } + } + + wasmtime_instance_t instance; + error = wasmtime_instance_new(context, module, imports, import_types.size, &instance, &trap); + wasm_importtype_vec_delete(&import_types); + ts_free(imports); + imports = NULL; + if (error) { + wasmtime_error_message(error, &message); + format( + error_message, + "error instantiating wasm module: %.*s\n", + (int)message.size, message.data + ); + goto error; + } + if (trap) { + wasm_trap_message(trap, &message); + format( + error_message, + "trap when instantiating wasm module: %.*s\n", + (int)message.size, message.data + ); + goto error; + } + + self->current_memory_offset += dylink_info->memory_size; + self->current_function_table_offset += dylink_info->table_size; + + // Process the module's exports. + bool found_language = false; + wasmtime_extern_t language_extern; + wasm_exporttype_vec_t export_types = WASM_EMPTY_VEC; + wasmtime_module_exports(module, &export_types); + for (unsigned i = 0; i < export_types.size; i++) { + wasm_exporttype_t *export_type = export_types.data[i]; + const wasm_name_t *name = wasm_exporttype_name(export_type); + + size_t name_len; + char *export_name; + wasmtime_extern_t export = {.kind = WASM_EXTERN_GLOBAL}; + bool exists = wasmtime_instance_export_nth(context, &instance, i, &export_name, &name_len, &export); + assert(exists); + + // If the module exports an initialization or data-relocation function, call it. + if (ts_wasm_store__call_module_initializer(self, name, &export, &trap)) { + if (trap) { + wasm_trap_message(trap, &message); + format( + error_message, + "trap when calling data relocation function: %.*s\n", + (int)message.size, message.data + ); + goto error; + } + } + + // Find the main language function for the module. + else if (name_eq(name, language_function_name)) { + language_extern = export; + found_language = true; + } + } + wasm_exporttype_vec_delete(&export_types); + + if (!found_language) { + format( + error_message, + "module did not contain language function: %s", + language_function_name + ); + goto error; + } + + // Invoke the language function to get the static address of the language object. + wasmtime_func_t language_func = language_extern.of.func; + wasmtime_val_t language_address_val; + error = wasmtime_func_call(context, &language_func, NULL, 0, &language_address_val, 1, &trap); + assert(!error); + if (trap) { + wasm_trap_message(trap, &message); + format( + error_message, + "trapped when calling language function: %s: %.*s\n", + language_function_name, (int)message.size, message.data + ); + goto error; + } + + if (language_address_val.kind != WASMTIME_I32) { + format( + error_message, + "language function did not return an integer: %s\n", + language_function_name + ); + goto error; + } + + ts_free(language_function_name); + *result = instance; + *language_address = language_address_val.of.i32; + return true; + +error: + if (language_function_name) ts_free(language_function_name); + if (message.size) wasm_byte_vec_delete(&message); + if (error) wasmtime_error_delete(error); + if (trap) wasm_trap_delete(trap); + if (imports) ts_free(imports); + return false; +} + +static bool ts_wasm_store__sentinel_lex_fn(TSLexer *_lexer, TSStateId state) { + return false; +} + +const TSLanguage *ts_wasm_store_load_language( + TSWasmStore *self, + const char *language_name, + const char *wasm, + uint32_t wasm_len, + TSWasmError *wasm_error +) { + WasmDylinkInfo dylink_info; + wasmtime_module_t *module = NULL; + wasmtime_error_t *error = NULL; + wasm_error->kind = TSWasmErrorKindNone; + + if (!wasm_dylink_info__parse((const unsigned char *)wasm, wasm_len, &dylink_info)) { + wasm_error->kind = TSWasmErrorKindParse; + format(&wasm_error->message, "failed to parse dylink section of wasm module"); + goto error; + } + + // Compile the wasm code. + error = wasmtime_module_new(self->engine, (const uint8_t *)wasm, wasm_len, &module); + if (error) { + wasm_message_t message; + wasmtime_error_message(error, &message); + wasm_error->kind = TSWasmErrorKindCompile; + format(&wasm_error->message, "error compiling wasm module: %.*s", (int)message.size, message.data); + wasm_byte_vec_delete(&message); + goto error; + } + + // Instantiate the module in this store. + wasmtime_instance_t instance; + int32_t language_address; + if (!ts_wasm_store__instantiate( + self, + module, + language_name, + &dylink_info, + &instance, + &language_address, + &wasm_error->message + )) { + wasm_error->kind = TSWasmErrorKindInstantiate; + goto error; + } + + // Copy all of the static data out of the language object in wasm memory, + // constructing a native language object. + LanguageInWasmMemory wasm_language; + wasmtime_context_t *context = wasmtime_store_context(self->store); + const uint8_t *memory = wasmtime_memory_data(context, &self->memory); + memcpy(&wasm_language, &memory[language_address], sizeof(LanguageInWasmMemory)); + + if (wasm_language.version < LANGUAGE_VERSION_USABLE_VIA_WASM) { + wasm_error->kind = TSWasmErrorKindInstantiate; + format(&wasm_error->message, "language version %u is too old for wasm", wasm_language.version); + goto error; + } + + int32_t addresses[] = { + wasm_language.alias_map, + wasm_language.alias_sequences, + wasm_language.field_map_entries, + wasm_language.field_map_slices, + wasm_language.field_names, + wasm_language.keyword_lex_fn, + wasm_language.lex_fn, + wasm_language.lex_modes, + wasm_language.parse_actions, + wasm_language.parse_table, + wasm_language.primary_state_ids, + wasm_language.primary_state_ids, + wasm_language.public_symbol_map, + wasm_language.small_parse_table, + wasm_language.small_parse_table_map, + wasm_language.symbol_metadata, + wasm_language.symbol_metadata, + wasm_language.symbol_names, + wasm_language.external_token_count > 0 ? wasm_language.external_scanner.states : 0, + wasm_language.external_token_count > 0 ? wasm_language.external_scanner.symbol_map : 0, + wasm_language.external_token_count > 0 ? wasm_language.external_scanner.create : 0, + wasm_language.external_token_count > 0 ? wasm_language.external_scanner.destroy : 0, + wasm_language.external_token_count > 0 ? wasm_language.external_scanner.scan : 0, + wasm_language.external_token_count > 0 ? wasm_language.external_scanner.serialize : 0, + wasm_language.external_token_count > 0 ? wasm_language.external_scanner.deserialize : 0, + language_address, + self->current_memory_offset, + }; + uint32_t address_count = array_len(addresses); + + TSLanguage *language = ts_calloc(1, sizeof(TSLanguage)); + StringData symbol_name_buffer = array_new(); + StringData field_name_buffer = array_new(); + + *language = (TSLanguage) { + .version = wasm_language.version, + .symbol_count = wasm_language.symbol_count, + .alias_count = wasm_language.alias_count, + .token_count = wasm_language.token_count, + .external_token_count = wasm_language.external_token_count, + .state_count = wasm_language.state_count, + .large_state_count = wasm_language.large_state_count, + .production_id_count = wasm_language.production_id_count, + .field_count = wasm_language.field_count, + .max_alias_sequence_length = wasm_language.max_alias_sequence_length, + .keyword_capture_token = wasm_language.keyword_capture_token, + .parse_table = copy( + &memory[wasm_language.parse_table], + wasm_language.large_state_count * wasm_language.symbol_count * sizeof(uint16_t) + ), + .parse_actions = copy_unsized_static_array( + memory, + wasm_language.parse_actions, + addresses, + address_count + ), + .symbol_names = copy_strings( + memory, + wasm_language.symbol_names, + wasm_language.symbol_count + wasm_language.alias_count, + &symbol_name_buffer + ), + .symbol_metadata = copy( + &memory[wasm_language.symbol_metadata], + (wasm_language.symbol_count + wasm_language.alias_count) * sizeof(TSSymbolMetadata) + ), + .public_symbol_map = copy( + &memory[wasm_language.public_symbol_map], + (wasm_language.symbol_count + wasm_language.alias_count) * sizeof(TSSymbol) + ), + .lex_modes = copy( + &memory[wasm_language.lex_modes], + wasm_language.state_count * sizeof(TSLexMode) + ), + }; + + if (language->field_count > 0 && language->production_id_count > 0) { + language->field_map_slices = copy( + &memory[wasm_language.field_map_slices], + wasm_language.production_id_count * sizeof(TSFieldMapSlice) + ); + + // Determine the number of field map entries by finding the greatest index + // in any of the slices. + uint32_t field_map_entry_count = 0; + for (uint32_t i = 0; i < wasm_language.production_id_count; i++) { + TSFieldMapSlice slice = language->field_map_slices[i]; + uint32_t slice_end = slice.index + slice.length; + if (slice_end > field_map_entry_count) { + field_map_entry_count = slice_end; + } + } + + language->field_map_entries = copy( + &memory[wasm_language.field_map_entries], + field_map_entry_count * sizeof(TSFieldMapEntry) + ); + language->field_names = copy_strings( + memory, + wasm_language.field_names, + wasm_language.field_count + 1, + &field_name_buffer + ); + } + + if (language->max_alias_sequence_length > 0 && language->production_id_count > 0) { + // The alias map contains symbols, alias counts, and aliases, terminated by a null symbol. + int32_t alias_map_size = 0; + for (;;) { + TSSymbol symbol; + memcpy(&symbol, &memory[wasm_language.alias_map + alias_map_size], sizeof(symbol)); + alias_map_size += sizeof(TSSymbol); + if (symbol == 0) break; + uint16_t value_count; + memcpy(&value_count, &memory[wasm_language.alias_map + alias_map_size], sizeof(value_count)); + alias_map_size += value_count * sizeof(TSSymbol); + } + language->alias_map = copy( + &memory[wasm_language.alias_map], + alias_map_size * sizeof(TSSymbol) + ); + language->alias_sequences = copy( + &memory[wasm_language.alias_sequences], + wasm_language.production_id_count * wasm_language.max_alias_sequence_length * sizeof(TSSymbol) + ); + } + + if (language->state_count > language->large_state_count) { + uint32_t small_state_count = wasm_language.state_count - wasm_language.large_state_count; + language->small_parse_table_map = copy( + &memory[wasm_language.small_parse_table_map], + small_state_count * sizeof(uint32_t) + ); + language->small_parse_table = copy_unsized_static_array( + memory, + wasm_language.small_parse_table, + addresses, + address_count + ); + } + + if (language->version >= LANGUAGE_VERSION_WITH_PRIMARY_STATES) { + language->primary_state_ids = copy( + &memory[wasm_language.primary_state_ids], + wasm_language.state_count * sizeof(TSStateId) + ); + } + + if (language->external_token_count > 0) { + language->external_scanner.symbol_map = copy( + &memory[wasm_language.external_scanner.symbol_map], + wasm_language.external_token_count * sizeof(TSSymbol) + ); + language->external_scanner.states = (void *)(uintptr_t)wasm_language.external_scanner.states; + } + + unsigned name_len = strlen(language_name); + char *name = ts_malloc(name_len + 1); + memcpy(name, language_name, name_len); + name[name_len] = '\0'; + + LanguageWasmModule *language_module = ts_malloc(sizeof(LanguageWasmModule)); + *language_module = (LanguageWasmModule) { + .language_id = language_id_new(), + .module = module, + .name = name, + .symbol_name_buffer = symbol_name_buffer.contents, + .field_name_buffer = field_name_buffer.contents, + .dylink_info = dylink_info, + .ref_count = 1, + }; + + // The lex functions are not used for wasm languages. Use those two fields + // to mark this language as WASM-based and to store the language's + // WASM-specific data. + language->lex_fn = ts_wasm_store__sentinel_lex_fn; + language->keyword_lex_fn = (void *)language_module; + + // Clear out any instances of languages that have been deleted. + for (unsigned i = 0; i < self->language_instances.size; i++) { + WasmLanguageId *id = self->language_instances.contents[i].language_id; + if (id->is_language_deleted) { + language_id_delete(id); + array_erase(&self->language_instances, i); + i--; + } + } + + // Store this store's instance of this language module. + array_push(&self->language_instances, ((LanguageWasmInstance) { + .language_id = language_id_clone(language_module->language_id), + .instance = instance, + .external_states_address = wasm_language.external_scanner.states, + .lex_main_fn_index = wasm_language.lex_fn, + .lex_keyword_fn_index = wasm_language.keyword_lex_fn, + .scanner_create_fn_index = wasm_language.external_scanner.create, + .scanner_destroy_fn_index = wasm_language.external_scanner.destroy, + .scanner_serialize_fn_index = wasm_language.external_scanner.serialize, + .scanner_deserialize_fn_index = wasm_language.external_scanner.deserialize, + .scanner_scan_fn_index = wasm_language.external_scanner.scan, + })); + + return language; + +error: + if (module) wasmtime_module_delete(module); + return NULL; +} + +bool ts_wasm_store_add_language( + TSWasmStore *self, + const TSLanguage *language, + uint32_t *index +) { + wasmtime_context_t *context = wasmtime_store_context(self->store); + const LanguageWasmModule *language_module = (void *)language->keyword_lex_fn; + + // Search for this store's instance of the language module. Also clear out any + // instances of languages that have been deleted. + bool exists = false; + for (unsigned i = 0; i < self->language_instances.size; i++) { + WasmLanguageId *id = self->language_instances.contents[i].language_id; + if (id->is_language_deleted) { + language_id_delete(id); + array_erase(&self->language_instances, i); + i--; + } else if (id == language_module->language_id) { + exists = true; + *index = i; + } + } + + // If the language module has not been instantiated in this store, then add + // it to this store. + if (!exists) { + *index = self->language_instances.size; + char *message; + wasmtime_instance_t instance; + int32_t language_address; + if (!ts_wasm_store__instantiate( + self, + language_module->module, + language_module->name, + &language_module->dylink_info, + &instance, + &language_address, + &message + )) { + ts_free(message); + return false; + } + + LanguageInWasmMemory wasm_language; + const uint8_t *memory = wasmtime_memory_data(context, &self->memory); + memcpy(&wasm_language, &memory[language_address], sizeof(LanguageInWasmMemory)); + array_push(&self->language_instances, ((LanguageWasmInstance) { + .language_id = language_id_clone(language_module->language_id), + .instance = instance, + .external_states_address = wasm_language.external_scanner.states, + .lex_main_fn_index = wasm_language.lex_fn, + .lex_keyword_fn_index = wasm_language.keyword_lex_fn, + .scanner_create_fn_index = wasm_language.external_scanner.create, + .scanner_destroy_fn_index = wasm_language.external_scanner.destroy, + .scanner_serialize_fn_index = wasm_language.external_scanner.serialize, + .scanner_deserialize_fn_index = wasm_language.external_scanner.deserialize, + .scanner_scan_fn_index = wasm_language.external_scanner.scan, + })); + } + + return true; +} + +void ts_wasm_store_reset_heap(TSWasmStore *self) { + wasmtime_context_t *context = wasmtime_store_context(self->store); + wasmtime_func_t func = { + self->function_table.store_id, + self->builtin_fn_indices.reset_heap + }; + wasm_trap_t *trap = NULL; + wasmtime_val_t args[1] = { + {.of.i32 = ts_wasm_store__heap_address(self), .kind = WASMTIME_I32}, + }; + + wasmtime_error_t *error = wasmtime_func_call(context, &func, args, 1, NULL, 0, &trap); + assert(!error); + assert(!trap); +} + +bool ts_wasm_store_start(TSWasmStore *self, TSLexer *lexer, const TSLanguage *language) { + uint32_t instance_index; + if (!ts_wasm_store_add_language(self, language, &instance_index)) return false; + self->current_lexer = lexer; + self->current_instance = &self->language_instances.contents[instance_index]; + self->has_error = false; + ts_wasm_store_reset_heap(self); + return true; +} + +void ts_wasm_store_reset(TSWasmStore *self) { + self->current_lexer = NULL; + self->current_instance = NULL; + self->has_error = false; + ts_wasm_store_reset_heap(self); +} + +static void ts_wasm_store__call( + TSWasmStore *self, + int32_t function_index, + wasmtime_val_raw_t *args_and_results, + size_t args_and_results_len +) { + wasmtime_context_t *context = wasmtime_store_context(self->store); + wasmtime_val_t value; + bool succeeded = wasmtime_table_get(context, &self->function_table, function_index, &value); + assert(succeeded); + assert(value.kind == WASMTIME_FUNCREF); + wasmtime_func_t func = value.of.funcref; + + wasm_trap_t *trap = NULL; + wasmtime_error_t *error = wasmtime_func_call_unchecked(context, &func, args_and_results, args_and_results_len, &trap); + if (error) { + // wasm_message_t message; + // wasmtime_error_message(error, &message); + // fprintf( + // stderr, + // "error in wasm module: %.*s\n", + // (int)message.size, message.data + // ); + wasmtime_error_delete(error); + self->has_error = true; + } else if (trap) { + // wasm_message_t message; + // wasm_trap_message(trap, &message); + // fprintf( + // stderr, + // "trap in wasm module: %.*s\n", + // (int)message.size, message.data + // ); + wasm_trap_delete(trap); + self->has_error = true; + } +} + +static bool ts_wasm_store__call_lex_function(TSWasmStore *self, unsigned function_index, TSStateId state) { + wasmtime_context_t *context = wasmtime_store_context(self->store); + uint8_t *memory_data = wasmtime_memory_data(context, &self->memory); + memcpy( + &memory_data[self->lexer_address], + &self->current_lexer->lookahead, + sizeof(self->current_lexer->lookahead) + ); + + wasmtime_val_raw_t args[2] = { + {.i32 = self->lexer_address}, + {.i32 = state}, + }; + ts_wasm_store__call(self, function_index, args, 2); + if (self->has_error) return false; + bool result = args[0].i32; + + memcpy( + &self->current_lexer->lookahead, + &memory_data[self->lexer_address], + sizeof(self->current_lexer->lookahead) + sizeof(self->current_lexer->result_symbol) + ); + return result; +} + +bool ts_wasm_store_call_lex_main(TSWasmStore *self, TSStateId state) { + return ts_wasm_store__call_lex_function( + self, + self->current_instance->lex_main_fn_index, + state + ); +} + +bool ts_wasm_store_call_lex_keyword(TSWasmStore *self, TSStateId state) { + return ts_wasm_store__call_lex_function( + self, + self->current_instance->lex_keyword_fn_index, + state + ); +} + +uint32_t ts_wasm_store_call_scanner_create(TSWasmStore *self) { + wasmtime_val_raw_t args[1] = {{.i32 = 0}}; + ts_wasm_store__call(self, self->current_instance->scanner_create_fn_index, args, 1); + if (self->has_error) return 0; + return args[0].i32; +} + +void ts_wasm_store_call_scanner_destroy(TSWasmStore *self, uint32_t scanner_address) { + if (self->current_instance) { + wasmtime_val_raw_t args[1] = {{.i32 = scanner_address}}; + ts_wasm_store__call(self, self->current_instance->scanner_destroy_fn_index, args, 1); + } +} + +bool ts_wasm_store_call_scanner_scan( + TSWasmStore *self, + uint32_t scanner_address, + uint32_t valid_tokens_ix +) { + wasmtime_context_t *context = wasmtime_store_context(self->store); + uint8_t *memory_data = wasmtime_memory_data(context, &self->memory); + + memcpy( + &memory_data[self->lexer_address], + &self->current_lexer->lookahead, + sizeof(self->current_lexer->lookahead) + ); + + uint32_t valid_tokens_address = + self->current_instance->external_states_address + + (valid_tokens_ix * sizeof(bool)); + wasmtime_val_raw_t args[3] = { + {.i32 = scanner_address}, + {.i32 = self->lexer_address}, + {.i32 = valid_tokens_address} + }; + ts_wasm_store__call(self, self->current_instance->scanner_scan_fn_index, args, 3); + if (self->has_error) return false; + + memcpy( + &self->current_lexer->lookahead, + &memory_data[self->lexer_address], + sizeof(self->current_lexer->lookahead) + sizeof(self->current_lexer->result_symbol) + ); + return args[0].i32; +} + +uint32_t ts_wasm_store_call_scanner_serialize( + TSWasmStore *self, + uint32_t scanner_address, + char *buffer +) { + wasmtime_context_t *context = wasmtime_store_context(self->store); + uint8_t *memory_data = wasmtime_memory_data(context, &self->memory); + uint32_t serialization_buffer_address = ts_wasm_store__serialization_buffer_address(self); + + wasmtime_val_raw_t args[2] = { + {.i32 = scanner_address}, + {.i32 = serialization_buffer_address}, + }; + ts_wasm_store__call(self, self->current_instance->scanner_serialize_fn_index, args, 2); + if (self->has_error) return 0; + + uint32_t length = args[0].i32; + if (length > TREE_SITTER_SERIALIZATION_BUFFER_SIZE) { + self->has_error = true; + return 0; + } + + if (length > 0) { + memcpy( + ((Lexer *)self->current_lexer)->debug_buffer, + &memory_data[serialization_buffer_address], + length + ); + } + return length; +} + +void ts_wasm_store_call_scanner_deserialize( + TSWasmStore *self, + uint32_t scanner_address, + const char *buffer, + unsigned length +) { + wasmtime_context_t *context = wasmtime_store_context(self->store); + uint8_t *memory_data = wasmtime_memory_data(context, &self->memory); + uint32_t serialization_buffer_address = ts_wasm_store__serialization_buffer_address(self); + + if (length > 0) { + memcpy( + &memory_data[serialization_buffer_address], + buffer, + length + ); + } + + wasmtime_val_raw_t args[3] = { + {.i32 = scanner_address}, + {.i32 = serialization_buffer_address}, + {.i32 = length}, + }; + ts_wasm_store__call(self, self->current_instance->scanner_deserialize_fn_index, args, 3); +} + +bool ts_wasm_store_has_error(const TSWasmStore *self) { + return self->has_error; +} + +bool ts_language_is_wasm(const TSLanguage *self) { + return self->lex_fn == ts_wasm_store__sentinel_lex_fn; +} + +static inline LanguageWasmModule *ts_language__wasm_module(const TSLanguage *self) { + return (LanguageWasmModule *)self->keyword_lex_fn; +} + +void ts_wasm_language_retain(const TSLanguage *self) { + LanguageWasmModule *module = ts_language__wasm_module(self); + assert(module->ref_count > 0); + atomic_inc(&module->ref_count); +} + +void ts_wasm_language_release(const TSLanguage *self) { + LanguageWasmModule *module = ts_language__wasm_module(self); + assert(module->ref_count > 0); + if (atomic_dec(&module->ref_count) == 0) { + // Update the language id to reflect that the language is deleted. This allows any wasm stores + // that hold wasm instances for this language to delete those instances. + atomic_inc(&module->language_id->is_language_deleted); + language_id_delete(module->language_id); + + ts_free((void *)module->field_name_buffer); + ts_free((void *)module->symbol_name_buffer); + ts_free((void *)module->name); + wasmtime_module_delete(module->module); + ts_free(module); + + ts_free((void *)self->alias_map); + ts_free((void *)self->alias_sequences); + ts_free((void *)self->external_scanner.symbol_map); + ts_free((void *)self->field_map_entries); + ts_free((void *)self->field_map_slices); + ts_free((void *)self->field_names); + ts_free((void *)self->lex_modes); + ts_free((void *)self->parse_actions); + ts_free((void *)self->parse_table); + ts_free((void *)self->primary_state_ids); + ts_free((void *)self->public_symbol_map); + ts_free((void *)self->small_parse_table); + ts_free((void *)self->small_parse_table_map); + ts_free((void *)self->symbol_metadata); + ts_free((void *)self->symbol_names); + ts_free((void *)self); + } +} + +#else + +// If the WASM feature is not enabled, define dummy versions of all of the +// wasm-related functions. + +void ts_wasm_store_delete(TSWasmStore *self) { + (void)self; +} + +bool ts_wasm_store_start( + TSWasmStore *self, + TSLexer *lexer, + const TSLanguage *language +) { + (void)self; + (void)lexer; + (void)language; + return false; +} + +void ts_wasm_store_reset(TSWasmStore *self) { + (void)self; +} + +bool ts_wasm_store_call_lex_main(TSWasmStore *self, TSStateId state) { + (void)self; + (void)state; + return false; +} + +bool ts_wasm_store_call_lex_keyword(TSWasmStore *self, TSStateId state) { + (void)self; + (void)state; + return false; +} + +uint32_t ts_wasm_store_call_scanner_create(TSWasmStore *self) { + (void)self; + return 0; +} + +void ts_wasm_store_call_scanner_destroy( + TSWasmStore *self, + uint32_t scanner_address +) { + (void)self; + (void)scanner_address; +} + +bool ts_wasm_store_call_scanner_scan( + TSWasmStore *self, + uint32_t scanner_address, + uint32_t valid_tokens_ix +) { + (void)self; + (void)scanner_address; + (void)valid_tokens_ix; + return false; +} + +uint32_t ts_wasm_store_call_scanner_serialize( + TSWasmStore *self, + uint32_t scanner_address, + char *buffer +) { + (void)self; + (void)scanner_address; + (void)buffer; + return 0; +} + +void ts_wasm_store_call_scanner_deserialize( + TSWasmStore *self, + uint32_t scanner_address, + const char *buffer, + unsigned length +) { + (void)self; + (void)scanner_address; + (void)buffer; + (void)length; +} + +bool ts_wasm_store_has_error(const TSWasmStore *self) { + (void)self; + return false; +} + +bool ts_language_is_wasm(const TSLanguage *self) { + (void)self; + return false; +} + +void ts_wasm_language_retain(const TSLanguage *self) { + (void)self; +} + +void ts_wasm_language_release(const TSLanguage *self) { + (void)self; +} + +#endif diff --git a/parser/nnsrc/wasm_store.h b/parser/nnsrc/wasm_store.h new file mode 100644 index 00000000..1ad2ae57 --- /dev/null +++ b/parser/nnsrc/wasm_store.h @@ -0,0 +1,31 @@ +#ifndef TREE_SITTER_WASM_H_ +#define TREE_SITTER_WASM_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "api.h" +#include "./parser.h" + +bool ts_wasm_store_start(TSWasmStore *, TSLexer *, const TSLanguage *); +void ts_wasm_store_reset(TSWasmStore *); +bool ts_wasm_store_has_error(const TSWasmStore *); + +bool ts_wasm_store_call_lex_main(TSWasmStore *, TSStateId); +bool ts_wasm_store_call_lex_keyword(TSWasmStore *, TSStateId); + +uint32_t ts_wasm_store_call_scanner_create(TSWasmStore *); +void ts_wasm_store_call_scanner_destroy(TSWasmStore *, uint32_t); +bool ts_wasm_store_call_scanner_scan(TSWasmStore *, uint32_t, uint32_t); +uint32_t ts_wasm_store_call_scanner_serialize(TSWasmStore *, uint32_t, char *); +void ts_wasm_store_call_scanner_deserialize(TSWasmStore *, uint32_t, const char *, unsigned); + +void ts_wasm_language_retain(const TSLanguage *); +void ts_wasm_language_release(const TSLanguage *); + +#ifdef __cplusplus +} +#endif + +#endif // TREE_SITTER_WASM_H_ diff --git a/parser/static/symbols_metadata/symbols_metadata_1.c b/parser/static/symbols_metadata/symbols_metadata_1.c index 88bc3c06..380863c6 100644 --- a/parser/static/symbols_metadata/symbols_metadata_1.c +++ b/parser/static/symbols_metadata/symbols_metadata_1.c @@ -6,13 +6,13 @@ /* By: maiboyer +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/14 19:17:54 by maiboyer #+# #+# */ -/* Updated: 2024/04/14 19:18:20 by maiboyer ### ########.fr */ +/* Updated: 2024/06/30 17:29:56 by maiboyer ### ########.fr */ /* */ /* ************************************************************************** */ #include "./symbols_metadata.h" -void symbols_metadata_5(t_symbols_metadata_array *v) +void symbols_metadata_5(t_symbols_metadata_array *v) { v->a[sym_heredoc_start] = sym_metadata(true, true, false); v->a[sym_simple_heredoc_body] = sym_metadata(true, true, false); @@ -37,7 +37,7 @@ void symbols_metadata_5(t_symbols_metadata_array *v) symbols_metadata_6(v); } -void symbols_metadata_6(t_symbols_metadata_array *v) +void symbols_metadata_6(t_symbols_metadata_array *v) { v->a[sym_for_statement] = sym_metadata(true, true, false); v->a[sym_while_statement] = sym_metadata(true, true, false); @@ -62,7 +62,7 @@ void symbols_metadata_6(t_symbols_metadata_array *v) symbols_metadata_7(v); } -void symbols_metadata_7(t_symbols_metadata_array *v) +void symbols_metadata_7(t_symbols_metadata_array *v) { v->a[sym_heredoc_redirect] = sym_metadata(true, true, false); v->a[sym__heredoc_pipeline] = sym_metadata(true, true, false); @@ -78,8 +78,7 @@ void symbols_metadata_7(t_symbols_metadata_array *v) v->a[sym_arithmetic_ternary_expression] = sym_metadata(true, true, false); v->a[sym_arithmetic_unary_expression] = sym_metadata(true, true, false); v->a[sym_arithmetic_postfix_expression] = sym_metadata(true, true, false); - v->a[sym_arithmetic_parenthesized_expression] \ - = sym_metadata(true, true, false); + v->a[sym_arithmetic_parenthesized_expression] = sym_metadata(true, true, false); v->a[sym_concatenation] = sym_metadata(true, true, false); v->a[sym_string] = sym_metadata(true, true, false); v->a[sym_simple_expansion] = sym_metadata(true, true, false); @@ -88,7 +87,7 @@ void symbols_metadata_7(t_symbols_metadata_array *v) symbols_metadata_8(v); } -void symbols_metadata_8(t_symbols_metadata_array *v) +void symbols_metadata_8(t_symbols_metadata_array *v) { v->a[sym_expansion_expression] = sym_metadata(true, true, false); v->a[sym_expansion_regex] = sym_metadata(true, true, false); @@ -97,10 +96,8 @@ void symbols_metadata_8(t_symbols_metadata_array *v) v->a[sym__extglob_blob] = sym_metadata(false, true, false); v->a[sym_terminator] = sym_metadata(true, true, false); v->a[aux_sym__statements_repeat1] = sym_metadata(false, false, false); - v->a[aux_sym_redirected_statement_repeat1] \ - = sym_metadata(false, false, false); - v->a[aux_sym_redirected_statement_repeat2] \ - = sym_metadata(false, false, false); + v->a[aux_sym_redirected_statement_repeat1] = sym_metadata(false, false, false); + v->a[aux_sym_redirected_statement_repeat2] = sym_metadata(false, false, false); v->a[aux_sym_for_statement_repeat1] = sym_metadata(false, false, false); v->a[aux_sym_if_statement_repeat1] = sym_metadata(false, false, false); v->a[aux_sym_case_statement_repeat1] = sym_metadata(false, false, false); @@ -109,20 +106,18 @@ void symbols_metadata_8(t_symbols_metadata_array *v) v->a[aux_sym_pipeline_repeat1] = sym_metadata(false, false, false); v->a[aux_sym_command_repeat1] = sym_metadata(false, false, false); v->a[aux_sym_command_repeat2] = sym_metadata(false, false, false); - v->a[aux_sym__variable_assignments_repeat1] \ - = sym_metadata(false, false, false); + v->a[aux_sym__variable_assignments_repeat1] = sym_metadata(false, false, false); v->a[aux_sym_heredoc_body_repeat1] = sym_metadata(false, false, false); v->a[aux_sym_concatenation_repeat1] = sym_metadata(false, false, false); symbols_metadata_9(v); } -void symbols_metadata_9(t_symbols_metadata_array *v) +void symbols_metadata_9(t_symbols_metadata_array *v) { v->a[aux_sym_string_repeat1] = sym_metadata(false, false, false); v->a[aux_sym_expansion_regex_repeat1] = sym_metadata(false, false, false); - v->a[aux_sym__concatenation_in_expansion_repeat1] \ - = sym_metadata(false, false, false); - v->a[alias_sym_statements] = sym_metadata(false, true, false); + v->a[aux_sym__concatenation_in_expansion_repeat1] = sym_metadata(false, false, false); + v->a[alias_sym_statements] = sym_metadata(true, true, false); } /* EOF symbols_metadata_1.c */ diff --git a/parser/static/types/type_small_parse_table.h b/parser/static/types/type_small_parse_table.h index 98c5aef5..20052630 100644 --- a/parser/static/types/type_small_parse_table.h +++ b/parser/static/types/type_small_parse_table.h @@ -6,7 +6,7 @@ /* By: maiboyer +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/04/14 19:17:54 by maiboyer #+# #+# */ -/* Updated: 2024/04/14 19:18:20 by maiboyer ### ########.fr */ +/* Updated: 2024/06/30 17:22:33 by maiboyer ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,7 +21,7 @@ typedef struct s_small_parse_table_array { - uint16_t a[96672]; + uint16_t a[96671]; } t_small_parse_table_array; #endif // TYPE_SMALL_PARSE_TABLE_H diff --git a/sources/main.c b/sources/main.c index 6217774b..608fb038 100644 --- a/sources/main.c +++ b/sources/main.c @@ -6,7 +6,7 @@ /* By: rparodi +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/03/28 14:40:38 by rparodi #+# #+# */ -/* Updated: 2024/06/21 13:53:27 by maiboyer ### ########.fr */ +/* Updated: 2024/06/30 16:44:34 by maiboyer ### ########.fr */ /* */ /* ************************************************************************** */ @@ -139,14 +139,14 @@ void ft_take_args(t_utils *shcat) } } -t_language *tree_sitter_bash(void); +t_language *tree_sitter_sh(void); t_parser create_myparser(void) { t_language *lang; t_first_parser *parser; - lang = tree_sitter_bash(); + lang = tree_sitter_sh(); parser = ts_parser_new(); ts_parser_set_language(parser, lang); return ((t_parser){.parser = parser});