// [The "BSD 3-clause license"]
// Copyright (c) 2005-2007 Terence Parr
// Copyright (c) 2012-2015 Terence Parr
// Copyright (c) 2012-2015 Sam Harwell
// Copyright (c) 2014-2015 Gerald Rosenberg
// Copyright (c) 2023 Google LLC
// All rights reserved.

// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:

//  1. Redistributions of source code must retain the above copyright
//     notice, this list of conditions and the following disclaimer.
//  2. 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.
//  3. Neither the name of the copyright holder 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 AUTHOR ``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 AUTHOR 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.

// Generated from ANTLRv4Lexer.g4 by ANTLR 4.11.2

#include "ANTLRv4Lexer.h"

using namespace antlr4;

using namespace antlr4_grammar;

using namespace antlr4;

namespace {

struct ANTLRv4LexerStaticData final {
  ANTLRv4LexerStaticData(std::vector<std::string> ruleNames,
                         std::vector<std::string> channelNames,
                         std::vector<std::string> modeNames,
                         std::vector<std::string> literalNames,
                         std::vector<std::string> symbolicNames)
      : ruleNames(std::move(ruleNames)),
        channelNames(std::move(channelNames)),
        modeNames(std::move(modeNames)),
        literalNames(std::move(literalNames)),
        symbolicNames(std::move(symbolicNames)),
        vocabulary(this->literalNames, this->symbolicNames) {}

  ANTLRv4LexerStaticData(const ANTLRv4LexerStaticData &) = delete;
  ANTLRv4LexerStaticData(ANTLRv4LexerStaticData &&) = delete;
  ANTLRv4LexerStaticData &operator=(const ANTLRv4LexerStaticData &) = delete;
  ANTLRv4LexerStaticData &operator=(ANTLRv4LexerStaticData &&) = delete;

  std::vector<antlr4::dfa::DFA> decisionToDFA;
  antlr4::atn::PredictionContextCache sharedContextCache;
  const std::vector<std::string> ruleNames;
  const std::vector<std::string> channelNames;
  const std::vector<std::string> modeNames;
  const std::vector<std::string> literalNames;
  const std::vector<std::string> symbolicNames;
  const antlr4::dfa::Vocabulary vocabulary;
  antlr4::atn::SerializedATNView serializedATN;
  std::unique_ptr<antlr4::atn::ATN> atn;
};

::antlr4::internal::OnceFlag antlrv4lexerLexerOnceFlag;
ANTLRv4LexerStaticData *antlrv4lexerLexerStaticData = nullptr;

void antlrv4lexerLexerInitialize() {
  assert(antlrv4lexerLexerStaticData == nullptr);
  auto staticData =
      std::make_unique<ANTLRv4LexerStaticData>(
          std::vector<std::string>{"DOC_COMMENT",
                                   "BLOCK_COMMENT",
                                   "LINE_COMMENT",
                                   "INT",
                                   "STRING_LITERAL",
                                   "UNTERMINATED_STRING_LITERAL",
                                   "BEGIN_ARGUMENT",
                                   "BEGIN_ACTION",
                                   "OPTIONS",
                                   "TOKENS",
                                   "CHANNELS",
                                   "WSNLCHARS",
                                   "IMPORT",
                                   "FRAGMENT",
                                   "LEXER",
                                   "PARSER",
                                   "GRAMMAR",
                                   "PROTECTED",
                                   "PUBLIC",
                                   "PRIVATE",
                                   "RETURNS",
                                   "LOCALS",
                                   "THROWS",
                                   "CATCH",
                                   "FINALLY",
                                   "MODE",
                                   "COLON",
                                   "COLONCOLON",
                                   "COMMA",
                                   "SEMI",
                                   "LPAREN",
                                   "RPAREN",
                                   "LBRACE",
                                   "RBRACE",
                                   "RARROW",
                                   "LT",
                                   "GT",
                                   "ASSIGN",
                                   "QUESTION",
                                   "STAR",
                                   "PLUS_ASSIGN",
                                   "PLUS",
                                   "OR",
                                   "DOLLAR",
                                   "RANGE",
                                   "DOT",
                                   "AT",
                                   "POUND",
                                   "NOT",
                                   "ID",
                                   "WS",
                                   "ERRCHAR",
                                   "NESTED_ARGUMENT",
                                   "ARGUMENT_ESCAPE",
                                   "ARGUMENT_STRING_LITERAL",
                                   "ARGUMENT_CHAR_LITERAL",
                                   "END_ARGUMENT",
                                   "UNTERMINATED_ARGUMENT",
                                   "ARGUMENT_CONTENT",
                                   "NESTED_ACTION",
                                   "ACTION_ESCAPE",
                                   "ACTION_STRING_LITERAL",
                                   "ACTION_CHAR_LITERAL",
                                   "ACTION_DOC_COMMENT",
                                   "ACTION_BLOCK_COMMENT",
                                   "ACTION_LINE_COMMENT",
                                   "END_ACTION",
                                   "UNTERMINATED_ACTION",
                                   "ACTION_CONTENT",
                                   "LEXER_CHAR_SET_BODY",
                                   "LEXER_CHAR_SET",
                                   "UNTERMINATED_CHAR_SET",
                                   "Id",
                                   "Ws",
                                   "Hws",
                                   "Vws",
                                   "BlockComment",
                                   "DocComment",
                                   "LineComment",
                                   "EscSeq",
                                   "EscAny",
                                   "UnicodeEsc",
                                   "DecimalNumeral",
                                   "HexDigit",
                                   "DecDigit",
                                   "BoolLiteral",
                                   "CharLiteral",
                                   "SQuoteLiteral",
                                   "DQuoteLiteral",
                                   "USQuoteLiteral",
                                   "NameChar",
                                   "NameStartChar",
                                   "Int",
                                   "Esc",
                                   "Colon",
                                   "DColon",
                                   "SQuote",
                                   "DQuote",
                                   "LParen",
                                   "RParen",
                                   "LBrace",
                                   "RBrace",
                                   "LBrack",
                                   "RBrack",
                                   "RArrow",
                                   "Lt",
                                   "Gt",
                                   "Equal",
                                   "Question",
                                   "Star",
                                   "Plus",
                                   "PlusAssign",
                                   "Underscore",
                                   "Pipe",
                                   "Dollar",
                                   "Comma",
                                   "Semi",
                                   "Dot",
                                   "Range",
                                   "At",
                                   "Pound",
                                   "Tilde"},
          std::vector<std::string>{"DEFAULT_TOKEN_CHANNEL", "HIDDEN"},
          std::vector<std::string>{"DEFAULT_MODE", "Argument",
                                   "TargetLanguageAction", "LexerCharSet"},
          std::vector<std::string>{"",          "",           "",
                                   "",          "",           "",
                                   "",          "",           "",
                                   "",          "",           "",
                                   "",          "",           "",
                                   "'import'",  "'fragment'", "'lexer'",
                                   "'parser'",  "'grammar'",  "'protected'",
                                   "'public'",  "'private'",  "'returns'",
                                   "'locals'",  "'throws'",   "'catch'",
                                   "'finally'", "'mode'"},
          std::vector<std::string>{"",
                                   "TOKEN_REF",
                                   "RULE_REF",
                                   "LEXER_CHAR_SET",
                                   "DOC_COMMENT",
                                   "BLOCK_COMMENT",
                                   "LINE_COMMENT",
                                   "INT",
                                   "STRING_LITERAL",
                                   "UNTERMINATED_STRING_LITERAL",
                                   "BEGIN_ARGUMENT",
                                   "BEGIN_ACTION",
                                   "OPTIONS",
                                   "TOKENS",
                                   "CHANNELS",
                                   "IMPORT",
                                   "FRAGMENT",
                                   "LEXER",
                                   "PARSER",
                                   "GRAMMAR",
                                   "PROTECTED",
                                   "PUBLIC",
                                   "PRIVATE",
                                   "RETURNS",
                                   "LOCALS",
                                   "THROWS",
                                   "CATCH",
                                   "FINALLY",
                                   "MODE",
                                   "COLON",
                                   "COLONCOLON",
                                   "COMMA",
                                   "SEMI",
                                   "LPAREN",
                                   "RPAREN",
                                   "LBRACE",
                                   "RBRACE",
                                   "RARROW",
                                   "LT",
                                   "GT",
                                   "ASSIGN",
                                   "QUESTION",
                                   "STAR",
                                   "PLUS_ASSIGN",
                                   "PLUS",
                                   "OR",
                                   "DOLLAR",
                                   "RANGE",
                                   "DOT",
                                   "AT",
                                   "POUND",
                                   "NOT",
                                   "ID",
                                   "WS",
                                   "ERRCHAR",
                                   "END_ARGUMENT",
                                   "UNTERMINATED_ARGUMENT",
                                   "ARGUMENT_CONTENT",
                                   "END_ACTION",
                                   "UNTERMINATED_ACTION",
                                   "ACTION_CONTENT",
                                   "UNTERMINATED_CHAR_SET"});
  static const int32_t serializedATNSegment[] = {
      4,    0,     61,    775,   6,     -1,    6,     -1,    6,     -1,   6,
      -1,   2,     0,     7,     0,     2,     1,     7,     1,     2,    2,
      7,    2,     2,     3,     7,     3,     2,     4,     7,     4,    2,
      5,    7,     5,     2,     6,     7,     6,     2,     7,     7,    7,
      2,    8,     7,     8,     2,     9,     7,     9,     2,     10,   7,
      10,   2,     11,    7,     11,    2,     12,    7,     12,    2,    13,
      7,    13,    2,     14,    7,     14,    2,     15,    7,     15,   2,
      16,   7,     16,    2,     17,    7,     17,    2,     18,    7,    18,
      2,    19,    7,     19,    2,     20,    7,     20,    2,     21,   7,
      21,   2,     22,    7,     22,    2,     23,    7,     23,    2,    24,
      7,    24,    2,     25,    7,     25,    2,     26,    7,     26,   2,
      27,   7,     27,    2,     28,    7,     28,    2,     29,    7,    29,
      2,    30,    7,     30,    2,     31,    7,     31,    2,     32,   7,
      32,   2,     33,    7,     33,    2,     34,    7,     34,    2,    35,
      7,    35,    2,     36,    7,     36,    2,     37,    7,     37,   2,
      38,   7,     38,    2,     39,    7,     39,    2,     40,    7,    40,
      2,    41,    7,     41,    2,     42,    7,     42,    2,     43,   7,
      43,   2,     44,    7,     44,    2,     45,    7,     45,    2,    46,
      7,    46,    2,     47,    7,     47,    2,     48,    7,     48,   2,
      49,   7,     49,    2,     50,    7,     50,    2,     51,    7,    51,
      2,    52,    7,     52,    2,     53,    7,     53,    2,     54,   7,
      54,   2,     55,    7,     55,    2,     56,    7,     56,    2,    57,
      7,    57,    2,     58,    7,     58,    2,     59,    7,     59,   2,
      60,   7,     60,    2,     61,    7,     61,    2,     62,    7,    62,
      2,    63,    7,     63,    2,     64,    7,     64,    2,     65,   7,
      65,   2,     66,    7,     66,    2,     67,    7,     67,    2,    68,
      7,    68,    2,     69,    7,     69,    2,     70,    7,     70,   2,
      71,   7,     71,    2,     72,    7,     72,    2,     73,    7,    73,
      2,    74,    7,     74,    2,     75,    7,     75,    2,     76,   7,
      76,   2,     77,    7,     77,    2,     78,    7,     78,    2,    79,
      7,    79,    2,     80,    7,     80,    2,     81,    7,     81,   2,
      82,   7,     82,    2,     83,    7,     83,    2,     84,    7,    84,
      2,    85,    7,     85,    2,     86,    7,     86,    2,     87,   7,
      87,   2,     88,    7,     88,    2,     89,    7,     89,    2,    90,
      7,    90,    2,     91,    7,     91,    2,     92,    7,     92,   2,
      93,   7,     93,    2,     94,    7,     94,    2,     95,    7,    95,
      2,    96,    7,     96,    2,     97,    7,     97,    2,     98,   7,
      98,   2,     99,    7,     99,    2,     100,   7,     100,   2,    101,
      7,    101,   2,     102,   7,     102,   2,     103,   7,     103,  2,
      104,  7,     104,   2,     105,   7,     105,   2,     106,   7,    106,
      2,    107,   7,     107,   2,     108,   7,     108,   2,     109,  7,
      109,  2,     110,   7,     110,   2,     111,   7,     111,   2,    112,
      7,    112,   2,     113,   7,     113,   2,     114,   7,     114,  2,
      115,  7,     115,   2,     116,   7,     116,   2,     117,   7,    117,
      2,    118,   7,     118,   2,     119,   7,     119,   2,     120,  7,
      120,  2,     121,   7,     121,   1,     0,     1,     0,     1,    0,
      1,    0,     1,     1,     1,     1,     1,     1,     1,     1,    1,
      2,    1,     2,     1,     2,     1,     2,     1,     3,     1,    3,
      1,    4,     1,     4,     1,     5,     1,     5,     1,     6,    1,
      6,    1,     6,     1,     7,     1,     7,     1,     7,     1,    7,
      1,    8,     1,     8,     1,     8,     1,     8,     1,     8,    1,
      8,    1,     8,     1,     8,     1,     8,     5,     8,     283,  8,
      8,    10,    8,     12,    8,     286,   9,     8,     1,     8,    1,
      8,    1,     9,     1,     9,     1,     9,     1,     9,     1,    9,
      1,    9,     1,     9,     1,     9,     5,     9,     298,   8,    9,
      10,   9,     12,    9,     301,   9,     9,     1,     9,     1,    9,
      1,    10,    1,     10,    1,     10,    1,     10,    1,     10,   1,
      10,   1,     10,    1,     10,    1,     10,    1,     10,    5,    10,
      315,  8,     10,    10,    10,    12,    10,    318,   9,     10,   1,
      10,   1,     10,    1,     11,    1,     11,    1,     12,    1,    12,
      1,    12,    1,     12,    1,     12,    1,     12,    1,     12,   1,
      13,   1,     13,    1,     13,    1,     13,    1,     13,    1,    13,
      1,    13,    1,     13,    1,     13,    1,     14,    1,     14,   1,
      14,   1,     14,    1,     14,    1,     14,    1,     15,    1,    15,
      1,    15,    1,     15,    1,     15,    1,     15,    1,     15,   1,
      16,   1,     16,    1,     16,    1,     16,    1,     16,    1,    16,
      1,    16,    1,     16,    1,     17,    1,     17,    1,     17,   1,
      17,   1,     17,    1,     17,    1,     17,    1,     17,    1,    17,
      1,    17,    1,     18,    1,     18,    1,     18,    1,     18,   1,
      18,   1,     18,    1,     18,    1,     19,    1,     19,    1,    19,
      1,    19,    1,     19,    1,     19,    1,     19,    1,     19,   1,
      20,   1,     20,    1,     20,    1,     20,    1,     20,    1,    20,
      1,    20,    1,     20,    1,     21,    1,     21,    1,     21,   1,
      21,   1,     21,    1,     21,    1,     21,    1,     22,    1,    22,
      1,    22,    1,     22,    1,     22,    1,     22,    1,     22,   1,
      23,   1,     23,    1,     23,    1,     23,    1,     23,    1,    23,
      1,    24,    1,     24,    1,     24,    1,     24,    1,     24,   1,
      24,   1,     24,    1,     24,    1,     25,    1,     25,    1,    25,
      1,    25,    1,     25,    1,     26,    1,     26,    1,     27,   1,
      27,   1,     28,    1,     28,    1,     29,    1,     29,    1,    30,
      1,    30,    1,     31,    1,     31,    1,     32,    1,     32,   1,
      33,   1,     33,    1,     34,    1,     34,    1,     35,    1,    35,
      1,    36,    1,     36,    1,     37,    1,     37,    1,     38,   1,
      38,   1,     39,    1,     39,    1,     40,    1,     40,    1,    41,
      1,    41,    1,     42,    1,     42,    1,     43,    1,     43,   1,
      44,   1,     44,    1,     45,    1,     45,    1,     46,    1,    46,
      1,    47,    1,     47,    1,     48,    1,     48,    1,     49,   1,
      49,   1,     50,    4,     50,    476,   8,     50,    11,    50,   12,
      50,   477,   1,     50,    1,     50,    1,     51,    1,     51,   1,
      51,   1,     51,    1,     52,    1,     52,    1,     52,    1,    52,
      1,    52,    1,     53,    1,     53,    1,     53,    1,     53,   1,
      54,   1,     54,    1,     54,    1,     54,    1,     55,    1,    55,
      1,    55,    1,     55,    1,     56,    1,     56,    1,     56,   1,
      57,   1,     57,    1,     57,    1,     57,    1,     58,    1,    58,
      1,    59,    1,     59,    1,     59,    1,     59,    1,     59,   1,
      60,   1,     60,    1,     60,    1,     60,    1,     61,    1,    61,
      1,    61,    1,     61,    1,     62,    1,     62,    1,     62,   1,
      62,   1,     63,    1,     63,    1,     63,    1,     63,    1,    64,
      1,    64,    1,     64,    1,     64,    1,     65,    1,     65,   1,
      65,   1,     65,    1,     66,    1,     66,    1,     66,    1,    67,
      1,    67,    1,     67,    1,     67,    1,     68,    1,     68,   1,
      69,   1,     69,    4,     69,    552,   8,     69,    11,    69,   12,
      69,   553,   1,     69,    1,     69,    1,     70,    1,     70,   1,
      70,   1,     70,    1,     71,    1,     71,    1,     71,    1,    71,
      1,    72,    1,     72,    5,     72,    568,   8,     72,    10,   72,
      12,   72,    571,   9,     72,    1,     73,    1,     73,    3,    73,
      575,  8,     73,    1,     74,    1,     74,    1,     75,    1,    75,
      1,    76,    1,     76,    1,     76,    1,     76,    5,     76,   585,
      8,    76,    10,    76,    12,    76,    588,   9,     76,    1,    76,
      1,    76,    1,     76,    3,     76,    593,   8,     76,    1,    77,
      1,    77,    1,     77,    1,     77,    1,     77,    5,     77,   600,
      8,    77,    10,    77,    12,    77,    603,   9,     77,    1,    77,
      1,    77,    1,     77,    3,     77,    608,   8,     77,    1,    78,
      1,    78,    1,     78,    1,     78,    5,     78,    614,   8,    78,
      10,   78,    12,    78,    617,   9,     78,    1,     79,    1,    79,
      1,    79,    1,     79,    1,     79,    3,     79,    624,   8,    79,
      1,    80,    1,     80,    1,     80,    1,     81,    1,     81,   1,
      81,   1,     81,    1,     81,    3,     81,    634,   8,     81,   3,
      81,   636,   8,     81,    3,     81,    638,   8,     81,    3,    81,
      640,  8,     81,    1,     82,    1,     82,    1,     82,    5,    82,
      645,  8,     82,    10,    82,    12,    82,    648,   9,     82,   3,
      82,   650,   8,     82,    1,     83,    1,     83,    1,     84,   1,
      84,   1,     85,    1,     85,    1,     85,    1,     85,    1,    85,
      1,    85,    1,     85,    1,     85,    1,     85,    3,     85,   665,
      8,    85,    1,     86,    1,     86,    1,     86,    3,     86,   670,
      8,    86,    1,     86,    1,     86,    1,     87,    1,     87,   1,
      87,   5,     87,    677,   8,     87,    10,    87,    12,    87,   680,
      9,    87,    1,     87,    1,     87,    1,     88,    1,     88,   1,
      88,   5,     88,    687,   8,     88,    10,    88,    12,    88,   690,
      9,    88,    1,     88,    1,     88,    1,     89,    1,     89,   1,
      89,   5,     89,    697,   8,     89,    10,    89,    12,    89,   700,
      9,    89,    1,     90,    1,     90,    1,     90,    1,     90,   3,
      90,   706,   8,     90,    1,     91,    1,     91,    1,     92,   1,
      92,   1,     92,    1,     92,    1,     93,    1,     93,    1,    94,
      1,    94,    1,     95,    1,     95,    1,     95,    1,     96,   1,
      96,   1,     97,    1,     97,    1,     98,    1,     98,    1,    99,
      1,    99,    1,     100,   1,     100,   1,     101,   1,     101,  1,
      102,  1,     102,   1,     103,   1,     103,   1,     104,   1,    104,
      1,    104,   1,     105,   1,     105,   1,     106,   1,     106,  1,
      107,  1,     107,   1,     108,   1,     108,   1,     109,   1,    109,
      1,    110,   1,     110,   1,     111,   1,     111,   1,     111,  1,
      112,  1,     112,   1,     113,   1,     113,   1,     114,   1,    114,
      1,    115,   1,     115,   1,     116,   1,     116,   1,     117,  1,
      117,  1,     118,   1,     118,   1,     118,   1,     119,   1,    119,
      1,    120,   1,     120,   1,     121,   1,     121,   2,     586,  601,
      0,    122,   4,     4,     6,     5,     8,     6,     10,    7,    12,
      8,    14,    9,     16,    10,    18,    11,    20,    12,    22,   13,
      24,   14,    26,    0,     28,    15,    30,    16,    32,    17,   34,
      18,   36,    19,    38,    20,    40,    21,    42,    22,    44,   23,
      46,   24,    48,    25,    50,    26,    52,    27,    54,    28,   56,
      29,   58,    30,    60,    31,    62,    32,    64,    33,    66,   34,
      68,   35,    70,    36,    72,    37,    74,    38,    76,    39,   78,
      40,   80,    41,    82,    42,    84,    43,    86,    44,    88,   45,
      90,   46,    92,    47,    94,    48,    96,    49,    98,    50,   100,
      51,   102,   52,    104,   53,    106,   54,    108,   0,     110,  0,
      112,  0,     114,   0,     116,   55,    118,   56,    120,   57,   122,
      0,    124,   0,     126,   0,     128,   0,     130,   0,     132,  0,
      134,  0,     136,   58,    138,   59,    140,   60,    142,   0,    144,
      3,    146,   61,    148,   0,     150,   0,     152,   0,     154,  0,
      156,  0,     158,   0,     160,   0,     162,   0,     164,   0,    166,
      0,    168,   0,     170,   0,     172,   0,     174,   0,     176,  0,
      178,  0,     180,   0,     182,   0,     184,   0,     186,   0,    188,
      0,    190,   0,     192,   0,     194,   0,     196,   0,     198,  0,
      200,  0,     202,   0,     204,   0,     206,   0,     208,   0,    210,
      0,    212,   0,     214,   0,     216,   0,     218,   0,     220,  0,
      222,  0,     224,   0,     226,   0,     228,   0,     230,   0,    232,
      0,    234,   0,     236,   0,     238,   0,     240,   0,     242,  0,
      244,  0,     246,   0,     4,     0,     1,     2,     3,     13,   3,
      0,    9,     10,    12,    13,    32,    32,    1,     0,     92,   93,
      2,    0,     9,     9,     32,    32,    2,     0,     10,    10,   12,
      13,   2,     0,     10,    10,    13,    13,    8,     0,     34,   34,
      39,   39,    92,    92,    98,    98,    102,   102,   110,   110,  114,
      114,  116,   116,   1,     0,     49,    57,    3,     0,     48,   57,
      65,   70,    97,    102,   1,     0,     48,    57,    4,     0,    10,
      10,   13,    13,    39,    39,    92,    92,    4,     0,     10,   10,
      13,   13,    34,    34,    92,    92,    3,     0,     183,   183,  768,
      879,  8255,  8256,  13,    0,     65,    90,    97,    122,   192,  214,
      216,  246,   248,   767,   880,   893,   895,   8191,  8204,  8205, 8304,
      8591, 11264, 12271, 12289, 55295, 63744, 64975, 65008, 65533, 753,  0,
      4,    1,     0,     0,     0,     0,     6,     1,     0,     0,    0,
      0,    8,     1,     0,     0,     0,     0,     10,    1,     0,    0,
      0,    0,     12,    1,     0,     0,     0,     0,     14,    1,    0,
      0,    0,     0,     16,    1,     0,     0,     0,     0,     18,   1,
      0,    0,     0,     0,     20,    1,     0,     0,     0,     0,    22,
      1,    0,     0,     0,     0,     24,    1,     0,     0,     0,    0,
      28,   1,     0,     0,     0,     0,     30,    1,     0,     0,    0,
      0,    32,    1,     0,     0,     0,     0,     34,    1,     0,    0,
      0,    0,     36,    1,     0,     0,     0,     0,     38,    1,    0,
      0,    0,     0,     40,    1,     0,     0,     0,     0,     42,   1,
      0,    0,     0,     0,     44,    1,     0,     0,     0,     0,    46,
      1,    0,     0,     0,     0,     48,    1,     0,     0,     0,    0,
      50,   1,     0,     0,     0,     0,     52,    1,     0,     0,    0,
      0,    54,    1,     0,     0,     0,     0,     56,    1,     0,    0,
      0,    0,     58,    1,     0,     0,     0,     0,     60,    1,    0,
      0,    0,     0,     62,    1,     0,     0,     0,     0,     64,   1,
      0,    0,     0,     0,     66,    1,     0,     0,     0,     0,    68,
      1,    0,     0,     0,     0,     70,    1,     0,     0,     0,    0,
      72,   1,     0,     0,     0,     0,     74,    1,     0,     0,    0,
      0,    76,    1,     0,     0,     0,     0,     78,    1,     0,    0,
      0,    0,     80,    1,     0,     0,     0,     0,     82,    1,    0,
      0,    0,     0,     84,    1,     0,     0,     0,     0,     86,   1,
      0,    0,     0,     0,     88,    1,     0,     0,     0,     0,    90,
      1,    0,     0,     0,     0,     92,    1,     0,     0,     0,    0,
      94,   1,     0,     0,     0,     0,     96,    1,     0,     0,    0,
      0,    98,    1,     0,     0,     0,     0,     100,   1,     0,    0,
      0,    0,     102,   1,     0,     0,     0,     0,     104,   1,    0,
      0,    0,     0,     106,   1,     0,     0,     0,     1,     108,  1,
      0,    0,     0,     1,     110,   1,     0,     0,     0,     1,    112,
      1,    0,     0,     0,     1,     114,   1,     0,     0,     0,    1,
      116,  1,     0,     0,     0,     1,     118,   1,     0,     0,    0,
      1,    120,   1,     0,     0,     0,     2,     122,   1,     0,    0,
      0,    2,     124,   1,     0,     0,     0,     2,     126,   1,    0,
      0,    0,     2,     128,   1,     0,     0,     0,     2,     130,  1,
      0,    0,     0,     2,     132,   1,     0,     0,     0,     2,    134,
      1,    0,     0,     0,     2,     136,   1,     0,     0,     0,    2,
      138,  1,     0,     0,     0,     2,     140,   1,     0,     0,    0,
      3,    142,   1,     0,     0,     0,     3,     144,   1,     0,    0,
      0,    3,     146,   1,     0,     0,     0,     4,     248,   1,    0,
      0,    0,     6,     252,   1,     0,     0,     0,     8,     256,  1,
      0,    0,     0,     10,    260,   1,     0,     0,     0,     12,   262,
      1,    0,     0,     0,     14,    264,   1,     0,     0,     0,    16,
      266,  1,     0,     0,     0,     18,    269,   1,     0,     0,    0,
      20,   273,   1,     0,     0,     0,     22,    289,   1,     0,    0,
      0,    24,    304,   1,     0,     0,     0,     26,    321,   1,    0,
      0,    0,     28,    323,   1,     0,     0,     0,     30,    330,  1,
      0,    0,     0,     32,    339,   1,     0,     0,     0,     34,   345,
      1,    0,     0,     0,     36,    352,   1,     0,     0,     0,    38,
      360,  1,     0,     0,     0,     40,    370,   1,     0,     0,    0,
      42,   377,   1,     0,     0,     0,     44,    385,   1,     0,    0,
      0,    46,    393,   1,     0,     0,     0,     48,    400,   1,    0,
      0,    0,     50,    407,   1,     0,     0,     0,     52,    413,  1,
      0,    0,     0,     54,    421,   1,     0,     0,     0,     56,   426,
      1,    0,     0,     0,     58,    428,   1,     0,     0,     0,    60,
      430,  1,     0,     0,     0,     62,    432,   1,     0,     0,    0,
      64,   434,   1,     0,     0,     0,     66,    436,   1,     0,    0,
      0,    68,    438,   1,     0,     0,     0,     70,    440,   1,    0,
      0,    0,     72,    442,   1,     0,     0,     0,     74,    444,  1,
      0,    0,     0,     76,    446,   1,     0,     0,     0,     78,   448,
      1,    0,     0,     0,     80,    450,   1,     0,     0,     0,    82,
      452,  1,     0,     0,     0,     84,    454,   1,     0,     0,    0,
      86,   456,   1,     0,     0,     0,     88,    458,   1,     0,    0,
      0,    90,    460,   1,     0,     0,     0,     92,    462,   1,    0,
      0,    0,     94,    464,   1,     0,     0,     0,     96,    466,  1,
      0,    0,     0,     98,    468,   1,     0,     0,     0,     100,  470,
      1,    0,     0,     0,     102,   472,   1,     0,     0,     0,    104,
      475,  1,     0,     0,     0,     106,   481,   1,     0,     0,    0,
      108,  485,   1,     0,     0,     0,     110,   490,   1,     0,    0,
      0,    112,   494,   1,     0,     0,     0,     114,   498,   1,    0,
      0,    0,     116,   502,   1,     0,     0,     0,     118,   505,  1,
      0,    0,     0,     120,   509,   1,     0,     0,     0,     122,  511,
      1,    0,     0,     0,     124,   516,   1,     0,     0,     0,    126,
      520,  1,     0,     0,     0,     128,   524,   1,     0,     0,    0,
      130,  528,   1,     0,     0,     0,     132,   532,   1,     0,    0,
      0,    134,   536,   1,     0,     0,     0,     136,   540,   1,    0,
      0,    0,     138,   543,   1,     0,     0,     0,     140,   547,  1,
      0,    0,     0,     142,   551,   1,     0,     0,     0,     144,  557,
      1,    0,     0,     0,     146,   561,   1,     0,     0,     0,    148,
      565,  1,     0,     0,     0,     150,   574,   1,     0,     0,    0,
      152,  576,   1,     0,     0,     0,     154,   578,   1,     0,    0,
      0,    156,   580,   1,     0,     0,     0,     158,   594,   1,    0,
      0,    0,     160,   609,   1,     0,     0,     0,     162,   618,  1,
      0,    0,     0,     164,   625,   1,     0,     0,     0,     166,  628,
      1,    0,     0,     0,     168,   649,   1,     0,     0,     0,    170,
      651,  1,     0,     0,     0,     172,   653,   1,     0,     0,    0,
      174,  664,   1,     0,     0,     0,     176,   666,   1,     0,    0,
      0,    178,   673,   1,     0,     0,     0,     180,   683,   1,    0,
      0,    0,     182,   693,   1,     0,     0,     0,     184,   705,  1,
      0,    0,     0,     186,   707,   1,     0,     0,     0,     188,  709,
      1,    0,     0,     0,     190,   713,   1,     0,     0,     0,    192,
      715,  1,     0,     0,     0,     194,   717,   1,     0,     0,    0,
      196,  720,   1,     0,     0,     0,     198,   722,   1,     0,    0,
      0,    200,   724,   1,     0,     0,     0,     202,   726,   1,    0,
      0,    0,     204,   728,   1,     0,     0,     0,     206,   730,  1,
      0,    0,     0,     208,   732,   1,     0,     0,     0,     210,  734,
      1,    0,     0,     0,     212,   736,   1,     0,     0,     0,    214,
      739,  1,     0,     0,     0,     216,   741,   1,     0,     0,    0,
      218,  743,   1,     0,     0,     0,     220,   745,   1,     0,    0,
      0,    222,   747,   1,     0,     0,     0,     224,   749,   1,    0,
      0,    0,     226,   751,   1,     0,     0,     0,     228,   754,  1,
      0,    0,     0,     230,   756,   1,     0,     0,     0,     232,  758,
      1,    0,     0,     0,     234,   760,   1,     0,     0,     0,    236,
      762,  1,     0,     0,     0,     238,   764,   1,     0,     0,    0,
      240,  766,   1,     0,     0,     0,     242,   769,   1,     0,    0,
      0,    244,   771,   1,     0,     0,     0,     246,   773,   1,    0,
      0,    0,     248,   249,   3,     158,   77,    0,     249,   250,  1,
      0,    0,     0,     250,   251,   6,     0,     0,     0,     251,  5,
      1,    0,     0,     0,     252,   253,   3,     156,   76,    0,    253,
      254,  1,     0,     0,     0,     254,   255,   6,     1,     0,    0,
      255,  7,     1,     0,     0,     0,     256,   257,   3,     160,  78,
      0,    257,   258,   1,     0,     0,     0,     258,   259,   6,    2,
      0,    0,     259,   9,     1,     0,     0,     0,     260,   261,  3,
      168,  82,    0,     261,   11,    1,     0,     0,     0,     262,  263,
      3,    178,   87,    0,     263,   13,    1,     0,     0,     0,    264,
      265,  3,     182,   89,    0,     265,   15,    1,     0,     0,    0,
      266,  267,   3,     208,   102,   0,     267,   268,   6,     6,    1,
      0,    268,   17,    1,     0,     0,     0,     269,   270,   3,    204,
      100,  0,     270,   271,   1,     0,     0,     0,     271,   272,  6,
      7,    2,     0,     272,   19,    1,     0,     0,     0,     273,  274,
      5,    111,   0,     0,     274,   275,   5,     112,   0,     0,    275,
      276,  5,     116,   0,     0,     276,   277,   5,     105,   0,    0,
      277,  278,   5,     111,   0,     0,     278,   279,   5,     110,  0,
      0,    279,   280,   5,     115,   0,     0,     280,   284,   1,    0,
      0,    0,     281,   283,   3,     26,    11,    0,     282,   281,  1,
      0,    0,     0,     283,   286,   1,     0,     0,     0,     284,  282,
      1,    0,     0,     0,     284,   285,   1,     0,     0,     0,    285,
      287,  1,     0,     0,     0,     286,   284,   1,     0,     0,    0,
      287,  288,   5,     123,   0,     0,     288,   21,    1,     0,    0,
      0,    289,   290,   5,     116,   0,     0,     290,   291,   5,    111,
      0,    0,     291,   292,   5,     107,   0,     0,     292,   293,  5,
      101,  0,     0,     293,   294,   5,     110,   0,     0,     294,  295,
      5,    115,   0,     0,     295,   299,   1,     0,     0,     0,    296,
      298,  3,     26,    11,    0,     297,   296,   1,     0,     0,    0,
      298,  301,   1,     0,     0,     0,     299,   297,   1,     0,    0,
      0,    299,   300,   1,     0,     0,     0,     300,   302,   1,    0,
      0,    0,     301,   299,   1,     0,     0,     0,     302,   303,  5,
      123,  0,     0,     303,   23,    1,     0,     0,     0,     304,  305,
      5,    99,    0,     0,     305,   306,   5,     104,   0,     0,    306,
      307,  5,     97,    0,     0,     307,   308,   5,     110,   0,    0,
      308,  309,   5,     110,   0,     0,     309,   310,   5,     101,  0,
      0,    310,   311,   5,     108,   0,     0,     311,   312,   5,    115,
      0,    0,     312,   316,   1,     0,     0,     0,     313,   315,  3,
      26,   11,    0,     314,   313,   1,     0,     0,     0,     315,  318,
      1,    0,     0,     0,     316,   314,   1,     0,     0,     0,    316,
      317,  1,     0,     0,     0,     317,   319,   1,     0,     0,    0,
      318,  316,   1,     0,     0,     0,     319,   320,   5,     123,  0,
      0,    320,   25,    1,     0,     0,     0,     321,   322,   7,    0,
      0,    0,     322,   27,    1,     0,     0,     0,     323,   324,  5,
      105,  0,     0,     324,   325,   5,     109,   0,     0,     325,  326,
      5,    112,   0,     0,     326,   327,   5,     111,   0,     0,    327,
      328,  5,     114,   0,     0,     328,   329,   5,     116,   0,    0,
      329,  29,    1,     0,     0,     0,     330,   331,   5,     102,  0,
      0,    331,   332,   5,     114,   0,     0,     332,   333,   5,    97,
      0,    0,     333,   334,   5,     103,   0,     0,     334,   335,  5,
      109,  0,     0,     335,   336,   5,     101,   0,     0,     336,  337,
      5,    110,   0,     0,     337,   338,   5,     116,   0,     0,    338,
      31,   1,     0,     0,     0,     339,   340,   5,     108,   0,    0,
      340,  341,   5,     101,   0,     0,     341,   342,   5,     120,  0,
      0,    342,   343,   5,     101,   0,     0,     343,   344,   5,    114,
      0,    0,     344,   33,    1,     0,     0,     0,     345,   346,  5,
      112,  0,     0,     346,   347,   5,     97,    0,     0,     347,  348,
      5,    114,   0,     0,     348,   349,   5,     115,   0,     0,    349,
      350,  5,     101,   0,     0,     350,   351,   5,     114,   0,    0,
      351,  35,    1,     0,     0,     0,     352,   353,   5,     103,  0,
      0,    353,   354,   5,     114,   0,     0,     354,   355,   5,    97,
      0,    0,     355,   356,   5,     109,   0,     0,     356,   357,  5,
      109,  0,     0,     357,   358,   5,     97,    0,     0,     358,  359,
      5,    114,   0,     0,     359,   37,    1,     0,     0,     0,    360,
      361,  5,     112,   0,     0,     361,   362,   5,     114,   0,    0,
      362,  363,   5,     111,   0,     0,     363,   364,   5,     116,  0,
      0,    364,   365,   5,     101,   0,     0,     365,   366,   5,    99,
      0,    0,     366,   367,   5,     116,   0,     0,     367,   368,  5,
      101,  0,     0,     368,   369,   5,     100,   0,     0,     369,  39,
      1,    0,     0,     0,     370,   371,   5,     112,   0,     0,    371,
      372,  5,     117,   0,     0,     372,   373,   5,     98,    0,    0,
      373,  374,   5,     108,   0,     0,     374,   375,   5,     105,  0,
      0,    375,   376,   5,     99,    0,     0,     376,   41,    1,    0,
      0,    0,     377,   378,   5,     112,   0,     0,     378,   379,  5,
      114,  0,     0,     379,   380,   5,     105,   0,     0,     380,  381,
      5,    118,   0,     0,     381,   382,   5,     97,    0,     0,    382,
      383,  5,     116,   0,     0,     383,   384,   5,     101,   0,    0,
      384,  43,    1,     0,     0,     0,     385,   386,   5,     114,  0,
      0,    386,   387,   5,     101,   0,     0,     387,   388,   5,    116,
      0,    0,     388,   389,   5,     117,   0,     0,     389,   390,  5,
      114,  0,     0,     390,   391,   5,     110,   0,     0,     391,  392,
      5,    115,   0,     0,     392,   45,    1,     0,     0,     0,    393,
      394,  5,     108,   0,     0,     394,   395,   5,     111,   0,    0,
      395,  396,   5,     99,    0,     0,     396,   397,   5,     97,   0,
      0,    397,   398,   5,     108,   0,     0,     398,   399,   5,    115,
      0,    0,     399,   47,    1,     0,     0,     0,     400,   401,  5,
      116,  0,     0,     401,   402,   5,     104,   0,     0,     402,  403,
      5,    114,   0,     0,     403,   404,   5,     111,   0,     0,    404,
      405,  5,     119,   0,     0,     405,   406,   5,     115,   0,    0,
      406,  49,    1,     0,     0,     0,     407,   408,   5,     99,   0,
      0,    408,   409,   5,     97,    0,     0,     409,   410,   5,    116,
      0,    0,     410,   411,   5,     99,    0,     0,     411,   412,  5,
      104,  0,     0,     412,   51,    1,     0,     0,     0,     413,  414,
      5,    102,   0,     0,     414,   415,   5,     105,   0,     0,    415,
      416,  5,     110,   0,     0,     416,   417,   5,     97,    0,    0,
      417,  418,   5,     108,   0,     0,     418,   419,   5,     108,  0,
      0,    419,   420,   5,     121,   0,     0,     420,   53,    1,    0,
      0,    0,     421,   422,   5,     109,   0,     0,     422,   423,  5,
      111,  0,     0,     423,   424,   5,     100,   0,     0,     424,  425,
      5,    101,   0,     0,     425,   55,    1,     0,     0,     0,    426,
      427,  3,     192,   94,    0,     427,   57,    1,     0,     0,    0,
      428,  429,   3,     194,   95,    0,     429,   59,    1,     0,    0,
      0,    430,   431,   3,     234,   115,   0,     431,   61,    1,    0,
      0,    0,     432,   433,   3,     236,   116,   0,     433,   63,   1,
      0,    0,     0,     434,   435,   3,     200,   98,    0,     435,  65,
      1,    0,     0,     0,     436,   437,   3,     202,   99,    0,    437,
      67,   1,     0,     0,     0,     438,   439,   3,     204,   100,  0,
      439,  69,    1,     0,     0,     0,     440,   441,   3,     206,  101,
      0,    441,   71,    1,     0,     0,     0,     442,   443,   3,    212,
      104,  0,     443,   73,    1,     0,     0,     0,     444,   445,  3,
      214,  105,   0,     445,   75,    1,     0,     0,     0,     446,  447,
      3,    216,   106,   0,     447,   77,    1,     0,     0,     0,    448,
      449,  3,     218,   107,   0,     449,   79,    1,     0,     0,    0,
      450,  451,   3,     220,   108,   0,     451,   81,    1,     0,    0,
      0,    452,   453,   3,     222,   109,   0,     453,   83,    1,    0,
      0,    0,     454,   455,   3,     226,   111,   0,     455,   85,   1,
      0,    0,     0,     456,   457,   3,     224,   110,   0,     457,  87,
      1,    0,     0,     0,     458,   459,   3,     230,   113,   0,    459,
      89,   1,     0,     0,     0,     460,   461,   3,     232,   114,  0,
      461,  91,    1,     0,     0,     0,     462,   463,   3,     240,  118,
      0,    463,   93,    1,     0,     0,     0,     464,   465,   3,    238,
      117,  0,     465,   95,    1,     0,     0,     0,     466,   467,  3,
      242,  119,   0,     467,   97,    1,     0,     0,     0,     468,  469,
      3,    244,   120,   0,     469,   99,    1,     0,     0,     0,    470,
      471,  3,     246,   121,   0,     471,   101,   1,     0,     0,    0,
      472,  473,   3,     148,   72,    0,     473,   103,   1,     0,    0,
      0,    474,   476,   3,     150,   73,    0,     475,   474,   1,    0,
      0,    0,     476,   477,   1,     0,     0,     0,     477,   475,  1,
      0,    0,     0,     477,   478,   1,     0,     0,     0,     478,  479,
      1,    0,     0,     0,     479,   480,   6,     50,    3,     0,    480,
      105,  1,     0,     0,     0,     481,   482,   9,     0,     0,    0,
      482,  483,   1,     0,     0,     0,     483,   484,   6,     51,   4,
      0,    484,   107,   1,     0,     0,     0,     485,   486,   3,    208,
      102,  0,     486,   487,   1,     0,     0,     0,     487,   488,  6,
      52,   5,     0,     488,   489,   6,     52,    6,     0,     489,  109,
      1,    0,     0,     0,     490,   491,   3,     164,   80,    0,    491,
      492,  1,     0,     0,     0,     492,   493,   6,     53,    5,    0,
      493,  111,   1,     0,     0,     0,     494,   495,   3,     180,  88,
      0,    495,   496,   1,     0,     0,     0,     496,   497,   6,    54,
      5,    0,     497,   113,   1,     0,     0,     0,     498,   499,  3,
      178,  87,    0,     499,   500,   1,     0,     0,     0,     500,  501,
      6,    55,    5,     0,     501,   115,   1,     0,     0,     0,    502,
      503,  3,     210,   103,   0,     503,   504,   6,     56,    7,    0,
      504,  117,   1,     0,     0,     0,     505,   506,   5,     0,    0,
      1,    506,   507,   1,     0,     0,     0,     507,   508,   6,    57,
      8,    0,     508,   119,   1,     0,     0,     0,     509,   510,  9,
      0,    0,     0,     510,   121,   1,     0,     0,     0,     511,  512,
      3,    204,   100,   0,     512,   513,   1,     0,     0,     0,    513,
      514,  6,     59,    9,     0,     514,   515,   6,     59,    2,    0,
      515,  123,   1,     0,     0,     0,     516,   517,   3,     164,  80,
      0,    517,   518,   1,     0,     0,     0,     518,   519,   6,    60,
      9,    0,     519,   125,   1,     0,     0,     0,     520,   521,  3,
      180,  88,    0,     521,   522,   1,     0,     0,     0,     522,  523,
      6,    61,    9,     0,     523,   127,   1,     0,     0,     0,    524,
      525,  3,     178,   87,    0,     525,   526,   1,     0,     0,    0,
      526,  527,   6,     62,    9,     0,     527,   129,   1,     0,    0,
      0,    528,   529,   3,     158,   77,    0,     529,   530,   1,    0,
      0,    0,     530,   531,   6,     63,    9,     0,     531,   131,  1,
      0,    0,     0,     532,   533,   3,     156,   76,    0,     533,  534,
      1,    0,     0,     0,     534,   535,   6,     64,    9,     0,    535,
      133,  1,     0,     0,     0,     536,   537,   3,     160,   78,   0,
      537,  538,   1,     0,     0,     0,     538,   539,   6,     65,   9,
      0,    539,   135,   1,     0,     0,     0,     540,   541,   3,    206,
      101,  0,     541,   542,   6,     66,    10,    0,     542,   137,  1,
      0,    0,     0,     543,   544,   5,     0,     0,     1,     544,  545,
      1,    0,     0,     0,     545,   546,   6,     67,    8,     0,    546,
      139,  1,     0,     0,     0,     547,   548,   9,     0,     0,    0,
      548,  141,   1,     0,     0,     0,     549,   552,   8,     1,    0,
      0,    550,   552,   3,     164,   80,    0,     551,   549,   1,    0,
      0,    0,     551,   550,   1,     0,     0,     0,     552,   553,  1,
      0,    0,     0,     553,   551,   1,     0,     0,     0,     553,  554,
      1,    0,     0,     0,     554,   555,   1,     0,     0,     0,    555,
      556,  6,     69,    11,    0,     556,   143,   1,     0,     0,    0,
      557,  558,   3,     210,   103,   0,     558,   559,   1,     0,    0,
      0,    559,   560,   6,     70,    8,     0,     560,   145,   1,    0,
      0,    0,     561,   562,   5,     0,     0,     1,     562,   563,  1,
      0,    0,     0,     563,   564,   6,     71,    8,     0,     564,  147,
      1,    0,     0,     0,     565,   569,   3,     186,   91,    0,    566,
      568,  3,     184,   90,    0,     567,   566,   1,     0,     0,    0,
      568,  571,   1,     0,     0,     0,     569,   567,   1,     0,    0,
      0,    569,   570,   1,     0,     0,     0,     570,   149,   1,    0,
      0,    0,     571,   569,   1,     0,     0,     0,     572,   575,  3,
      152,  74,    0,     573,   575,   3,     154,   75,    0,     574,  572,
      1,    0,     0,     0,     574,   573,   1,     0,     0,     0,    575,
      151,  1,     0,     0,     0,     576,   577,   7,     2,     0,    0,
      577,  153,   1,     0,     0,     0,     578,   579,   7,     3,    0,
      0,    579,   155,   1,     0,     0,     0,     580,   581,   5,    47,
      0,    0,     581,   582,   5,     42,    0,     0,     582,   586,  1,
      0,    0,     0,     583,   585,   9,     0,     0,     0,     584,  583,
      1,    0,     0,     0,     585,   588,   1,     0,     0,     0,    586,
      587,  1,     0,     0,     0,     586,   584,   1,     0,     0,    0,
      587,  592,   1,     0,     0,     0,     588,   586,   1,     0,    0,
      0,    589,   590,   5,     42,    0,     0,     590,   593,   5,    47,
      0,    0,     591,   593,   5,     0,     0,     1,     592,   589,  1,
      0,    0,     0,     592,   591,   1,     0,     0,     0,     593,  157,
      1,    0,     0,     0,     594,   595,   5,     47,    0,     0,    595,
      596,  5,     42,    0,     0,     596,   597,   5,     42,    0,    0,
      597,  601,   1,     0,     0,     0,     598,   600,   9,     0,    0,
      0,    599,   598,   1,     0,     0,     0,     600,   603,   1,    0,
      0,    0,     601,   602,   1,     0,     0,     0,     601,   599,  1,
      0,    0,     0,     602,   607,   1,     0,     0,     0,     603,  601,
      1,    0,     0,     0,     604,   605,   5,     42,    0,     0,    605,
      608,  5,     47,    0,     0,     606,   608,   5,     0,     0,    1,
      607,  604,   1,     0,     0,     0,     607,   606,   1,     0,    0,
      0,    608,   159,   1,     0,     0,     0,     609,   610,   5,    47,
      0,    0,     610,   611,   5,     47,    0,     0,     611,   615,  1,
      0,    0,     0,     612,   614,   8,     4,     0,     0,     613,  612,
      1,    0,     0,     0,     614,   617,   1,     0,     0,     0,    615,
      613,  1,     0,     0,     0,     615,   616,   1,     0,     0,    0,
      616,  161,   1,     0,     0,     0,     617,   615,   1,     0,    0,
      0,    618,   623,   3,     190,   93,    0,     619,   624,   7,    5,
      0,    0,     620,   624,   3,     166,   81,    0,     621,   624,  9,
      0,    0,     0,     622,   624,   5,     0,     0,     1,     623,  619,
      1,    0,     0,     0,     623,   620,   1,     0,     0,     0,    623,
      621,  1,     0,     0,     0,     623,   622,   1,     0,     0,    0,
      624,  163,   1,     0,     0,     0,     625,   626,   3,     190,  93,
      0,    626,   627,   9,     0,     0,     0,     627,   165,   1,    0,
      0,    0,     628,   639,   5,     117,   0,     0,     629,   637,  3,
      170,  83,    0,     630,   635,   3,     170,   83,    0,     631,  633,
      3,    170,   83,    0,     632,   634,   3,     170,   83,    0,    633,
      632,  1,     0,     0,     0,     633,   634,   1,     0,     0,    0,
      634,  636,   1,     0,     0,     0,     635,   631,   1,     0,    0,
      0,    635,   636,   1,     0,     0,     0,     636,   638,   1,    0,
      0,    0,     637,   630,   1,     0,     0,     0,     637,   638,  1,
      0,    0,     0,     638,   640,   1,     0,     0,     0,     639,  629,
      1,    0,     0,     0,     639,   640,   1,     0,     0,     0,    640,
      167,  1,     0,     0,     0,     641,   650,   5,     48,    0,    0,
      642,  646,   7,     6,     0,     0,     643,   645,   3,     172,  84,
      0,    644,   643,   1,     0,     0,     0,     645,   648,   1,    0,
      0,    0,     646,   644,   1,     0,     0,     0,     646,   647,  1,
      0,    0,     0,     647,   650,   1,     0,     0,     0,     648,  646,
      1,    0,     0,     0,     649,   641,   1,     0,     0,     0,    649,
      642,  1,     0,     0,     0,     650,   169,   1,     0,     0,    0,
      651,  652,   7,     7,     0,     0,     652,   171,   1,     0,    0,
      0,    653,   654,   7,     8,     0,     0,     654,   173,   1,    0,
      0,    0,     655,   656,   5,     116,   0,     0,     656,   657,  5,
      114,  0,     0,     657,   658,   5,     117,   0,     0,     658,  665,
      5,    101,   0,     0,     659,   660,   5,     102,   0,     0,    660,
      661,  5,     97,    0,     0,     661,   662,   5,     108,   0,    0,
      662,  663,   5,     115,   0,     0,     663,   665,   5,     101,  0,
      0,    664,   655,   1,     0,     0,     0,     664,   659,   1,    0,
      0,    0,     665,   175,   1,     0,     0,     0,     666,   669,  3,
      196,  96,    0,     667,   670,   3,     162,   79,    0,     668,  670,
      8,    9,     0,     0,     669,   667,   1,     0,     0,     0,    669,
      668,  1,     0,     0,     0,     670,   671,   1,     0,     0,    0,
      671,  672,   3,     196,   96,    0,     672,   177,   1,     0,    0,
      0,    673,   678,   3,     196,   96,    0,     674,   677,   3,    162,
      79,   0,     675,   677,   8,     9,     0,     0,     676,   674,  1,
      0,    0,     0,     676,   675,   1,     0,     0,     0,     677,  680,
      1,    0,     0,     0,     678,   676,   1,     0,     0,     0,    678,
      679,  1,     0,     0,     0,     679,   681,   1,     0,     0,    0,
      680,  678,   1,     0,     0,     0,     681,   682,   3,     196,  96,
      0,    682,   179,   1,     0,     0,     0,     683,   688,   3,    198,
      97,   0,     684,   687,   3,     162,   79,    0,     685,   687,  8,
      10,   0,     0,     686,   684,   1,     0,     0,     0,     686,  685,
      1,    0,     0,     0,     687,   690,   1,     0,     0,     0,    688,
      686,  1,     0,     0,     0,     688,   689,   1,     0,     0,    0,
      689,  691,   1,     0,     0,     0,     690,   688,   1,     0,    0,
      0,    691,   692,   3,     198,   97,    0,     692,   181,   1,    0,
      0,    0,     693,   698,   3,     196,   96,    0,     694,   697,  3,
      162,  79,    0,     695,   697,   8,     9,     0,     0,     696,  694,
      1,    0,     0,     0,     696,   695,   1,     0,     0,     0,    697,
      700,  1,     0,     0,     0,     698,   696,   1,     0,     0,    0,
      698,  699,   1,     0,     0,     0,     699,   183,   1,     0,    0,
      0,    700,   698,   1,     0,     0,     0,     701,   706,   3,    186,
      91,   0,     702,   706,   2,     48,    57,    0,     703,   706,  3,
      228,  112,   0,     704,   706,   7,     11,    0,     0,     705,  701,
      1,    0,     0,     0,     705,   702,   1,     0,     0,     0,    705,
      703,  1,     0,     0,     0,     705,   704,   1,     0,     0,    0,
      706,  185,   1,     0,     0,     0,     707,   708,   7,     12,   0,
      0,    708,   187,   1,     0,     0,     0,     709,   710,   5,    105,
      0,    0,     710,   711,   5,     110,   0,     0,     711,   712,  5,
      116,  0,     0,     712,   189,   1,     0,     0,     0,     713,  714,
      5,    92,    0,     0,     714,   191,   1,     0,     0,     0,    715,
      716,  5,     58,    0,     0,     716,   193,   1,     0,     0,    0,
      717,  718,   5,     58,    0,     0,     718,   719,   5,     58,   0,
      0,    719,   195,   1,     0,     0,     0,     720,   721,   5,    39,
      0,    0,     721,   197,   1,     0,     0,     0,     722,   723,  5,
      34,   0,     0,     723,   199,   1,     0,     0,     0,     724,  725,
      5,    40,    0,     0,     725,   201,   1,     0,     0,     0,    726,
      727,  5,     41,    0,     0,     727,   203,   1,     0,     0,    0,
      728,  729,   5,     123,   0,     0,     729,   205,   1,     0,    0,
      0,    730,   731,   5,     125,   0,     0,     731,   207,   1,    0,
      0,    0,     732,   733,   5,     91,    0,     0,     733,   209,  1,
      0,    0,     0,     734,   735,   5,     93,    0,     0,     735,  211,
      1,    0,     0,     0,     736,   737,   5,     45,    0,     0,    737,
      738,  5,     62,    0,     0,     738,   213,   1,     0,     0,    0,
      739,  740,   5,     60,    0,     0,     740,   215,   1,     0,    0,
      0,    741,   742,   5,     62,    0,     0,     742,   217,   1,    0,
      0,    0,     743,   744,   5,     61,    0,     0,     744,   219,  1,
      0,    0,     0,     745,   746,   5,     63,    0,     0,     746,  221,
      1,    0,     0,     0,     747,   748,   5,     42,    0,     0,    748,
      223,  1,     0,     0,     0,     749,   750,   5,     43,    0,    0,
      750,  225,   1,     0,     0,     0,     751,   752,   5,     43,   0,
      0,    752,   753,   5,     61,    0,     0,     753,   227,   1,    0,
      0,    0,     754,   755,   5,     95,    0,     0,     755,   229,  1,
      0,    0,     0,     756,   757,   5,     124,   0,     0,     757,  231,
      1,    0,     0,     0,     758,   759,   5,     36,    0,     0,    759,
      233,  1,     0,     0,     0,     760,   761,   5,     44,    0,    0,
      761,  235,   1,     0,     0,     0,     762,   763,   5,     59,   0,
      0,    763,   237,   1,     0,     0,     0,     764,   765,   5,    46,
      0,    0,     765,   239,   1,     0,     0,     0,     766,   767,  5,
      46,   0,     0,     767,   768,   5,     46,    0,     0,     768,  241,
      1,    0,     0,     0,     769,   770,   5,     64,    0,     0,    770,
      243,  1,     0,     0,     0,     771,   772,   5,     35,    0,    0,
      772,  245,   1,     0,     0,     0,     773,   774,   5,     126,  0,
      0,    774,   247,   1,     0,     0,     0,     33,    0,     1,    2,
      3,    284,   299,   316,   477,   551,   553,   569,   574,   586,  592,
      601,  607,   615,   623,   633,   635,   637,   639,   646,   649,  664,
      669,  676,   678,   686,   688,   696,   698,   705,   12,    0,    3,
      0,    1,     6,     0,     5,     2,     0,     0,     2,     0,    0,
      1,    0,     7,     57,    0,     5,     1,     0,     1,     56,   1,
      4,    0,     0,     7,     60,    0,     1,     66,    2,     3,    0,
      0};
  staticData->serializedATN = antlr4::atn::SerializedATNView(
      serializedATNSegment,
      sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0]));

  antlr4::atn::ATNDeserializer deserializer;
  staticData->atn = deserializer.deserialize(staticData->serializedATN);

  const size_t count = staticData->atn->getNumberOfDecisions();
  staticData->decisionToDFA.reserve(count);
  for (size_t i = 0; i < count; i++) {
    staticData->decisionToDFA.emplace_back(staticData->atn->getDecisionState(i),
                                           i);
  }
  antlrv4lexerLexerStaticData = staticData.release();
}

}  // namespace

ANTLRv4Lexer::ANTLRv4Lexer(CharStream *input) : LexerAdaptor(input) {
  ANTLRv4Lexer::initialize();
  _interpreter = new atn::LexerATNSimulator(
      this, *antlrv4lexerLexerStaticData->atn,
      antlrv4lexerLexerStaticData->decisionToDFA,
      antlrv4lexerLexerStaticData->sharedContextCache);
}

ANTLRv4Lexer::~ANTLRv4Lexer() { delete _interpreter; }

std::string ANTLRv4Lexer::getGrammarFileName() const {
  return "ANTLRv4Lexer.g4";
}

const std::vector<std::string> &ANTLRv4Lexer::getRuleNames() const {
  return antlrv4lexerLexerStaticData->ruleNames;
}

const std::vector<std::string> &ANTLRv4Lexer::getChannelNames() const {
  return antlrv4lexerLexerStaticData->channelNames;
}

const std::vector<std::string> &ANTLRv4Lexer::getModeNames() const {
  return antlrv4lexerLexerStaticData->modeNames;
}

const dfa::Vocabulary &ANTLRv4Lexer::getVocabulary() const {
  return antlrv4lexerLexerStaticData->vocabulary;
}

antlr4::atn::SerializedATNView ANTLRv4Lexer::getSerializedATN() const {
  return antlrv4lexerLexerStaticData->serializedATN;
}

const atn::ATN &ANTLRv4Lexer::getATN() const {
  return *antlrv4lexerLexerStaticData->atn;
}

int LexerAdaptor::getCurrentRuleType() { return currentRuleType; }

void LexerAdaptor::setCurrentRuleType(int ruleType) {
  currentRuleType = ruleType;
}

void LexerAdaptor::handleBeginArgument() {
  if (inLexerRule()) {
    pushMode(ANTLRv4Lexer::LexerCharSet);
    more();
  } else {
    pushMode(ANTLRv4Lexer::Argument);
  }
}

void LexerAdaptor::handleEndArgument() {
  popMode();
  if (!modeStack.empty()) {
    setType(ANTLRv4Lexer::ARGUMENT_CONTENT);
  }
}

void LexerAdaptor::handleEndAction() {
  popMode();
  if (!modeStack.empty()) {
    setType(ANTLRv4Lexer::ACTION_CONTENT);
  }
}

antlr4::Token *LexerAdaptor::emit() {
  if (type == ANTLRv4Lexer::ID) {
    std::string firstChar = _input->getText(
        antlr4::misc::Interval(tokenStartCharIndex, tokenStartCharIndex));
    if (isupper(firstChar.at(0))) {
      type = ANTLRv4Lexer::TOKEN_REF;
    } else {
      type = ANTLRv4Lexer::RULE_REF;
    }

    if (currentRuleType ==
        antlr4::Token::INVALID_TYPE) {  // if outside of rule def
      currentRuleType =
          static_cast<int>(type);  // set to inside lexer or parser rule
    }
  } else if (type == ANTLRv4Lexer::SEMI) {  // exit rule def
    currentRuleType = antlr4::Token::INVALID_TYPE;
  }

  return Lexer::emit();
}

bool LexerAdaptor::inLexerRule() {
  return currentRuleType == ANTLRv4Lexer::TOKEN_REF;
}

bool LexerAdaptor::inParserRule() {  // not used, but added for clarity
  return currentRuleType == ANTLRv4Lexer::RULE_REF;
}

void ANTLRv4Lexer::action(RuleContext *context, size_t ruleIndex,
                          size_t actionIndex) {
  switch (ruleIndex) {
    case 6:
      BEGIN_ARGUMENTAction(antlrcpp::downCast<antlr4::RuleContext *>(context),
                           actionIndex);
      break;
    case 56:
      END_ARGUMENTAction(antlrcpp::downCast<antlr4::RuleContext *>(context),
                         actionIndex);
      break;
    case 66:
      END_ACTIONAction(antlrcpp::downCast<antlr4::RuleContext *>(context),
                       actionIndex);
      break;

    default:
      break;
  }
}

void ANTLRv4Lexer::BEGIN_ARGUMENTAction(antlr4::RuleContext *context,
                                        size_t actionIndex) {
  switch (actionIndex) {
    case 0:
      self.handleBeginArgument();
      break;

    default:
      break;
  }
}

void ANTLRv4Lexer::END_ARGUMENTAction(antlr4::RuleContext *context,
                                      size_t actionIndex) {
  switch (actionIndex) {
    case 1:
      self.handleEndArgument();
      break;

    default:
      break;
  }
}

void ANTLRv4Lexer::END_ACTIONAction(antlr4::RuleContext *context,
                                    size_t actionIndex) {
  switch (actionIndex) {
    case 2:
      self.handleEndAction();
      break;

    default:
      break;
  }
}

void ANTLRv4Lexer::initialize() {
  ::antlr4::internal::call_once(antlrv4lexerLexerOnceFlag,
                                antlrv4lexerLexerInitialize);
}
