Package gherkin.lexer

Source Code of gherkin.lexer.Th

// line 1 "ragel/i18n/th.java.rl"
package gherkin.lexer;

import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.ArrayList;
import java.util.regex.Pattern;
import gherkin.lexer.Lexer;
import gherkin.lexer.Listener;
import gherkin.lexer.LexingError;

public class Th implements Lexer {
 
// line 150 "ragel/i18n/th.java.rl"


  private final Listener listener;

  public Th(Listener listener) {
    this.listener = listener;
  }

 
// line 26 "java/src/main/java/gherkin/lexer/Th.java"
private static byte[] init__lexer_actions_0()
{
  return new byte [] {
      0,    1,    0,    1,    1,    1,    2,    1,    3,    1,    4,    1,
      5,    1,    6,    1,    7,    1,    8,    1,    9,    1,   10,    1,
     11,    1,   12,    1,   13,    1,   16,    1,   17,    1,   18,    1,
     19,    1,   20,    1,   21,    1,   22,    1,   23,    2,    2,   18,
      2,    3,    4,    2,   13,    0,    2,   14,   15,    2,   17,    0,
      2,   17,    1,    2,   17,   16,    2,   17,   19,    2,   18,    6,
      2,   18,    7,    2,   18,    8,    2,   18,    9,    2,   18,   10,
      2,   18,   16,    2,   20,   21,    2,   22,    0,    2,   22,    1,
      2,   22,   16,    2,   22,   19,    3,    4,   14,   15,    3,    5,
     14,   15,    3,   11,   14,   15,    3,   12,   14,   15,    3,   13,
     14,   15,    3,   14,   15,   18,    3,   17,    0,   11,    3,   17,
     14,   15,    4,    2,   14,   15,   18,    4,    3,    4,   14,   15,
      4,   17,    0,   14,   15,    5,   17,    0,   11,   14,   15
  };
}

private static final byte _lexer_actions[] = init__lexer_actions_0();


private static short[] init__lexer_key_offsets_0()
{
  return new short [] {
      0,    0,   12,   14,   19,   20,   21,   22,   23,   24,   25,   26,
     27,   28,   29,   30,   31,   32,   33,   34,   35,   36,   37,   38,
     39,   40,   41,   43,   45,   56,   57,   58,   60,   62,   67,   72,
     77,   82,   86,   90,   92,   93,   94,   95,   96,   97,   98,   99,
    100101102103104105106107112119124128,
    134137139145156157158159160161162163,
    164165166167169170171172173174175176,
    177178179180181182183184185186187188,
    189190191192193194195196197198199200,
    201202203204205206207208209210211212,
    213214215216217225228232234236238240,
    242244246248250252254257259261263265,
    267269271273275277279281283285287289,
    291293295297299301303305307309311313,
    315317319321323325327329331333335337,
    339341343345347349360362364366368370,
    372374376378380382384386388390392394,
    396398400402404406408410412414416418,
    420422425427429431433435437439441443,
    445447449451453455457459461463465467,
    469471473475477479481483485487489491,
    493495497499501503505507509511513515,
    517519521523525527529531533535537539,
    541545547549551553555557559561563565,
    567569571573575577579581583585587589,
    591593595597600602604606608610612614,
    616618620622624626628630632634636638,
    640642644646648650652654656658660662,
    664666668670672674676678680682684686,
    688689690691692693694695696697698699,
    700701702703704705706707708709710711,
    712713714715716717718719721722723724,
    725726727728729730731732733734735736,
    737738739740741742743744745746753756,
    758760762764766768770772774776778780,
    783785787789791793795797799801803805,
    807809811813815817819821823825827829,
    831833835837839841843845847849851853,
    855857859861863865867869871873875877,
    879881883885887889891893895897899901,
    903905907909911913915917919921923925,
    927929931933935937939941943945947949,
    950951952953954955956957958959960961,
    962963964965966967968969970971972973,
    974975976977978979980981982983984985,
    986987988989990991992993994995996997,
    998999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1009,
   1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021,
   1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1040, 1043,
   1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069,
   1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093,
   1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113, 1116, 1118,
   1120, 1122, 1124, 1126, 1128, 1130, 1132, 1134, 1136, 1138, 1140, 1142,
   1144, 1146, 1148, 1150, 1152, 1154, 1156, 1158, 1160, 1162, 1164, 1166,
   1168, 1170, 1172, 1174, 1176, 1178, 1180, 1182, 1184, 1186, 1188, 1190,
   1192, 1194, 1196, 1198, 1200, 1202, 1204, 1206, 1208, 1210, 1212, 1214,
   1216, 1218, 1220, 1222, 1224, 1226, 1228, 1230, 1232, 1234, 1236, 1238,
   1240, 1242, 1244, 1246, 1248, 1250, 1252, 1254, 1256, 1258, 1260, 1262,
   1264, 1266, 1268, 1270, 1272, 1274, 1278, 1280, 1282, 1285, 1287, 1289,
   1291, 1293, 1295, 1297, 1299, 1301, 1303, 1305, 1307, 1309, 1311, 1313,
   1315, 1317, 1319, 1321, 1323, 1325, 1327, 1329, 1331, 1333, 1335, 1337,
   1339, 1341, 1343, 1345, 1347, 1349, 1352, 1354, 1356, 1358, 1360, 1362,
   1364, 1366, 1368, 1370, 1372, 1374, 1376, 1378, 1380, 1382, 1384, 1386,
   1388, 1390, 1392, 1394, 1396, 1398, 1400, 1402, 1404, 1406, 1408, 1410,
   1412, 1414, 1416, 1418, 1420, 1422, 1424, 1426, 1428, 1430, 1432, 1434,
   1437, 1438, 1439, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449,
   1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461,
   1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473,
   1474, 1483, 1486, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 1505, 1507,
   1509, 1511, 1513, 1515, 1517, 1519, 1521, 1523, 1525, 1527, 1529, 1531,
   1533, 1535, 1537, 1539, 1541, 1543, 1545, 1547, 1549, 1551, 1553, 1555,
   1557, 1560, 1562, 1564, 1566, 1568, 1570, 1572, 1574, 1576, 1578, 1580,
   1582, 1584, 1586, 1588, 1590, 1592, 1594, 1596, 1598, 1600, 1602, 1604,
   1606, 1608, 1610, 1612, 1614, 1616, 1618, 1620, 1622, 1624, 1626, 1628,
   1630, 1632, 1634, 1636, 1638, 1640, 1642, 1644, 1646, 1648, 1650, 1652,
   1654, 1656, 1658, 1660, 1662, 1664, 1666, 1668, 1670, 1672, 1674, 1676,
   1678, 1680, 1682, 1684, 1686, 1688, 1690, 1692, 1694, 1696, 1698, 1700,
   1702, 1704, 1706, 1708, 1710, 1712, 1714, 1716, 1718, 1720, 1722, 1724,
   1726, 1728, 1730, 1732, 1734, 1736, 1738, 1740, 1742, 1744, 1746, 1748,
   1750, 1752, 1754, 1756, 1758, 1760, 1762, 1764, 1766, 1768, 1770, 1772,
   1774, 1776, 1778, 1780, 1782, 1784, 1786, 1788, 1790, 1794, 1796, 1798,
   1801, 1803, 1805, 1807, 1809, 1811, 1813, 1815, 1817, 1819, 1821, 1823,
   1827, 1829, 1831, 1833, 1835, 1837, 1839, 1841, 1843, 1845, 1847, 1849,
   1851, 1853, 1855, 1857, 1859, 1861, 1863, 1865, 1867, 1869, 1871, 1873,
   1875, 1877, 1879, 1881, 1883, 1885, 1888, 1890, 1892, 1894, 1896, 1898,
   1900, 1902, 1904, 1906, 1908, 1910, 1912, 1914, 1916, 1918, 1920, 1922,
   1924, 1926, 1928, 1930, 1932, 1934, 1936, 1938, 1940, 1942, 1944, 1946,
   1948, 1950, 1952, 1954, 1956, 1958, 1960, 1962, 1964, 1966, 1968, 1970,
   1972, 1974, 1976, 1977, 1978, 1981, 1982, 1983, 1984, 1985, 1986, 1987,
   1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
   2008, 2011, 2016, 2018, 2020, 2022, 2024, 2026, 2028, 2030, 2032, 2034,
   2036, 2038, 2040, 2042, 2044, 2046, 2048, 2050, 2052, 2054, 2056, 2058,
   2060, 2062, 2064, 2066, 2068, 2070, 2072, 2074, 2076, 2078, 2080, 2082,
   2085, 2087, 2089, 2091, 2093, 2095, 2097, 2099, 2101, 2103, 2105, 2107,
   2109, 2111, 2113, 2115, 2117, 2119, 2121, 2123, 2125, 2127, 2129, 2131,
   2133, 2135, 2137, 2139, 2141, 2143, 2145, 2147, 2149, 2151, 2153, 2155,
   2157, 2159, 2161, 2163, 2165, 2167, 2169, 2171, 2173, 2175, 2177, 2179,
   2181, 2183, 2185, 2187, 2189, 2191, 2193, 2195, 2197, 2199, 2201, 2203,
   2205, 2207, 2209, 2211, 2213, 2215, 2217, 2219, 2221, 2223, 2225, 2227,
   2229, 2231, 2233, 2235, 2237, 2239, 2241, 2243, 2245, 2247, 2249, 2251,
   2253, 2255, 2257, 2259, 2261, 2263, 2265, 2267, 2269, 2271, 2273, 2275,
   2277, 2279, 2281, 2283, 2285, 2287, 2289, 2291, 2293, 2295, 2297, 2299,
   2301, 2303, 2305, 2307, 2309, 2311, 2313, 2315, 2319, 2321, 2323, 2326,
   2328, 2330, 2332, 2334, 2336, 2338, 2340, 2342, 2344, 2346, 2348, 2351,
   2353, 2355, 2357, 2359, 2361, 2363, 2365, 2367, 2369, 2371, 2373, 2375,
   2377, 2379, 2381, 2383, 2385, 2388, 2390, 2392, 2394, 2396, 2398, 2400,
   2402, 2404, 2406, 2408, 2410, 2412, 2414, 2416, 2418, 2420, 2422, 2424,
   2426, 2428, 2430, 2432, 2434, 2436, 2438, 2440, 2442, 2444, 2446, 2448,
   2450, 2452, 2454, 2456, 2458, 2460, 2462, 2464, 2466, 2468, 2470, 2472,
   2474, 2476, 2477, 2478, 2479, 2480, 2481, 2482, 2483, 2484, 2485, 2486,
   2487, 2488, 2489, 2490, 2492, 2493, 2494, 2495, 2496, 2497, 2498, 2499,
   2500, 2501, 2502, 2503, 2504, 2505, 2506, 2507, 2508, 2509, 2510, 2511,
   2512, 2513, 2514, 2515, 2516, 2517, 2518, 2519, 2520, 2521, 2522, 2523,
   2524
  };
}

private static final short _lexer_key_offsets[] = init__lexer_key_offsets_0();


private static byte[] init__lexer_trans_keys_0()
{
  return new byte [] {
    -32,  -17,   10,   32,   34,   35,   37,   42,   64124,    9,   13,
    -72,  -71, -127, -124, -118, -108,  -86,  -32,  -72,  -77,  -32,  -72,
    -85,  -32,  -72, -103,  -32,  -72, -108,  -32,  -71, -125,  -32,  -72,
    -85,  -32,  -71, -119,   32,   10,   13,   10,   13,  -32,   10,   32,
     34,   35,   37,   42,   64124,    9,   13,   34,   34,   10,   13,
     10,   13,   10,   32,   34,    9,   13,   10,   32,   34,    9,   13,
     10,   32,   34,    9,   13,   10,   32,   34,    9,   13,   10,   32,
      9,   13,   10,   32,    9,   13,   10,   13,   10,   95,   70,   69,
     65,   84,   85,   82,   69,   95,   69,   78,   68,   95,   37,   13,
     32,   64,    9,   10,    9,   10,   13,   32,   64,   11,   12,   10,
     32,   64,    9,   13,   32124,    9,   13,   10,   32,   92124,
      9,   13,   10,   92124,   10,   92,   10,   32,   92124,    9,
     13,  -32,   10,   32,   34,   35,   37,   42,   64124,    9,   13,
    -32,  -72,  -89,  -32,  -72,  -78,  -32,  -72,  -95,  -32,  -72, -107,
    -86,  -32,  -71, -119,  -32,  -72,  -83,  -32,  -72, -121,  -32,  -72,
   -127,  -32,  -72,  -78,  -32,  -72,  -93,  -32,  -72, -105,  -32,  -72,
    -78,  -32,  -72, -121,  -32,  -72, -104,  -32,  -72,  -72,  -32,  -72,
    -93,  -32,  -72, -127,  -32,  -72,  -76,  -32,  -72, -120,   58,   10,
     10,  -32,   10,   32,   35,   37,   64,    9,   13,  -72,  -71,   10,
   -124, -118,  -86,   10,  -32,   10,  -72,   10,  -89,   10,  -32,   10,
    -72,   10,  -78,   10,  -32,   10,  -72,   10,  -95,   10,  -32,   10,
    -72,   10, -107,  -86,   10,  -32,   10,  -71,   10, -119,   10,  -32,
     10,  -72,   10,  -83,   10,  -32,   10,  -72,   10, -121,   10,  -32,
     10,  -72,   10, -127,   10,  -32,   10,  -72,   10,  -78,   10,  -32,
     10,  -72,   10,  -93,   10,  -32,   10,  -72,   10, -105,   10,  -32,
     10,  -72,   10,  -78,   10,  -32,   10,  -72,   10, -121,   10,  -32,
     10,  -72,   10, -104,   10,  -32,   10,  -72,   10,  -72,   10,  -32,
     10,  -72,   10,  -93,   10,  -32,   10,  -72,   10, -127,   10,  -32,
     10,  -72,   10,  -76,   10,  -32,   10,  -72,   10, -120,   10,   10,
     58,  -32,   10,   32,   34,   35,   37,   42,   64124,    9,   13,
    -32,   10,  -72,   10,  -78,   10,  -32,   10,  -72,   10,  -95,   10,
    -32,   10,  -72,   10,  -78,   10,  -32,   10,  -72,   10,  -93,   10,
    -32,   10,  -72,   10, -106,   10,  -32,   10,  -72,   10,  -72,   10,
    -32,   10,  -72,   10, -108,   10,  -32,   10,  -72,   10, -126,   10,
    -32,   10,  -72,   10,  -83,   10,  -32,   10,  -72,   10, -121,   10,
    -32,   10,  -72,  -71,   10, -107,   10,  -32,   10,  -72,   10,  -79,
     10,  -32,   10,  -72,   10,  -89,   10,  -32,   10,  -72,   10,  -83,
     10,  -32,   10,  -72,   10,  -94,   10,  -32,   10,  -71,   10, -120,
     10,  -32,   10,  -72,   10,  -78,   10,  -32,   10,  -72,   10, -121,
     10, -128,   10,  -32,   10,  -72,   10,  -85,   10,  -32,   10,  -72,
     10, -107,   10,  -32,   10,  -72,   10,  -72,   10,  -32,   10,  -72,
     10, -127,   10,  -32,   10,  -72,   10,  -78,   10,  -32,   10,  -72,
     10,  -93,   10,  -32,   10,  -72,   10, -109,   10,  -32,   10,  -71,
     10, -116,   10,  -32,   10,  -72,   10,  -93,   10,  -32,   10,  -72,
     10,  -72,   10,  -32,   10,  -72,   10, -101,   10,  -32,   10,  -71,
     10, -128, -127, -126,   10,  -32,   10,  -72,   10, -103,   10,  -32,
     10,  -72,   10,  -89,   10,  -32,   10,  -72,   10, -124,   10,  -32,
     10,  -72,   10,  -76,   10,  -32,   10,  -72,   10, -108,   10,  -32,
     10,  -72,   10, -124,   10,  -32,   10,  -72,   10,  -93,   10,  -32,
     10,  -72,   10, -121,   10,  -32,   10,  -72,   10,  -86,  -85,   10,
    -32,   10,  -72,   10,  -93,   10,  -32,   10,  -71,   10, -119,   10,
    -32,   10,  -72,   10,  -78,   10,  -32,   10,  -72,   10, -121,   10,
    -32,   10,  -72,   10, -126,   10,  -32,   10,  -72,   10,  -83,   10,
    -32,   10,  -72,   10, -121,   10,  -32,   10,  -72,   10,  -91,   10,
    -32,   10,  -72,   10,  -79,   10,  -32,   10,  -72,   10, -127,   10,
     10,   95,   10,   70,   10,   69,   10,   65,   10,   84,   10,   85,
     10,   82,   10,   69,   10,   95,   10,   69,   10,   78,   10,   68,
     10,   95,   10,   37,  -32,  -72,  -78,  -32,  -72,  -95,  -32,  -72,
    -78,  -32,  -72,  -93,  -32,  -72, -106,  -32,  -72,  -72,  -32,  -72,
   -108,  -32,  -72, -126,  -32,  -72,  -83,  -32,  -72, -121,  -32,  -72,
    -71, -107,  -32,  -72,  -79,  -32,  -72,  -89,  -32,  -72,  -83,  -32,
    -72,  -94,  -32,  -71, -120,  -32,  -72,  -78,  -32,  -72, -121,   58,
     10,   10,  -32,   10,   32,   35124,    9,   13,  -72,  -71,   10,
   -124,   10,  -32,   10,  -72,   10,  -89,   10,  -32,   10,  -72,   10,
    -78,   10,  -32,   10,  -72,   10,  -95,   10,  -32,   10,  -72,   10,
   -107,  -86,   10,  -32,   10,  -71,   10, -119,   10,  -32,   10,  -72,
     10,  -83,   10,  -32,   10,  -72,   10, -121,   10,  -32,   10,  -72,
     10, -127,   10,  -32,   10,  -72,   10,  -78,   10,  -32,   10,  -72,
     10,  -93,   10,  -32,   10,  -72,   10, -105,   10,  -32,   10,  -72,
     10,  -78,   10,  -32,   10,  -72,   10, -121,   10,  -32,   10,  -72,
     10, -104,   10,  -32,   10,  -72,   10,  -72,   10,  -32,   10,  -72,
     10,  -93,   10,  -32,   10,  -72,   10, -127,   10,  -32,   10,  -72,
     10,  -76,   10,  -32,   10,  -72,   10, -120,   10,   10,   58,  -32,
     10,  -72,   10,  -78,   10,  -32,   10,  -72,   10,  -95,   10,  -32,
     10,  -72,   10,  -78,   10,  -32,   10,  -72,   10,  -93,   10,  -32,
     10,  -72,   10, -106,   10, -126,   10,  -32,   10,  -72,   10, -124,
     10,  -32,   10,  -72,   10,  -93,   10,  -32,   10,  -72,   10, -121,
     10,  -32,   10,  -72,   10,  -85,   10,  -32,   10,  -72,   10,  -91,
     10,  -32,   10,  -72,   10,  -79,   10,  -32,   10,  -72,   10, -127,
     10, -128,  -32,  -72,  -85,  -32,  -72, -107,  -32,  -72,  -72,  -32,
    -72, -127,  -32,  -72,  -78,  -32,  -72,  -93,  -32,  -72, -109,  -32,
    -71, -116,  -32,  -72,  -79,  -32,  -72, -121,  -32,  -72, -103,  -32,
    -72,  -79,  -32,  -71, -119,  -32,  -72, -103,  -32,  -72,  -93,  -32,
    -72,  -72,  -32,  -72, -101,  -32,  -71, -128,  -32,  -72,  -85,  -32,
    -72, -107,  -32,  -72,  -72,  -32,  -72, -127,  -32,  -72,  -78,  -32,
    -72,  -93,  -32,  -72, -109,  -32,  -71, -116,   58,   10,   10,  -32,
     10,   32,   35,   37,   42,   64,    9,   13,  -72,  -71,   10, -127,
   -124, -108,   10,  -32,   10,  -72,   10,  -77,   10,  -32,   10,  -72,
     10,  -85,   10,  -32,   10,  -72,   10, -103,   10,  -32,   10,  -72,
     10, -108,   10,  -32,   10,  -71,   10, -125,   10,  -32,   10,  -72,
     10,  -85,   10,  -32,   10,  -71,   10, -119,   10,   10,   32,  -32,
     10,  -72,   10,  -89,   10,  -32,   10,  -72,   10,  -78,   10,  -32,
     10,  -72,   10,  -95,   10,  -32,   10,  -72,   10, -107,  -86,   10,
    -32,   10,  -71,   10, -119,   10,  -32,   10,  -72,   10,  -83,   10,
    -32,   10,  -72,   10, -121,   10,  -32,   10,  -72,   10, -127,   10,
    -32,   10,  -72,   10,  -78,   10,  -32,   10,  -72,   10,  -93,   10,
    -32,   10,  -72,   10, -105,   10,  -32,   10,  -72,   10,  -78,   10,
    -32,   10,  -72,   10, -121,   10,  -32,   10,  -72,   10, -104,   10,
    -32,   10,  -72,   10,  -72,   10,  -32,   10,  -72,   10,  -93,   10,
    -32,   10,  -72,   10, -127,   10,  -32,   10,  -72,   10,  -76,   10,
    -32,   10,  -72,   10, -120,   10,   10,   58,  -32,   10,  -72,   10,
    -78,   10,  -32,   10,  -72,   10,  -95,   10,  -32,   10,  -72,   10,
    -78,   10,  -32,   10,  -72,   10,  -93,   10,  -32,   10,  -72,   10,
   -106,   10,  -32,   10,  -72,   10,  -79,   10,  -32,   10,  -72,   10,
   -121,   10,  -32,   10,  -72,   10, -103,   10,  -32,   10,  -72,   10,
    -79,   10,  -32,   10,  -71,   10, -119,   10,  -32,   10,  -72,   10,
   -103,   10, -128, -127, -126,   10,  -32,   10,  -72,   10,  -95,  -85,
     10,  -32,   10,  -72,   10,  -73,   10,  -32,   10,  -71,   10, -120,
     10,  -32,   10,  -72,   10,  -83,   10,  -32,   10,  -72,   10, -107,
     10,  -32,   10,  -72,   10,  -72,   10,  -32,   10,  -72,   10, -127,
     10,  -32,   10,  -72,   10,  -78,   10,  -32,   10,  -72,   10,  -93,
     10,  -32,   10,  -72,   10, -109,   10,  -32,   10,  -71,   10, -116,
     10,  -32,   10,  -72,   10, -107,  -91,   10,  -32,   10,  -71,   10,
   -120,   10,  -32,   10,  -72,   10,  -80,   10,  -32,   10,  -72,   10,
   -124,   10,  -32,   10,  -72,   10,  -93,   10,  -32,   10,  -72,   10,
   -121,   10,  -32,   10,  -72,   10,  -85,   10,  -32,   10,  -72,   10,
    -91,   10,  -32,   10,  -72,   10,  -79,   10,  -32,   10,  -72,   10,
   -127,   10,   10,   95,   10,   70,   10,   69,   10,   65,   10,   84,
     10,   85,   10,   82,   10,   69,   10,   95,   10,   69,   10,   78,
     10,   68,   10,   95,   10,   37, -128, -127, -126,  -32,  -72,  -95,
    -85,  -32,  -72,  -73,  -32,  -71, -120,  -32,  -72,  -83,  -32,  -72,
   -107,  -32,  -72,  -72,  -32,  -72, -127,  -32,  -72,  -78,  -32,  -72,
    -93,  -32,  -72, -109,  -32,  -71, -116,   58,   10,   10,  -32,   10,
     32,   35,   37,   42,   64,    9,   13,  -72,  -71,   10, -127, -124,
   -108,  -86,   10,  -32,   10,  -72,   10,  -77,   10,  -32,   10,  -72,
     10,  -85,   10,  -32,   10,  -72,   10, -103,   10,  -32,   10,  -72,
     10, -108,   10,  -32,   10,  -71,   10, -125,   10,  -32,   10,  -72,
     10,  -85,   10,  -32,   10,  -71,   10, -119,   10,   10,   32,  -32,
     10,  -72,   10,  -89,   10,  -32,   10,  -72,   10,  -78,   10,  -32,
     10,  -72,   10,  -95,   10,  -32,   10,  -72,   10, -107,  -86,   10,
    -32,   10,  -71,   10, -119,   10,  -32,   10,  -72,   10,  -83,   10,
    -32,   10,  -72,   10, -121,   10,  -32,   10,  -72,   10, -127,   10,
    -32,   10,  -72,   10,  -78,   10,  -32,   10,  -72,   10,  -93,   10,
    -32,   10,  -72,   10, -105,   10,  -32,   10,  -72,   10,  -78,   10,
    -32,   10,  -72,   10, -121,   10,  -32,   10,  -72,   10, -104,   10,
    -32,   10,  -72,   10,  -72,   10,  -32,   10,  -72,   10,  -93,   10,
    -32,   10,  -72,   10, -127,   10,  -32,   10,  -72,   10,  -76,   10,
    -32,   10,  -72,   10, -120,   10,   10,   58,  -32,   10,  -72,   10,
    -78,   10,  -32,   10,  -72,   10,  -95,   10,  -32,   10,  -72,   10,
    -78,   10,  -32,   10,  -72,   10,  -93,   10,  -32,   10,  -72,   10,
   -106,   10,  -32,   10,  -72,   10,  -79,   10,  -32,   10,  -72,   10,
   -121,   10,  -32,   10,  -72,   10, -103,   10,  -32,   10,  -72,   10,
    -79,   10,  -32,   10,  -71,   10, -119,   10,  -32,   10,  -72,   10,
   -103,   10,  -32,   10,  -72,   10,  -93,   10,  -32,   10,  -72,   10,
    -72,   10,  -32,   10,  -72,   10, -101,   10,  -32,   10,  -71,   10,
   -128,   10,  -32,   10,  -72,   10,  -85,   10,  -32,   10,  -72,   10,
   -107,   10,  -32,   10,  -72,   10,  -72,   10,  -32,   10,  -72,   10,
   -127,   10,  -32,   10,  -72,   10,  -78,   10,  -32,   10,  -72,   10,
    -93,   10,  -32,   10,  -72,   10, -109,   10,  -32,   10,  -71,   10,
   -116,   10, -128, -127, -126,   10,  -32,   10,  -72,   10,  -95,  -85,
     10,  -32,   10,  -72,   10,  -73,   10,  -32,   10,  -71,   10, -120,
     10,  -32,   10,  -72,   10,  -83,   10,  -32,   10,  -72,   10, -107,
   -103,  -91,   10,  -32,   10,  -71,   10, -120,   10,  -32,   10,  -72,
     10,  -89,   10,  -32,   10,  -72,   10, -124,   10,  -32,   10,  -72,
     10,  -76,   10,  -32,   10,  -72,   10, -108,   10,  -32,   10,  -72,
     10,  -80,   10,  -32,   10,  -72,   10, -124,   10,  -32,   10,  -72,
     10,  -93,   10,  -32,   10,  -72,   10, -121,   10,  -32,   10,  -72,
     10,  -86,  -85,   10,  -32,   10,  -72,   10,  -93,   10,  -32,   10,
    -71,   10, -119,   10,  -32,   10,  -72,   10,  -78,   10,  -32,   10,
    -72,   10, -121,   10,  -32,   10,  -72,   10, -126,   10,  -32,   10,
    -72,   10,  -83,   10,  -32,   10,  -72,   10, -121,   10,  -32,   10,
    -72,   10,  -91,   10,  -32,   10,  -72,   10,  -79,   10,  -32,   10,
    -72,   10, -127,   10,   10,   95,   10,   70,   10,   69,   10,   65,
     10,   84,   10,   85,   10,   82,   10,   69,   10,   95,   10,   69,
     10,   78,   10,   68,   10,   95,   10,   37,  -32,  -72, -107, -103,
    -91,  -32,  -71, -120,  -32,  -72,  -89,  -32,  -72, -124,  -32,  -72,
    -76,  -32,  -72, -108,   58,   10,   10,  -32,   10,   32,   35,   37,
     42,   64,    9,   13,  -72,  -71,   10, -127, -124, -108,  -86,   10,
    -32,   10,  -72,   10,  -77,   10,  -32,   10,  -72,   10,  -85,   10,
    -32,   10,  -72,   10, -103,   10,  -32,   10,  -72,   10, -108,   10,
    -32,   10,  -71,   10, -125,   10,  -32,   10,  -72,   10,  -85,   10,
    -32,   10,  -71,   10, -119,   10,   10,   32,  -32,   10,  -72,   10,
    -89,   10,  -32,   10,  -72,   10,  -78,   10,  -32,   10,  -72,   10,
    -95,   10,  -32,   10,  -72,   10, -107,  -86,   10,  -32,   10,  -71,
     10, -119,   10,  -32,   10,  -72,   10,  -83,   10,  -32,   10,  -72,
     10, -121,   10,  -32,   10,  -72,   10, -127,   10,  -32,   10,  -72,
     10,  -78,   10,  -32,   10,  -72,   10,  -93,   10,  -32,   10,  -72,
     10, -105,   10,  -32,   10,  -72,   10,  -78,   10,  -32,   10,  -72,
     10, -121,   10,  -32,   10,  -72,   10, -104,   10,  -32,   10,  -72,
     10,  -72,   10,  -32,   10,  -72,   10,  -93,   10,  -32,   10,  -72,
     10, -127,   10,  -32,   10,  -72,   10,  -76,   10,  -32,   10,  -72,
     10, -120,   10,   10,   58,  -32,   10,  -72,   10,  -78,   10,  -32,
     10,  -72,   10,  -95,   10,  -32,   10,  -72,   10,  -78,   10,  -32,
     10,  -72,   10,  -93,   10,  -32,   10,  -72,   10, -106,   10,  -32,
     10,  -72,   10,  -79,   10,  -32,   10,  -72,   10, -121,   10,  -32,
     10,  -72,   10, -103,   10,  -32,   10,  -72,   10,  -79,   10,  -32,
     10,  -71,   10, -119,   10,  -32,   10,  -72,   10, -103,   10,  -32,
     10,  -72,   10,  -93,   10,  -32,   10,  -72,   10,  -72,   10,  -32,
     10,  -72,   10, -101,   10,  -32,   10,  -71,   10, -128,   10,  -32,
     10,  -72,   10,  -85,   10,  -32,   10,  -72,   10, -107,   10,  -32,
     10,  -72,   10,  -72,   10,  -32,   10,  -72,   10, -127,   10,  -32,
     10,  -72,   10,  -78,   10,  -32,   10,  -72,   10,  -93,   10,  -32,
     10,  -72,   10, -109,   10,  -32,   10,  -71,   10, -116,   10, -128,
   -127, -126,   10,  -32,   10,  -72,   10,  -95,  -85,   10,  -32,   10,
    -72,   10,  -73,   10,  -32,   10,  -71,   10, -120,   10,  -32,   10,
    -72,   10,  -83,   10,  -32,   10,  -72,   10, -107,  -91,   10,  -32,
     10,  -71,   10, -120,   10,  -32,   10,  -72,   10,  -80,   10,  -32,
     10,  -72,   10, -124,   10,  -32,   10,  -72,   10,  -93,   10,  -32,
     10,  -72,   10, -121,   10,  -32,   10,  -72,   10,  -86,  -85,   10,
    -32,   10,  -72,   10,  -93,   10,  -32,   10,  -71,   10, -119,   10,
    -32,   10,  -72,   10,  -78,   10,  -32,   10,  -72,   10, -121,   10,
    -32,   10,  -72,   10, -126,   10,  -32,   10,  -72,   10,  -83,   10,
    -32,   10,  -72,   10, -121,   10,  -32,   10,  -72,   10,  -91,   10,
    -32,   10,  -72,   10,  -79,   10,  -32,   10,  -72,   10, -127,   10,
     10,   95,   10,   70,   10,   69,   10,   65,   10,   84,   10,   85,
     10,   82,   10,   69,   10,   95,   10,   69,   10,   78,   10,   68,
     10,   95,   10,   37,  -32,  -72,  -80,  -32,  -72, -124,  -32,  -72,
    -93,  -32,  -72, -121,  -32,  -72,  -86,  -85,  -32,  -72,  -93,  -32,
    -71, -119,  -32,  -72,  -78,  -32,  -72, -121,  -32,  -72, -126,  -32,
    -72,  -83,  -32,  -72, -121,  -32,  -72,  -91,  -32,  -72,  -79,  -32,
    -72, -127,  -69,  -65,    0
  };
}

private static final byte _lexer_trans_keys[] = init__lexer_trans_keys_0();


private static byte[] init__lexer_single_lengths_0()
{
  return new byte [] {
      0,   10,    2,    5,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    2,    2,    9,    1,    1,    2,    2,    3,    3,    3,
      3,    2,    2,    2,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    1,    1,    1,    1,    3,    5,    3,    2,    4,
      3,    2,    4,    9,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    2,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    1,    6,    3,    4,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    3,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    9,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    3,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      4,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    3,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    1,    1,    1,    1,    2,    1,    1,    1,    1,
      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    1,    1,    1,    1,    1,    1,    5,    3,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    3,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    1,
      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    1,    1,    1,    1,    1,    1,    7,    3,    4,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    3,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    4,    2,    2,    3,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    3,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    3,
      1,    1,    2,    1,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
      7,    3,    5,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      3,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    4,    2,    2,    3,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    4,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    3,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    1,    1,    3,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    7,
      3,    5,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    3,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    4,    2,    2,    3,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    3,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    3,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
      2,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    2,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
      1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
      0
  };
}

private static final byte _lexer_single_lengths[] = init__lexer_single_lengths_0();


private static byte[] init__lexer_range_lengths_0()
{
  return new byte [] {
      0,    1,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    1,    0,    0,    0,    0,    1,    1,    1,
      1,    1,    1,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    1,    1,    1,    1,    1,
      0,    0,    1,    1,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    1,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    1,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    1,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    1,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      1,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    1,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0
  };
}

private static final byte _lexer_range_lengths[] = init__lexer_range_lengths_0();


private static short[] init__lexer_index_offsets_0()
{
  return new short [] {
      0,    0,   12,   15,   21,   23,   25,   27,   29,   31,   33,   35,
     37,   39,   41,   43,   45,   47,   49,   51,   53,   55,   57,   59,
     61,   63,   65,   68,   71,   82,   84,   86,   89,   92,   97102,
    107112116120123125127129131133135137,
    139141143145147149151153158165170174,
    180184187193204206208210212214216218,
    220222224226229231233235237239241243,
    245247249251253255257259261263265267,
    269271273275277279281283285287289291,
    293295297299301303305307309311313315,
    317319321323325333337342345348351354,
    357360363366369372375379382385388391,
    394397400403406409412415418421424427,
    430433436439442445448451454457460463,
    466469472475478481484487490493496499,
    502505508511514517528531534537540543,
    546549552555558561564567570573576579,
    582585588591594597600603606609612615,
    618621625628631634637640643646649652,
    655658661664667670673676679682685688,
    691694697700703706709712715718721724,
    727730733736739742745748751754757760,
    763766769772775778781784787790793796,
    799804807810813816819822825828831834,
    837840843846849852855858861864867870,
    873876879882886889892895898901904907,
    910913916919922925928931934937940943,
    946949952955958961964967970973976979,
    982985988991994997, 1000, 1003, 1006, 1009, 1012, 1015,
   1018, 1020, 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040,
   1042, 1044, 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1064,
   1066, 1068, 1070, 1072, 1074, 1076, 1078, 1080, 1083, 1085, 1087, 1089,
   1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 1107, 1109, 1111, 1113,
   1115, 1117, 1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 1140, 1144,
   1147, 1150, 1153, 1156, 1159, 1162, 1165, 1168, 1171, 1174, 1177, 1180,
   1184, 1187, 1190, 1193, 1196, 1199, 1202, 1205, 1208, 1211, 1214, 1217,
   1220, 1223, 1226, 1229, 1232, 1235, 1238, 1241, 1244, 1247, 1250, 1253,
   1256, 1259, 1262, 1265, 1268, 1271, 1274, 1277, 1280, 1283, 1286, 1289,
   1292, 1295, 1298, 1301, 1304, 1307, 1310, 1313, 1316, 1319, 1322, 1325,
   1328, 1331, 1334, 1337, 1340, 1343, 1346, 1349, 1352, 1355, 1358, 1361,
   1364, 1367, 1370, 1373, 1376, 1379, 1382, 1385, 1388, 1391, 1394, 1397,
   1400, 1403, 1406, 1409, 1412, 1415, 1418, 1421, 1424, 1427, 1430, 1433,
   1435, 1437, 1439, 1441, 1443, 1445, 1447, 1449, 1451, 1453, 1455, 1457,
   1459, 1461, 1463, 1465, 1467, 1469, 1471, 1473, 1475, 1477, 1479, 1481,
   1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1499, 1501, 1503, 1505,
   1507, 1509, 1511, 1513, 1515, 1517, 1519, 1521, 1523, 1525, 1527, 1529,
   1531, 1533, 1535, 1537, 1539, 1541, 1543, 1545, 1547, 1549, 1551, 1553,
   1555, 1557, 1559, 1561, 1563, 1565, 1567, 1569, 1571, 1573, 1575, 1577,
   1579, 1581, 1583, 1585, 1587, 1589, 1591, 1593, 1595, 1597, 1606, 1610,
   1615, 1618, 1621, 1624, 1627, 1630, 1633, 1636, 1639, 1642, 1645, 1648,
   1651, 1654, 1657, 1660, 1663, 1666, 1669, 1672, 1675, 1678, 1681, 1684,
   1687, 1690, 1693, 1696, 1699, 1702, 1705, 1708, 1711, 1714, 1718, 1721,
   1724, 1727, 1730, 1733, 1736, 1739, 1742, 1745, 1748, 1751, 1754, 1757,
   1760, 1763, 1766, 1769, 1772, 1775, 1778, 1781, 1784, 1787, 1790, 1793,
   1796, 1799, 1802, 1805, 1808, 1811, 1814, 1817, 1820, 1823, 1826, 1829,
   1832, 1835, 1838, 1841, 1844, 1847, 1850, 1853, 1856, 1859, 1862, 1865,
   1868, 1871, 1874, 1877, 1880, 1883, 1886, 1889, 1892, 1895, 1898, 1901,
   1904, 1907, 1910, 1913, 1916, 1919, 1922, 1925, 1928, 1931, 1934, 1937,
   1940, 1943, 1946, 1949, 1952, 1955, 1960, 1963, 1966, 1970, 1973, 1976,
   1979, 1982, 1985, 1988, 1991, 1994, 1997, 2000, 2003, 2006, 2009, 2012,
   2015, 2018, 2021, 2024, 2027, 2030, 2033, 2036, 2039, 2042, 2045, 2048,
   2051, 2054, 2057, 2060, 2063, 2066, 2070, 2073, 2076, 2079, 2082, 2085,
   2088, 2091, 2094, 2097, 2100, 2103, 2106, 2109, 2112, 2115, 2118, 2121,
   2124, 2127, 2130, 2133, 2136, 2139, 2142, 2145, 2148, 2151, 2154, 2157,
   2160, 2163, 2166, 2169, 2172, 2175, 2178, 2181, 2184, 2187, 2190, 2193,
   2197, 2199, 2201, 2204, 2206, 2208, 2210, 2212, 2214, 2216, 2218, 2220,
   2222, 2224, 2226, 2228, 2230, 2232, 2234, 2236, 2238, 2240, 2242, 2244,
   2246, 2248, 2250, 2252, 2254, 2256, 2258, 2260, 2262, 2264, 2266, 2268,
   2270, 2279, 2283, 2289, 2292, 2295, 2298, 2301, 2304, 2307, 2310, 2313,
   2316, 2319, 2322, 2325, 2328, 2331, 2334, 2337, 2340, 2343, 2346, 2349,
   2352, 2355, 2358, 2361, 2364, 2367, 2370, 2373, 2376, 2379, 2382, 2385,
   2388, 2392, 2395, 2398, 2401, 2404, 2407, 2410, 2413, 2416, 2419, 2422,
   2425, 2428, 2431, 2434, 2437, 2440, 2443, 2446, 2449, 2452, 2455, 2458,
   2461, 2464, 2467, 2470, 2473, 2476, 2479, 2482, 2485, 2488, 2491, 2494,
   2497, 2500, 2503, 2506, 2509, 2512, 2515, 2518, 2521, 2524, 2527, 2530,
   2533, 2536, 2539, 2542, 2545, 2548, 2551, 2554, 2557, 2560, 2563, 2566,
   2569, 2572, 2575, 2578, 2581, 2584, 2587, 2590, 2593, 2596, 2599, 2602,
   2605, 2608, 2611, 2614, 2617, 2620, 2623, 2626, 2629, 2632, 2635, 2638,
   2641, 2644, 2647, 2650, 2653, 2656, 2659, 2662, 2665, 2668, 2671, 2674,
   2677, 2680, 2683, 2686, 2689, 2692, 2695, 2698, 2701, 2704, 2707, 2710,
   2713, 2716, 2719, 2722, 2725, 2728, 2731, 2734, 2737, 2742, 2745, 2748,
   2752, 2755, 2758, 2761, 2764, 2767, 2770, 2773, 2776, 2779, 2782, 2785,
   2790, 2793, 2796, 2799, 2802, 2805, 2808, 2811, 2814, 2817, 2820, 2823,
   2826, 2829, 2832, 2835, 2838, 2841, 2844, 2847, 2850, 2853, 2856, 2859,
   2862, 2865, 2868, 2871, 2874, 2877, 2881, 2884, 2887, 2890, 2893, 2896,
   2899, 2902, 2905, 2908, 2911, 2914, 2917, 2920, 2923, 2926, 2929, 2932,
   2935, 2938, 2941, 2944, 2947, 2950, 2953, 2956, 2959, 2962, 2965, 2968,
   2971, 2974, 2977, 2980, 2983, 2986, 2989, 2992, 2995, 2998, 3001, 3004,
   3007, 3010, 3013, 3015, 3017, 3021, 3023, 3025, 3027, 3029, 3031, 3033,
   3035, 3037, 3039, 3041, 3043, 3045, 3047, 3049, 3051, 3053, 3055, 3057,
   3066, 3070, 3076, 3079, 3082, 3085, 3088, 3091, 3094, 3097, 3100, 3103,
   3106, 3109, 3112, 3115, 3118, 3121, 3124, 3127, 3130, 3133, 3136, 3139,
   3142, 3145, 3148, 3151, 3154, 3157, 3160, 3163, 3166, 3169, 3172, 3175,
   3179, 3182, 3185, 3188, 3191, 3194, 3197, 3200, 3203, 3206, 3209, 3212,
   3215, 3218, 3221, 3224, 3227, 3230, 3233, 3236, 3239, 3242, 3245, 3248,
   3251, 3254, 3257, 3260, 3263, 3266, 3269, 3272, 3275, 3278, 3281, 3284,
   3287, 3290, 3293, 3296, 3299, 3302, 3305, 3308, 3311, 3314, 3317, 3320,
   3323, 3326, 3329, 3332, 3335, 3338, 3341, 3344, 3347, 3350, 3353, 3356,
   3359, 3362, 3365, 3368, 3371, 3374, 3377, 3380, 3383, 3386, 3389, 3392,
   3395, 3398, 3401, 3404, 3407, 3410, 3413, 3416, 3419, 3422, 3425, 3428,
   3431, 3434, 3437, 3440, 3443, 3446, 3449, 3452, 3455, 3458, 3461, 3464,
   3467, 3470, 3473, 3476, 3479, 3482, 3485, 3488, 3491, 3494, 3497, 3500,
   3503, 3506, 3509, 3512, 3515, 3518, 3521, 3524, 3529, 3532, 3535, 3539,
   3542, 3545, 3548, 3551, 3554, 3557, 3560, 3563, 3566, 3569, 3572, 3576,
   3579, 3582, 3585, 3588, 3591, 3594, 3597, 3600, 3603, 3606, 3609, 3612,
   3615, 3618, 3621, 3624, 3627, 3631, 3634, 3637, 3640, 3643, 3646, 3649,
   3652, 3655, 3658, 3661, 3664, 3667, 3670, 3673, 3676, 3679, 3682, 3685,
   3688, 3691, 3694, 3697, 3700, 3703, 3706, 3709, 3712, 3715, 3718, 3721,
   3724, 3727, 3730, 3733, 3736, 3739, 3742, 3745, 3748, 3751, 3754, 3757,
   3760, 3763, 3765, 3767, 3769, 3771, 3773, 3775, 3777, 3779, 3781, 3783,
   3785, 3787, 3789, 3791, 3794, 3796, 3798, 3800, 3802, 3804, 3806, 3808,
   3810, 3812, 3814, 3816, 3818, 3820, 3822, 3824, 3826, 3828, 3830, 3832,
   3834, 3836, 3838, 3840, 3842, 3844, 3846, 3848, 3850, 3852, 3854, 3856,
   3858
  };
}

private static final short _lexer_index_offsets[] = init__lexer_index_offsets_0();


private static short[] init__lexer_indicies_0()
{
  return new short [] {
      1,    2,    4,    3,    5,    6,    7,    8,    9,   10,    3,    0,
     11,   12,    0,   13,   14,   15,   16,   17,    0,   18,    0,   19,
      0,   20,    0,   21,    0,   22,    0,   23,    0,   24,    0,   25,
      0,   26,    0,   27,    0,   28,    0,   29,    0,   30,    0,   31,
      0,   32,    0,   33,    0,   34,    0,   35,    0,   36,    0,   37,
      0,   38,    0,   39,    0,   41,   42,   40,   44,   45,   43,    1,
      4,    3,    5,    6,    7,    8,    9,   10,    3,    0,   46,    0,
     47,    0,   49,   50,   48,   52,   53,   51,   56,   55,   57,   55,
     54,   60,   59,   61,   59,   58,   60,   59,   62,   59,   58,   60,
     59,   63,   59,   58,   65,   64,   64,    0,    4,   66,   66,    0,
     68,   69,   67,    4,    0,   70,    0,   71,    0,   72,    0,   73,
      0,   74,    0,   75,    0,   76,    0,   77,    0,   78,    0,   79,
      0,   80,    0,   81,    0,   82,    0,   83,    0,    0,    0,    0,
      0,   84,   85,   86,   85,   85,   88,   87,   84,    4,   89,    9,
     89,    0,   90,   91,   90,    0,   94,   93,   95,   96,   93,   92,
      0,   98,   99,   97,    0,   98,   97,   94100,   98,   99100,
     97101,   94102103104105106107108102,    0,
    109,    0110,    0111,    0112,    0113,    0114,    0,
    115,    0116,    0117,    0118,    0119,    0120121,
      0122,    0123,    0124,    0125,    0126,    0127,
      0128,    0129,    0130,    0131,    0132,    0133,
      0134,    0135,    0136,    0137,    0138,    0139,
      0140,    0141,    0142,    0143,    0144,    0145,
      0146,    0147,    0148,    0149,    0150,    0151,
      0152,    0153,    0154,    0155,    0156,    0157,
      0158,    0159,    0160,    0161,    0162,    0163,
      0164,    0165,    0166,    0167,    0169168171,
    170172171173174175174173170176177171,
    170178179180171170181171170182171170,
    183171170184171170185171170186171170,
    187171170188171170189171170190171170,
    191171170192193171170194171170195171,
    170196171170197171170198171170199171,
    170200171170201171170202171170203171,
    170204171170205171170206171170207171,
    170208171170209171170210171170211171,
    170212171170213171170214171170215171,
    170216171170217171170218171170219171,
    170220171170221171170222171170223171,
    170224171170225171170226171170227171,
    170228171170229171170230171170231171,
    170232171170233171170234171170235171,
    170236171170237171170238171170171239,
    170240242241243244245246247248241,    0,
    249171170250171170251171170252171170,
    253171170254171170255171170256171170,
    257171170258171170259171170260171170,
    261171170262171170238171170263171170,
    264171170265171170266171170267171170,
    268171170269171170270171170271171170,
    272171170273171170274171170275171170,
    276171170277171170278171170279280171,
    170281171170282171170283171170284171,
    170285171170286171170287171170288171,
    170289171170290171170291171170292171,
    170293171170294171170295171170296171,
    170297171170298171170299171170300171,
    170301171170238171170302171170303171,
    170304171170305171170306171170307171,
    170308171170309171170310171170311171,
    170312171170313171170314171170315171,
    170316171170317171170318171170319171,
    170320171170321171170322171170323171,
    170324171170325171170238171170326171,
    170327171170328171170329171170330171,
    170331171170332171170333171170334171,
    170335171170280171170302336337171170,
    338171170339171170340171170341171170,
    342171170343171170344171170345171170,
    346171170347171170348171170349171170,
    350171170351171170238171170352171170,
    353171170354171170355171170356171170,
    357171170358171170359171170360171170,
    361171170362171170363364171170365171,
    170366171170367171170368171170369171,
    170370171170371171170372171170373171,
    170374171170375171170376171170377171,
    170378171170379171170380171170381171,
    170382171170383171170384171170334171,
    170385171170386171170387171170388171,
    170389171170390171170391171170392171,
    170238171170171393170171394170171395,
    170171396170171397170171398170171399,
    170171400170171401170171402170171403,
    170171404170171405170171406170407,    0,
    408,    0409,    0410,    0411,    0412,    0413,    0,
    414,    0415,    0416,    0417,    0418,    0419,    0,
    420,    0166,    0421,    0422,    0423,    0424,    0,
    425,    0426,    0427,    0428,    0429,    0430,    0,
    431,    0432,    0433,    0434,    0435,    0436,    0,
    437438,    0439,    0440,    0441,    0442,    0443,
      0444,    0445,    0446,    0447,    0448,    0449,
      0450,    0451,    0452,    0453,    0454,    0455,
      0456,    0457,    0458,    0459,    0460,    0461,
      0463462465464466465467468468467464,
    469470465464471465464472465464473465,
    464474465464475465464476465464477465,
    464478465464479465464480465464481465,
    464482465464483484465464485465464486,
    465464487465464488465464489465464490,
    465464491465464492465464493465464494,
    465464495465464496465464497465464498,
    465464499465464500465464501465464502,
    465464503465464504465464505465464506,
    465464507465464508465464509465464510,
    465464511465464512465464513465464514,
    465464515465464516465464517465464518,
    465464519465464520465464521465464522,
    465464523465464524465464525465464526,
    465464527465464528465464529465464465,
    530464531465464532465464533465464534,
    465464535465464536465464537465464538,
    465464539465464540465464541465464542,
    465464543465464544465464529465464545,
    465464546465464547465464548465464549,
    465464550465464551465464552465464553,
    465464554465464555465464556465464557,
    465464558465464559465464560465464561,
    465464562465464563465464564465464565,
    465464529465464566,    0567,    0568,    0569,
      0570,    0571,    0572,    0573,    0574,    0575,
      0576,    0577,    0578,    0579,    0580,    0581,
      0582,    0583,    0584,    0585,    0586,    0587,
      0588,    0589,    0460,    0590,    0591,    0592,
      0593,    0594,    0595,    0596,    0597,    0598,
      0599,    0600,    0601,    0602,    0603,    0604,
      0605,    0606,    0,   38,    0607,    0608,    0609,
      0610,    0611,    0612,    0613,    0614,    0615,
      0616,    0617,    0618,    0619,    0620,    0621,
      0622,    0623,    0624,    0625,    0626,    0627,
      0628,    0629,    0630,    0631,    0632,    0633,
      0634,    0635,    0636,    0637,    0638,    0639,
      0640,    0641,    0642,    0643,    0645644647,
    646648647649650651652650649646653654,
    647646655656657647646658647646659647,
    646660647646661647646662647646663647,
    646664647646665647646666647646667647,
    646668647646669647646670647646671647,
    646672647646673647646674647646675647,
    646676647646677647646678647646647679,
    646680647646681647646682647646683647,
    646684647646685647646686647646687647,
    646688647646689647646690647646691692,
    647646693647646694647646695647646696,
    647646697647646698647646699647646700,
    647646701647646702647646703647646704,
    647646705647646706647646707647646708,
    647646709647646710647646711647646712,
    647646713647646714647646715647646716,
    647646717647646718647646719647646720,
    647646721647646722647646723647646724,
    647646725647646726647646727647646728,
    647646729647646730647646731647646732,
    647646733647646734647646735647646736,
    647646737647646647679646738647646739,
    647646740647646741647646742647646743,
    647646744647646745647646746647646747,
    647646748647646749647646750647646751,
    647646737647646752647646753647646754,
    647646755647646756647646757647646758,
    647646759647646760647646761647646762,
    647646763647646764647646765647646766,
    647646767647646768647646678647646769,
    770771647646772647646773647646774775,
    647646776647646777647646778647646779,
    647646780647646781647646782647646783,
    647646678647646784647646785647646786,
    647646787647646788647646789647646790,
    647646791647646792647646793647646794,
    647646795647646796647646797647646798,
    647646799647646800647646801647646802,
    647646803647646737647646804647646805,
    647646806807647646808647646809647646,
    678647646810647646811647646678647646,
    812647646813647646814647646815647646,
    816647646817647646818647646819647646,
    820647646821647646822647646823647646,
    824647646825647646826647646827647646,
    828647646829647646830647646831647646,
    737647646647832646647833646647834646,
    647835646647836646647837646647838646,
    647839646647840646647841646647842646,
    647843646647844646647845646846847848,
      0849,    0850,    0851852,    0853,    0854,    0,
    855,    0856,    0857,    0858,    0859,    0860,    0,
     38,    0861,    0862,    0863,    0864,    0865,    0,
    866,    0867,    0868,    0869,    0870,    0871,    0,
    872,    0873,    0874,    0875,    0876,    0877,    0,
    878,    0879,    0880,    0881,    0882,    0884883,
    886885887886888889890891889888885892,
    893886885894895896897886885898886885,
    899886885900886885901886885902886885,
    903886885904886885905886885906886885,
    907886885908886885909886885910886885,
    911886885912886885913886885914886885,
    915886885916886885917886885918886885,
    886919885920886885921886885922886885,
    923886885924886885925886885926886885,
    927886885928886885929886885930886885,
    931932886885933886885934886885935886,
    885936886885937886885938886885939886,
    885940886885941886885942886885943886,
    885944886885945886885946886885947886,
    885948886885949886885950886885951886,
    885952886885953886885954886885955886,
    885956886885957886885958886885959886,
    885960886885961886885962886885963886,
    885964886885965886885966886885967886,
    885968886885969886885970886885971886,
    885972886885973886885974886885975886,
    885976886885977886885886919885978886,
    885979886885980886885981886885982886,
    885983886885984886885985886885986886,
    885987886885988886885989886885990886,
    885991886885977886885992886885993886,
    885994886885995886885996886885997886,
    885998886885999886885, 1000886885, 1001886,
    885, 1002886885, 1003886885, 1004886885, 1005886,
    885, 1006886885, 1007886885, 1008886885918886,
    885, 1009886885, 1010886885, 1011886885, 1012886,
    885, 1013886885, 1014886885, 1015886885, 1016886,
    885, 1017886885, 1018886885, 1019886885, 1020886,
    885, 1021886885, 1022886885, 1023886885, 1024886,
    885, 1025886885, 1026886885, 1027886885, 1028886,
    885, 1029886885, 1030886885, 1031886885, 1032886,
    885, 1033886885, 1034886885, 1035886885, 1036886,
    885, 1037886885, 1038886885, 1039886885, 1040886,
    885, 1041886885, 1042886885, 1043886885977886,
    885, 1044, 1045, 1046886885, 1047886885, 1048886885,
   1049, 1023886885, 1050886885, 1051886885, 1052886,
    885, 1053886885, 1054886885, 1055886885, 1056886,
    885, 1057886885918886885, 1058886885, 1059886,
    885, 1060, 1061, 1062886885, 1063886885, 1064886885,
    918886885, 1065886885, 1066886885, 1067886885,
   1068886885, 1069886885, 1070886885, 1071886885,
   1072886885, 1073886885, 1074886885, 1075886885,
    977886885, 1076886885, 1077886885918886885,
   1078886885, 1079886885, 1080886885, 1081886885,
   1082886885, 1083886885, 1084886885, 1085886885,
   1086886885, 1087886885, 1088886885, 1089, 1090886,
    885, 1091886885, 1092886885, 1093886885, 1094886,
    885, 1095886885, 1096886885, 1097886885, 1098886,
    885, 1099886885, 1100886885, 1101886885, 1102886,
    885, 1103886885, 1104886885, 1105886885, 1106886,
    885, 1107886885, 1108886885, 1109886885, 1110886,
    885, 1017886885, 1111886885, 1112886885, 1113886,
    885, 1114886885, 1115886885, 1116886885, 1117886,
    885, 1118886885977886885886, 1119885886, 1120,
    885886, 1121885886, 1122885886, 1123885886, 1124,
    885886, 1125885886, 1126885886, 1127885886, 1128,
    885886, 1129885886, 1130885886, 1131885886, 1132,
    885, 1133,    0, 1134,    0, 1135, 1136, 1137,    0, 1138,    0, 1139,
      0,   38,    0, 1140,    0, 1141,    0, 1142,    0, 1143,    0, 1144,
      0, 1145,    0, 1146,    0, 1147,    0, 1148,    0, 1149,    0, 1150,
      0, 1151,    0, 1152,    0, 1154, 1153, 1156, 1155, 1157, 1156, 1158,
   1159, 1160, 1161, 1159, 1158, 1155, 1162, 1163, 1156, 1155, 1164, 1165,
   1166, 1167, 1156, 1155, 1168, 1156, 1155, 1169, 1156, 1155, 1170, 1156,
   1155, 1171, 1156, 1155, 1172, 1156, 1155, 1173, 1156, 1155, 1174, 1156,
   1155, 1175, 1156, 1155, 1176, 1156, 1155, 1177, 1156, 1155, 1178, 1156,
   1155, 1179, 1156, 1155, 1180, 1156, 1155, 1181, 1156, 1155, 1182, 1156,
   1155, 1183, 1156, 1155, 1184, 1156, 1155, 1185, 1156, 1155, 1186, 1156,
   1155, 1187, 1156, 1155, 1188, 1156, 1155, 1156, 1189, 1155, 1190, 1156,
   1155, 1191, 1156, 1155, 1192, 1156, 1155, 1193, 1156, 1155, 1194, 1156,
   1155, 1195, 1156, 1155, 1196, 1156, 1155, 1197, 1156, 1155, 1198, 1156,
   1155, 1199, 1156, 1155, 1200, 1156, 1155, 1201, 1202, 1156, 1155, 1203,
   1156, 1155, 1204, 1156, 1155, 1205, 1156, 1155, 1206, 1156, 1155, 1207,
   1156, 1155, 1208, 1156, 1155, 1209, 1156, 1155, 1210, 1156, 1155, 1211,
   1156, 1155, 1212, 1156, 1155, 1213, 1156, 1155, 1214, 1156, 1155, 1215,
   1156, 1155, 1216, 1156, 1155, 1217, 1156, 1155, 1218, 1156, 1155, 1219,
   1156, 1155, 1220, 1156, 1155, 1221, 1156, 1155, 1222, 1156, 1155, 1223,
   1156, 1155, 1224, 1156, 1155, 1225, 1156, 1155, 1226, 1156, 1155, 1227,
   1156, 1155, 1228, 1156, 1155, 1229, 1156, 1155, 1230, 1156, 1155, 1231,
   1156, 1155, 1232, 1156, 1155, 1233, 1156, 1155, 1234, 1156, 1155, 1235,
   1156, 1155, 1236, 1156, 1155, 1237, 1156, 1155, 1238, 1156, 1155, 1239,
   1156, 1155, 1240, 1156, 1155, 1241, 1156, 1155, 1242, 1156, 1155, 1243,
   1156, 1155, 1244, 1156, 1155, 1245, 1156, 1155, 1246, 1156, 1155, 1247,
   1156, 1155, 1156, 1189, 1155, 1248, 1156, 1155, 1249, 1156, 1155, 1250,
   1156, 1155, 1251, 1156, 1155, 1252, 1156, 1155, 1253, 1156, 1155, 1254,
   1156, 1155, 1255, 1156, 1155, 1256, 1156, 1155, 1257, 1156, 1155, 1258,
   1156, 1155, 1259, 1156, 1155, 1260, 1156, 1155, 1261, 1156, 1155, 1247,
   1156, 1155, 1262, 1156, 1155, 1263, 1156, 1155, 1264, 1156, 1155, 1265,
   1156, 1155, 1266, 1156, 1155, 1267, 1156, 1155, 1268, 1156, 1155, 1269,
   1156, 1155, 1270, 1156, 1155, 1271, 1156, 1155, 1272, 1156, 1155, 1273,
   1156, 1155, 1274, 1156, 1155, 1275, 1156, 1155, 1276, 1156, 1155, 1277,
   1156, 1155, 1278, 1156, 1155, 1188, 1156, 1155, 1279, 1156, 1155, 1280,
   1156, 1155, 1281, 1156, 1155, 1282, 1156, 1155, 1283, 1156, 1155, 1284,
   1156, 1155, 1285, 1156, 1155, 1286, 1156, 1155, 1287, 1156, 1155, 1288,
   1156, 1155, 1289, 1156, 1155, 1290, 1156, 1155, 1291, 1156, 1155, 1292,
   1156, 1155, 1293, 1156, 1155, 1294, 1156, 1155, 1295, 1156, 1155, 1296,
   1156, 1155, 1297, 1156, 1155, 1298, 1156, 1155, 1299, 1156, 1155, 1300,
   1156, 1155, 1301, 1156, 1155, 1302, 1156, 1155, 1303, 1156, 1155, 1304,
   1156, 1155, 1305, 1156, 1155, 1306, 1156, 1155, 1307, 1156, 1155, 1308,
   1156, 1155, 1309, 1156, 1155, 1310, 1156, 1155, 1311, 1156, 1155, 1312,
   1156, 1155, 1313, 1156, 1155, 1247, 1156, 1155, 1314, 1315, 1316, 1156,
   1155, 1317, 1156, 1155, 1318, 1156, 1155, 1319, 1293, 1156, 1155, 1320,
   1156, 1155, 1321, 1156, 1155, 1322, 1156, 1155, 1323, 1156, 1155, 1324,
   1156, 1155, 1325, 1156, 1155, 1326, 1156, 1155, 1327, 1156, 1155, 1188,
   1156, 1155, 1328, 1156, 1155, 1329, 1156, 1155, 1330, 1331, 1156, 1155,
   1332, 1156, 1155, 1333, 1156, 1155, 1188, 1156, 1155, 1334, 1156, 1155,
   1335, 1156, 1155, 1188, 1156, 1155, 1336, 1156, 1155, 1337, 1156, 1155,
   1338, 1156, 1155, 1339, 1156, 1155, 1340, 1156, 1155, 1341, 1156, 1155,
   1342, 1156, 1155, 1343, 1156, 1155, 1344, 1156, 1155, 1345, 1156, 1155,
   1346, 1156, 1155, 1347, 1348, 1156, 1155, 1349, 1156, 1155, 1350, 1156,
   1155, 1351, 1156, 1155, 1352, 1156, 1155, 1353, 1156, 1155, 1354, 1156,
   1155, 1355, 1156, 1155, 1356, 1156, 1155, 1357, 1156, 1155, 1358, 1156,
   1155, 1359, 1156, 1155, 1360, 1156, 1155, 1361, 1156, 1155, 1362, 1156,
   1155, 1363, 1156, 1155, 1364, 1156, 1155, 1365, 1156, 1155, 1366, 1156,
   1155, 1367, 1156, 1155, 1368, 1156, 1155, 1287, 1156, 1155, 1369, 1156,
   1155, 1370, 1156, 1155, 1371, 1156, 1155, 1372, 1156, 1155, 1373, 1156,
   1155, 1374, 1156, 1155, 1375, 1156, 1155, 1376, 1156, 1155, 1247, 1156,
   1155, 1156, 1377, 1155, 1156, 1378, 1155, 1156, 1379, 1155, 1156, 1380,
   1155, 1156, 1381, 1155, 1156, 1382, 1155, 1156, 1383, 1155, 1156, 1384,
   1155, 1156, 1385, 1155, 1156, 1386, 1155, 1156, 1387, 1155, 1156, 1388,
   1155, 1156, 1389, 1155, 1156, 1390, 1155, 1391,    0, 1392,    0,   38,
      0, 1393,    0, 1394,    0, 1395,    0, 1396,    0, 1397,    0, 1398,
      0, 1399,    0, 1400,    0, 1401,    0, 1402,    0, 1403,    0, 1404,
   1405,    0, 1406,    0, 1407,    0, 1408,    0, 1409,    0, 1410,    0,
   1411,    0, 1412,    0, 1413,    0, 1414,    0, 1415,    0, 1416,    0,
   1417,    0, 1418,    0, 1419,    0, 1420,    0, 1421,    0, 1422,    0,
   1423,    0, 1424,    0, 1425,    0615,    0, 1426,    0, 1427,    0,
   1428,    0, 1429,    0, 1430,    0, 1431,    0, 1432,    0, 1433,    0,
    166,    0, 1434,    0,    3,    0, 1435,    0
  };
}

private static final short _lexer_indicies[] = init__lexer_indicies_0();


private static short[] init__lexer_trans_targs_0()
{
  return new short [] {
      0,    2, 1354,   28,   28,   29,   39,   41,   25,   55,   58,    3,
    779,    4,   64363528546,    5,    6,    7,    8,    9,   10,
     11,   12,   13,   14,   15,   16,   17,   18,   19,   20,   21,   22,
     23,   24,   25,   26,   27,   28,   40,   27,   28,   40,   30,   31,
     32,   33,   32,   32,   33,   32,   34,   34,   34,   35,   34,   34,
     34,   35,   36,   37,   38,   28,   38,   39,   28,   40,   42,   43,
     44,   45,   46,   47,   48,   49,   50,   51,   52,   53,   54, 1356,
     56,   57,   28,   56,   55,   57,   58,   59,   60,   62,   63,   61,
     59,   60,   61,   59,   62,    2,   63,   29,   39,   41,   25,   55,
     58,   65,   66,   67,   68,   69,   70,   71,   72,   73,   74,   75,
     76348,   77,   78,   79,   80,   81,   82,   83,   84,   85,   86,
     87,   88,   89,   90,   91,   92,   93,   94,   95,   96,   97,   98,
     99100101102103104105106107108109110,
    111112113114115116117118119120121122,
    123124123124125124,   28334126276127201,
    265128129130131132133134135136137138,
    139186140141142143144145146147148149,
    150151152153154155156157158159160161,
    162163164165166167168169170171172173,
    174175176177178179180181182183184185,
      2,   28,   28,   29,   39,   41,   25,   55,   58187188189,
    190191192193194195196197198199200202,
    203204205206207208209210211212213214,
    215216217218240219220221222223224225,
    226227228229230231232233234235236237,
    238239241242243244245246247248249250,
    251252253254255256257258259260261262,
    263264266267268269270271272273274275,
    277292278279280281282283284285286287,
    288289290291293294295296297298299300,
    301302303304325305306307308309310311,
    312313314315316317318319320321322323,
    324326327328329330331332333335336337,
    338339340341342343344345346347,   28349,
    350351352353354355356357358359360361,
    362364365366367368369370371372373374,
    375376377378379380503381382383384385,
    386387388389390391392393394395396397,
    398399400401402403404405404405406405,
     28407481408409410411412413414415416,
    417418419420466421422423424425426427,
    428429430431432433434435436437438439,
    440441442443444445446447448449450451,
    452453454455456457458459460461462463,
    464465185467468469470471472473474475,
    476477478479480482483484485486487488,
    489490491492493494495496497498499500,
    501502504505506507508509510511512513,
    514515516517518519520521522523524525,
    526527529530531532533534535536537538,
    539540541542543544545547548549550551,
    552553554555556557558559560561562563,
    564565566567568569570571572573574575,
    576577578579580581582583584585584585,
    586585,   28765609587701588610683589590,
    591592593594595596597598599600601602,
    603604605606607608609185611612613614,
    615616617618619620621622668623624625,
    626627628629630631632633634635636637,
    638639640641642643644645646647648649,
    650651652653654655656657658659660661,
    662663664665666667669670671672673674,
    675676677678679680681682684685686687,
    688689690691692693694695696697698699,
    700702735744703704705714706707708709,
    710711712713715716717718719720721722,
    723724725726727728729730731732733734,
    736737738741739740742743745746747748,
    749750751752753754755756757758759760,
    761762763764766767768769770771772773,
    774775776777778,   28780, 1058, 1312781782783,
    792784785786787788789790791793794795,
    796797798799800801802803804805806807,
    808809810811812813814815816815816817,
    816,   28, 1044840818968819841914932820821,
    822823824825826827828829830831832833,
    834835836837838839840185842843844845,
    846847848849850851852853899854855856,
    857858859860861862863864865866867868,
    869870871872873874875876877878879880,
    881882883884885886887888889890891892,
    893894895896897898900901902903904905,
    906907908909910911912913915916917918,
    919920921922923924925926927928929930,
    931933934935936937938939940941942943,
    944945946947948949950951952953954955,
    956957958959960961962963964965966967,
    969981, 1002970971972973974975976977978,
    979980982983984987999985986988989990,
    991992993994995996997998, 1000, 1001, 1003, 1004,
   1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1035, 1015,
   1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027,
   1028, 1029, 1030, 1031, 1032, 1033, 1034, 1036, 1037, 1038, 1039, 1040,
   1041, 1042, 1043, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053,
   1054, 1055, 1056, 1057,   28, 1059, 1060, 1061, 1064, 1309, 1062, 1063,
   1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076,
   1077, 1078, 1079, 1078, 1079, 1080, 1079,   28, 1295, 1103, 1081, 1231,
   1082, 1104, 1177, 1195, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090,
   1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102,
   1103185, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114,
   1115, 1116, 1162, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125,
   1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137,
   1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149,
   1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161,
   1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174,
   1175, 1176, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187,
   1188, 1189, 1190, 1191, 1192, 1193, 1194, 1196, 1197, 1198, 1199, 1200,
   1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212,
   1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224,
   1225, 1226, 1227, 1228, 1229, 1230, 1232, 1244, 1253, 1233, 1234, 1235,
   1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1245, 1246, 1247, 1250,
   1248, 1249, 1251, 1252, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261,
   1262, 1263, 1264, 1265, 1286, 1266, 1267, 1268, 1269, 1270, 1271, 1272,
   1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284,
   1285, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1296, 1297, 1298,
   1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308,   28, 1310,
   1311, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323,
   1324, 1345, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334,
   1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1346, 1347,
   1348, 1349, 1350, 1351, 1352, 1353, 1355,    0
  };
}

private static final short _lexer_trans_targs[] = init__lexer_trans_targs_0();


private static short[] init__lexer_trans_actions_0()
{
  return new short [] {
     43,   29,    0,    0,   54,    3,    1,    0,   29,    1,   35,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,   57149126,    0110,   23,    0,    0,
      7139,   48,    0102,    9,    5,   45134,   45,    0,   33,
    122,   33,   33,    0,   11106,    0,    0114,   25,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,   27118,   27,   51,    0,    0,    0,   37,   37,   54,   37,
     87,    0,    0,   39,    0,   96,    0,   93,   90,   41,   96,   90,
     99,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
     57144,    0,   54,   84,    0,   69,   33,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   13,
     63,   31130,   60,   57,   31,   63,   57,   66,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   13,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,   57144,    0,   54,   84,    0,
     81,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,   21,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,   57144,    0,   54,
     84,    0,   78,   33,   84,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,   19,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,   19,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,   57144,    0,   54,   84,
      0,   75,   33,   84,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,   17,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,   17,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,   57144,    0,   54,   84,    0,   72,   33,   84,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,   15,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   15,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
      0,    0,    0,    0,    0,    0,    0,    0
  };
}

private static final short _lexer_trans_actions[] = init__lexer_trans_actions_0();


private static short[] init__lexer_eof_actions_0()
{
  return new short [] {
      0,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
     43
  };
}

private static final short _lexer_eof_actions[] = init__lexer_eof_actions_0();


static final int lexer_start = 1;
static final int lexer_first_final = 1356;

static final int lexer_en_main = 1;


// line 159 "ragel/i18n/th.java.rl"

  public void scan(String source)  {
    String input = source + "\n%_FEATURE_END_%";
    byte[] data = null;
    try {
      data = input.getBytes("UTF-8");
    } catch(UnsupportedEncodingException e) {
      throw new RuntimeException(e);
    }
    int cs, p = 0, pe = data.length;
    int eof = pe;

    int lineNumber = 1;
    int lastNewline = 0;

    int contentStart = -1;
    int currentLine = -1;
    int docstringContentTypeStart = -1;
    int docstringContentTypeEnd = -1;
    int startCol = -1;
    int nextKeywordStart = -1;
    int keywordStart = -1;
    String keyword = null;
    List<String> currentRow = null;

   
// line 1506 "java/src/main/java/gherkin/lexer/Th.java"
  {
  cs = lexer_start;
  }

// line 185 "ragel/i18n/th.java.rl"
   
// line 1513 "java/src/main/java/gherkin/lexer/Th.java"
  {
  int _klen;
  int _trans = 0;
  int _acts;
  int _nacts;
  int _keys;
  int _goto_targ = 0;

  _goto: while (true) {
  switch ( _goto_targ ) {
  case 0:
  if ( p == pe ) {
    _goto_targ = 4;
    continue _goto;
  }
  if ( cs == 0 ) {
    _goto_targ = 5;
    continue _goto;
  }
case 1:
  _match: do {
  _keys = _lexer_key_offsets[cs];
  _trans = _lexer_index_offsets[cs];
  _klen = _lexer_single_lengths[cs];
  if ( _klen > 0 ) {
    int _lower = _keys;
    int _mid;
    int _upper = _keys + _klen - 1;
    while (true) {
      if ( _upper < _lower )
        break;

      _mid = _lower + ((_upper-_lower) >> 1);
      if ( data[p] < _lexer_trans_keys[_mid] )
        _upper = _mid - 1;
      else if ( data[p] > _lexer_trans_keys[_mid] )
        _lower = _mid + 1;
      else {
        _trans += (_mid - _keys);
        break _match;
      }
    }
    _keys += _klen;
    _trans += _klen;
  }

  _klen = _lexer_range_lengths[cs];
  if ( _klen > 0 ) {
    int _lower = _keys;
    int _mid;
    int _upper = _keys + (_klen<<1) - 2;
    while (true) {
      if ( _upper < _lower )
        break;

      _mid = _lower + (((_upper-_lower) >> 1) & ~1);
      if ( data[p] < _lexer_trans_keys[_mid] )
        _upper = _mid - 2;
      else if ( data[p] > _lexer_trans_keys[_mid+1] )
        _lower = _mid + 2;
      else {
        _trans += ((_mid - _keys)>>1);
        break _match;
      }
    }
    _trans += _klen;
  }
  } while (false);

  _trans = _lexer_indicies[_trans];
  cs = _lexer_trans_targs[_trans];

  if ( _lexer_trans_actions[_trans] != 0 ) {
    _acts = _lexer_trans_actions[_trans];
    _nacts = (int) _lexer_actions[_acts++];
    while ( _nacts-- > 0 )
  {
      switch ( _lexer_actions[_acts++] )
      {
  case 0:
// line 16 "ragel/i18n/th.java.rl"
  {
      contentStart = p;
      currentLine = lineNumber;
      if(keyword != null) {
        startCol = p - lastNewline - (keyword.length() + 1);
      }
    }
  break;
  case 1:
// line 24 "ragel/i18n/th.java.rl"
  {
      currentLine = lineNumber;
      startCol = p - lastNewline;
    }
  break;
  case 2:
// line 29 "ragel/i18n/th.java.rl"
  {
      contentStart = p;
    }
  break;
  case 3:
// line 33 "ragel/i18n/th.java.rl"
  {
      docstringContentTypeStart = p;
    }
  break;
  case 4:
// line 37 "ragel/i18n/th.java.rl"
  {
      docstringContentTypeEnd = p;
    }
  break;
  case 5:
// line 41 "ragel/i18n/th.java.rl"
  {
      String con = unindent(startCol, substring(data, contentStart, nextKeywordStart-1).replaceFirst("(\\r?\\n)?([\\t ])*\\Z", "").replace("\\\"\\\"\\\"", "\"\"\""));
      String conType = substring(data, docstringContentTypeStart, docstringContentTypeEnd).trim();
      listener.docString(conType, con, currentLine);
    }
  break;
  case 6:
// line 47 "ragel/i18n/th.java.rl"
  {
      String[] nameDescription = nameAndUnindentedDescription(startCol, keywordContent(data, p, eof, nextKeywordStart, contentStart));
      listener.feature(keyword, nameDescription[0], nameDescription[1], currentLine);
      if(nextKeywordStart != -1) p = nextKeywordStart - 1;
      nextKeywordStart = -1;
    }
  break;
  case 7:
// line 54 "ragel/i18n/th.java.rl"
  {
      String[] nameDescription = nameAndUnindentedDescription(startCol, keywordContent(data, p, eof, nextKeywordStart, contentStart));
      listener.background(keyword, nameDescription[0], nameDescription[1], currentLine);
      if(nextKeywordStart != -1) p = nextKeywordStart - 1;
      nextKeywordStart = -1;
    }
  break;
  case 8:
// line 61 "ragel/i18n/th.java.rl"
  {
      String[] nameDescription = nameAndUnindentedDescription(startCol, keywordContent(data, p, eof, nextKeywordStart, contentStart));
      listener.scenario(keyword, nameDescription[0], nameDescription[1], currentLine);
      if(nextKeywordStart != -1) p = nextKeywordStart - 1;
      nextKeywordStart = -1;
    }
  break;
  case 9:
// line 68 "ragel/i18n/th.java.rl"
  {
      String[] nameDescription = nameAndUnindentedDescription(startCol, keywordContent(data, p, eof, nextKeywordStart, contentStart));
      listener.scenarioOutline(keyword, nameDescription[0], nameDescription[1], currentLine);
      if(nextKeywordStart != -1) p = nextKeywordStart - 1;
      nextKeywordStart = -1;
    }
  break;
  case 10:
// line 75 "ragel/i18n/th.java.rl"
  {
      String[] nameDescription = nameAndUnindentedDescription(startCol, keywordContent(data, p, eof, nextKeywordStart, contentStart));
      listener.examples(keyword, nameDescription[0], nameDescription[1], currentLine);
      if(nextKeywordStart != -1) p = nextKeywordStart - 1;
      nextKeywordStart = -1;
    }
  break;
  case 11:
// line 82 "ragel/i18n/th.java.rl"
  {
      listener.step(keyword, substring(data, contentStart, p).trim(), currentLine);
    }
  break;
  case 12:
// line 86 "ragel/i18n/th.java.rl"
  {
      listener.comment(substring(data, contentStart, p).trim(), lineNumber);
      keywordStart = -1;
    }
  break;
  case 13:
// line 91 "ragel/i18n/th.java.rl"
  {
      listener.tag(substring(data, contentStart, p).trim(), currentLine);
      keywordStart = -1;
    }
  break;
  case 14:
// line 96 "ragel/i18n/th.java.rl"
  {
      lineNumber++;
    }
  break;
  case 15:
// line 100 "ragel/i18n/th.java.rl"
  {
      lastNewline = p + 1;
    }
  break;
  case 16:
// line 104 "ragel/i18n/th.java.rl"
  {
      if(keywordStart == -1) keywordStart = p;
    }
  break;
  case 17:
// line 108 "ragel/i18n/th.java.rl"
  {
      keyword = substring(data, keywordStart, p).replaceFirst(":$","");
      keywordStart = -1;
    }
  break;
  case 18:
// line 113 "ragel/i18n/th.java.rl"
  {
      nextKeywordStart = p;
    }
  break;
  case 19:
// line 117 "ragel/i18n/th.java.rl"
  {
      p = p - 1;
      currentRow = new ArrayList<String>();
      currentLine = lineNumber;
    }
  break;
  case 20:
// line 123 "ragel/i18n/th.java.rl"
  {
      contentStart = p;
    }
  break;
  case 21:
// line 127 "ragel/i18n/th.java.rl"
  {
      String con = substring(data, contentStart, p).trim();
      currentRow.add(con
        .replace("\\|", "|")
        .replace("\\n", "\n")
        .replace("\\\\", "\\")
      );
    }
  break;
  case 22:
// line 136 "ragel/i18n/th.java.rl"
  {
      listener.row(currentRow, currentLine);
    }
  break;
  case 23:
// line 140 "ragel/i18n/th.java.rl"
  {
      if(cs < lexer_first_final) {
        String content = currentLineContent(data, lastNewline);
        throw new LexingError("Lexing error on line " + lineNumber + ": '" + content + "'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.");
      } else {
        listener.eof();
      }
    }
  break;
// line 1774 "java/src/main/java/gherkin/lexer/Th.java"
      }
    }
  }

case 2:
  if ( cs == 0 ) {
    _goto_targ = 5;
    continue _goto;
  }
  if ( ++p != pe ) {
    _goto_targ = 1;
    continue _goto;
  }
case 4:
  if ( p == eof )
  {
  int __acts = _lexer_eof_actions[cs];
  int __nacts = (int) _lexer_actions[__acts++];
  while ( __nacts-- > 0 ) {
    switch ( _lexer_actions[__acts++] ) {
  case 23:
// line 140 "ragel/i18n/th.java.rl"
  {
      if(cs < lexer_first_final) {
        String content = currentLineContent(data, lastNewline);
        throw new LexingError("Lexing error on line " + lineNumber + ": '" + content + "'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.");
      } else {
        listener.eof();
      }
    }
  break;
// line 1806 "java/src/main/java/gherkin/lexer/Th.java"
    }
  }
  }

case 5:
  }
  break; }
  }

// line 186 "ragel/i18n/th.java.rl"
  }

  private String keywordContent(byte[] data, int p, int eof, int nextKeywordStart, int contentStart) {
    int endPoint = (nextKeywordStart == -1 || (p == eof)) ? p : nextKeywordStart;
    return substring(data, contentStart, endPoint);
  }

  private String[] nameAndUnindentedDescription(int startCol, String text) {
    String[] lines = text.split("\n");
    String name = lines.length > 0 ? lines[0].trim() : "";
    StringBuffer description = new StringBuffer();
    for(int i = 1; i < lines.length; i++) {
      description.append(lines[i]);
      description.append("\n");
    }
    return new String[]{name, unindent(startCol+2, description.toString()).replaceAll("\\s+$", "")};
  }

  private String unindent(int startCol, String text) {
    return Pattern.compile("^[\t ]{0," + startCol + "}", Pattern.MULTILINE).matcher(text).replaceAll("");
  }

  private String currentLineContent(byte[] data, int lastNewline) {
    return substring(data, lastNewline, data.length).trim();
  }

  private String substring(byte[] data, int start, int end) {
    try {
      return new String(data, start, end-start, "utf-8");
    } catch(java.io.UnsupportedEncodingException e) {
      throw new RuntimeException("Internal error", e);
    }
  }
}
TOP

Related Classes of gherkin.lexer.Th

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.