moment_parser.c

Go to the documentation of this file.
00001 #line 1 "moment_parser.rl"
00002 #include <stdio.h>
00003 #include <stdlib.h>
00004 #include <string.h>
00005 #include "time_utils.h"
00006 #include "moment_parser.h"
00007 
00008 static GQuark this_quark()
00009 {
00010   return g_quark_from_static_string("moment_parser");
00011 }
00012 
00013 #define this_domain (this_quark())
00014 
00015 enum {
00016   code_parse_error = 1,
00017   code_incomplete_input
00018 };
00019 
00020 #define SET_SEEN_DATETIME_FROM_TIME_T(tt_expr) \
00021   {                \
00022     time_t tt = (tt_expr);           \
00023     gmtime_r(&tt, &seen);          \
00024   }
00025 
00026 #line 97 "moment_parser.rl"
00027 
00028 
00029 
00030 #line 31 "moment_parser.c"
00031 static const char _fsm_actions[] = {
00032   0, 1, 0, 1, 1, 1, 2, 1, 
00033   3, 1, 4, 1, 5, 1, 6, 1, 
00034   7, 1, 8, 1, 9, 1, 10, 1, 
00035   11, 1, 12, 1, 13, 1, 14, 1, 
00036   15, 1, 16, 1, 17, 1, 18, 1, 
00037   19, 1, 20, 1, 21, 1, 22, 1, 
00038   23, 1, 24, 1, 25, 1, 26, 1, 
00039   28, 1, 29, 1, 30, 2, 0, 27, 
00040   2, 1, 27, 2, 2, 27, 2, 3, 
00041   27, 2, 4, 27, 2, 5, 27, 2, 
00042   6, 27, 2, 19, 21, 2, 19, 22, 
00043   2, 19, 23, 2, 19, 28, 2, 19, 
00044   29, 2, 19, 30, 2, 20, 31, 2, 
00045   21, 31, 2, 22, 31, 2, 23, 19, 
00046   2, 24, 31, 2, 25, 31, 2, 26, 
00047   31, 2, 30, 31, 2, 32, 31, 3, 
00048   0, 27, 31, 3, 1, 27, 31, 3, 
00049   2, 27, 31, 3, 3, 27, 31, 3, 
00050   4, 27, 31, 3, 5, 27, 31, 3, 
00051   6, 27, 31, 3, 19, 21, 31, 3, 
00052   19, 22, 31, 3, 19, 30, 31, 3, 
00053   20, 33, 31, 3, 20, 34, 31, 3, 
00054   21, 33, 31, 3, 21, 34, 31, 3, 
00055   22, 33, 31, 3, 22, 34, 31, 3, 
00056   23, 19, 20, 4, 19, 21, 33, 31, 
00057   4, 19, 21, 34, 31, 4, 19, 22, 
00058   33, 31, 4, 19, 22, 34, 31, 4, 
00059   23, 19, 20, 31, 5, 23, 19, 20, 
00060   33, 31, 5, 23, 19, 20, 34, 31
00061   
00062 };
00063 
00064 static const short _fsm_key_offsets[] = {
00065   0, 0, 13, 25, 36, 41, 49, 53, 
00066   58, 59, 60, 63, 76, 87, 92, 100, 
00067   108, 115, 120, 127, 134, 139, 145, 151, 
00068   155, 157, 160, 167, 175, 176, 181, 184, 
00069   187, 188, 190, 191, 193, 194, 195, 196, 
00070   198, 199, 200, 201, 202, 203, 205, 206, 
00071   207, 208, 209, 210, 211, 212, 214, 215, 
00072   216, 217, 218, 219, 221, 222, 224, 225, 
00073   226, 227, 228, 230, 232, 233, 235, 236, 
00074   237, 239, 241, 242, 243, 244, 245, 246, 
00075   248, 249, 250, 251, 252, 253, 254, 255, 
00076   257, 258, 259, 260, 261, 262, 263, 265, 
00077   266, 267, 268, 269, 270, 271, 277, 281, 
00078   282, 283, 284, 285, 286, 287, 290, 294, 
00079   295, 296, 297, 300, 304, 305, 306, 307, 
00080   308, 311, 315, 316, 317, 318, 322, 328, 
00081   331, 332, 333, 336, 342, 349, 355, 359, 
00082   360, 363, 372, 383, 389, 395, 399, 402, 
00083   403, 405, 406, 408, 409, 410, 411, 413, 
00084   414, 415, 416, 417, 418, 420, 421, 422, 
00085   423, 424, 425, 426, 427, 429, 430, 431, 
00086   432, 433, 434, 436, 437, 439, 440, 441, 
00087   442, 443, 445, 447, 448, 450, 451, 452, 
00088   454, 456, 457, 458, 459, 460, 461, 463, 
00089   464, 465, 466, 467, 468, 469, 470, 472, 
00090   473, 474, 475, 476, 477, 478, 480, 481, 
00091   482, 483, 484, 485, 486, 489, 492, 495, 
00092   496, 497, 498, 501, 505, 506, 507, 508, 
00093   509, 512, 516, 517, 518, 519, 520, 521, 
00094   522, 523, 527, 528, 529, 530, 533, 541, 
00095   542, 543, 548, 549, 550, 554, 555, 556, 
00096   561, 562, 563, 567, 569, 570, 575, 576, 
00097   577, 578, 579, 583, 584, 589, 590, 591, 
00098   595, 597, 598, 603, 604, 605, 606, 607, 
00099   611, 612, 617, 618, 619, 620, 624, 625, 
00100   626, 631, 632, 633, 634, 635, 636, 640, 
00101   642, 643, 646, 650, 652, 653, 654, 658, 
00102   659, 660, 661, 662, 663, 667, 671, 677, 
00103   683, 687, 692, 697, 700, 701, 702, 705, 
00104   709, 710, 711, 712, 713, 716, 720, 721, 
00105   722, 723, 724, 725, 726, 727, 730, 731, 
00106   732, 733, 734, 737, 747, 748, 749, 753, 
00107   757, 758, 761, 768, 776, 783, 788, 795, 
00108   802, 807, 813, 819, 823, 824, 825, 828, 
00109   829, 830, 834, 835, 836, 839, 841, 842, 
00110   846, 847, 848, 849, 850, 853, 854, 858, 
00111   859, 860, 863, 865, 866, 870, 871, 872, 
00112   873, 874, 877, 878, 882, 883, 884, 885, 
00113   888, 889, 890, 894, 895, 896, 897, 898, 
00114   899, 902, 903, 904, 907, 911, 912, 915, 
00115   922, 930, 937, 942, 949, 956, 961, 967, 
00116   973, 977, 978, 979, 980, 983, 991, 992, 
00117   993, 997, 998, 999, 1002, 1003, 1004, 1008, 
00118   1009, 1010, 1013, 1015, 1016, 1020, 1021, 1022, 
00119   1023, 1024, 1027, 1028, 1032, 1033, 1034, 1037, 
00120   1039, 1040, 1044, 1045, 1046, 1047, 1048, 1051, 
00121   1052, 1056, 1057, 1058, 1059, 1062, 1063, 1064, 
00122   1068, 1069, 1070, 1071, 1072, 1073, 1076, 1077, 
00123   1080, 1089, 1092, 1095, 1097, 1098, 1101, 1105, 
00124   1107, 1108, 1109, 1112, 1113, 1114, 1115, 1116, 
00125   1117, 1120, 1127, 1131, 1136, 1143, 1150, 1155, 
00126   1161, 1167, 1171, 1172, 1175, 1182, 1187, 1190, 
00127   1193, 1194, 1196, 1197, 1199, 1200, 1201, 1202, 
00128   1204, 1205, 1206, 1207, 1208, 1209, 1211, 1212, 
00129   1213, 1214, 1215, 1216, 1217, 1218, 1220, 1221, 
00130   1222, 1223, 1224, 1225, 1227, 1228, 1230, 1231, 
00131   1232, 1233, 1234, 1236, 1238, 1239, 1241, 1242, 
00132   1243, 1245, 1247, 1248, 1249, 1250, 1251, 1252, 
00133   1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 
00134   1263, 1264, 1265, 1266, 1267, 1268, 1269, 1271, 
00135   1272, 1273, 1274, 1275, 1276, 1277, 1283, 1287, 
00136   1288, 1289, 1290, 1291, 1292, 1293, 1296, 1300, 
00137   1301, 1302, 1303, 1306, 1310, 1311, 1312, 1313, 
00138   1314, 1317, 1321, 1322, 1323, 1324, 1328, 1334, 
00139   1337, 1338, 1339, 1342, 1348, 1355, 1361, 1365, 
00140   1366, 1369, 1378, 1389, 1395, 1401, 1405, 1408, 
00141   1409, 1411, 1412, 1414, 1415, 1416, 1417, 1419, 
00142   1420, 1421, 1422, 1423, 1424, 1426, 1427, 1428, 
00143   1429, 1430, 1431, 1432, 1433, 1435, 1436, 1437, 
00144   1438, 1439, 1440, 1442, 1443, 1445, 1446, 1447, 
00145   1448, 1449, 1451, 1453, 1454, 1456, 1457, 1458, 
00146   1460, 1462, 1463, 1464, 1465, 1466, 1467, 1469, 
00147   1470, 1471, 1472, 1473, 1474, 1475, 1476, 1478, 
00148   1479, 1480, 1481, 1482, 1483, 1484, 1486, 1487, 
00149   1488, 1489, 1490, 1491, 1492, 1495, 1498, 1501, 
00150   1502, 1503, 1504, 1507, 1511, 1512, 1513, 1514, 
00151   1515, 1518, 1522, 1523, 1524, 1525, 1526, 1527, 
00152   1528, 1529, 1533, 1534, 1535, 1536, 1539, 1547, 
00153   1548, 1549, 1554, 1555, 1556, 1560, 1561, 1562, 
00154   1567, 1568, 1569, 1573, 1575, 1576, 1581, 1582, 
00155   1583, 1584, 1585, 1589, 1590, 1595, 1596, 1597, 
00156   1601, 1603, 1604, 1609, 1610, 1611, 1612, 1613, 
00157   1617, 1618, 1623, 1624, 1625, 1626, 1630, 1631, 
00158   1632, 1637, 1638, 1639, 1640, 1641, 1642, 1646, 
00159   1648, 1649, 1652, 1656, 1658, 1659, 1660, 1664, 
00160   1665, 1666, 1667, 1668, 1669, 1673, 1677, 1683, 
00161   1689, 1693, 1698, 1703, 1706, 1707, 1708, 1711, 
00162   1715, 1716, 1717, 1718, 1719, 1722, 1726, 1727, 
00163   1728, 1729, 1730, 1731, 1732, 1733, 1736, 1737, 
00164   1738, 1739, 1740, 1743, 1753, 1754, 1755, 1759, 
00165   1763, 1764, 1767, 1774, 1781, 1786, 1793, 1800, 
00166   1805, 1811, 1817, 1821, 1822, 1823, 1826, 1827, 
00167   1828, 1832, 1833, 1834, 1837, 1839, 1840, 1844, 
00168   1845, 1846, 1847, 1848, 1851, 1852, 1856, 1857, 
00169   1858, 1861, 1863, 1864, 1868, 1869, 1870, 1871, 
00170   1872, 1875, 1876, 1880, 1881, 1882, 1883, 1886, 
00171   1887, 1888, 1892, 1893, 1894, 1895, 1896, 1897, 
00172   1900, 1901, 1902, 1905, 1909, 1910, 1913, 1920, 
00173   1927, 1932, 1939, 1946, 1951, 1957, 1963, 1967, 
00174   1968, 1969, 1970, 1973, 1981, 1982, 1983, 1987, 
00175   1988, 1989, 1992, 1993, 1994, 1998, 1999, 2000, 
00176   2003, 2005, 2006, 2010, 2011, 2012, 2013, 2014, 
00177   2017, 2018, 2022, 2023, 2024, 2027, 2029, 2030, 
00178   2034, 2035, 2036, 2037, 2038, 2041, 2042, 2046, 
00179   2047, 2048, 2049, 2052, 2053, 2054, 2058, 2059, 
00180   2060, 2061, 2062, 2063, 2066, 2067, 2070, 2079, 
00181   2082, 2085, 2087, 2088, 2091, 2095, 2097, 2098, 
00182   2099, 2102, 2103, 2104, 2105, 2106, 2107, 2110, 
00183   2111, 2113, 2114, 2115, 2119
00184 };
00185 
00186 static const char _fsm_trans_keys[] = {
00187   32, 40, 45, 97, 100, 101, 110, 111, 
00188   116, 9, 13, 48, 57, 32, 45, 97, 
00189   100, 101, 110, 111, 116, 9, 13, 48, 
00190   57, 45, 65, 68, 70, 74, 77, 78, 
00191   79, 83, 48, 57, 32, 9, 13, 48, 
00192   57, 32, 41, 58, 97, 9, 13, 48, 
00193   57, 0, 32, 9, 13, 0, 32, 97, 
00194   9, 13, 110, 100, 32, 9, 13, 32, 
00195   40, 45, 97, 100, 101, 110, 111, 116, 
00196   9, 13, 48, 57, 45, 65, 68, 70, 
00197   74, 77, 78, 79, 83, 48, 57, 32, 
00198   9, 13, 48, 57, 0, 32, 58, 97, 
00199   9, 13, 48, 57, 0, 32, 58, 97, 
00200   9, 13, 48, 57, 0, 32, 58, 9, 
00201   13, 48, 57, 0, 32, 58, 9, 13, 
00202   0, 32, 58, 9, 13, 48, 57, 0, 
00203   32, 58, 9, 13, 48, 57, 0, 32, 
00204   58, 9, 13, 0, 32, 9, 13, 48, 
00205   57, 0, 32, 9, 13, 48, 57, 0, 
00206   32, 9, 13, 110, 116, 32, 9, 13, 
00207   0, 32, 58, 9, 13, 48, 57, 0, 
00208   32, 58, 97, 9, 13, 48, 57, 116, 
00209   32, 9, 13, 48, 57, 32, 9, 13, 
00210   45, 48, 57, 45, 112, 117, 114, 45, 
00211   105, 108, 45, 103, 45, 117, 115, 116, 
00212   45, 101, 99, 45, 101, 109, 98, 101, 
00213   114, 45, 101, 98, 45, 114, 117, 97, 
00214   114, 121, 45, 97, 117, 110, 45, 117, 
00215   97, 114, 121, 45, 108, 110, 45, 121, 
00216   45, 45, 101, 45, 97, 114, 121, 45, 
00217   99, 104, 45, 45, 111, 118, 45, 101, 
00218   109, 98, 101, 114, 45, 99, 116, 45, 
00219   111, 98, 101, 114, 45, 101, 112, 45, 
00220   116, 101, 109, 98, 101, 114, 45, 32, 
00221   45, 9, 13, 48, 57, 32, 109, 9, 
00222   13, 105, 110, 117, 116, 101, 115, 32, 
00223   9, 13, 32, 112, 9, 13, 97, 115, 
00224   116, 32, 9, 13, 32, 101, 9, 13, 
00225   118, 101, 114, 121, 32, 9, 13, 32, 
00226   104, 9, 13, 111, 117, 114, 0, 32, 
00227   9, 13, 32, 45, 9, 13, 48, 57, 
00228   45, 48, 57, 45, 116, 32, 9, 13, 
00229   32, 58, 9, 13, 48, 57, 32, 58, 
00230   111, 9, 13, 48, 57, 32, 58, 9, 
00231   13, 48, 57, 32, 111, 9, 13, 110, 
00232   32, 9, 13, 32, 45, 100, 110, 116, 
00233   9, 13, 48, 57, 45, 65, 68, 70, 
00234   74, 77, 78, 79, 83, 48, 57, 0, 
00235   32, 9, 13, 48, 57, 0, 32, 9, 
00236   13, 48, 57, 0, 32, 9, 13, 45, 
00237   48, 57, 45, 112, 117, 114, 45, 105, 
00238   108, 45, 103, 45, 117, 115, 116, 45, 
00239   101, 99, 45, 101, 109, 98, 101, 114, 
00240   45, 101, 98, 45, 114, 117, 97, 114, 
00241   121, 45, 97, 117, 110, 45, 117, 97, 
00242   114, 121, 45, 108, 110, 45, 121, 45, 
00243   45, 101, 45, 97, 114, 121, 45, 99, 
00244   104, 45, 45, 111, 118, 45, 101, 109, 
00245   98, 101, 114, 45, 99, 116, 45, 111, 
00246   98, 101, 114, 45, 101, 112, 45, 116, 
00247   101, 109, 98, 101, 114, 45, 45, 48, 
00248   57, 45, 48, 57, 45, 48, 57, 45, 
00249   97, 121, 32, 9, 13, 32, 97, 9, 
00250   13, 102, 116, 101, 114, 32, 9, 13, 
00251   32, 116, 9, 13, 111, 109, 111, 114, 
00252   114, 111, 119, 0, 32, 9, 13, 101, 
00253   120, 116, 32, 9, 13, 32, 70, 77, 
00254   83, 84, 87, 9, 13, 114, 105, 0, 
00255   32, 100, 9, 13, 97, 121, 0, 32, 
00256   9, 13, 111, 110, 0, 32, 100, 9, 
00257   13, 97, 121, 0, 32, 9, 13, 97, 
00258   117, 116, 0, 32, 117, 9, 13, 114, 
00259   100, 97, 121, 0, 32, 9, 13, 110, 
00260   0, 32, 100, 9, 13, 97, 121, 0, 
00261   32, 9, 13, 104, 117, 117, 0, 32, 
00262   114, 9, 13, 115, 100, 97, 121, 0, 
00263   32, 9, 13, 101, 0, 32, 115, 9, 
00264   13, 100, 97, 121, 0, 32, 9, 13, 
00265   101, 100, 0, 32, 110, 9, 13, 101, 
00266   115, 100, 97, 121, 0, 32, 9, 13, 
00267   104, 111, 101, 32, 9, 13, 32, 100, 
00268   9, 13, 100, 109, 97, 121, 0, 32, 
00269   9, 13, 111, 114, 114, 111, 119, 0, 
00270   32, 9, 13, 32, 58, 9, 13, 32, 
00271   58, 9, 13, 48, 57, 32, 58, 9, 
00272   13, 48, 57, 32, 58, 9, 13, 32, 
00273   9, 13, 48, 57, 32, 9, 13, 48, 
00274   57, 32, 9, 13, 97, 121, 32, 9, 
00275   13, 32, 97, 9, 13, 102, 116, 101, 
00276   114, 32, 9, 13, 32, 116, 9, 13, 
00277   111, 109, 111, 114, 114, 111, 119, 32, 
00278   9, 13, 118, 101, 114, 121, 32, 9, 
00279   13, 32, 70, 77, 83, 84, 87, 100, 
00280   104, 9, 13, 114, 105, 32, 100, 9, 
00281   13, 32, 97, 9, 13, 116, 32, 9, 
00282   13, 0, 32, 58, 9, 13, 48, 57, 
00283   0, 32, 58, 97, 9, 13, 48, 57, 
00284   0, 32, 58, 9, 13, 48, 57, 0, 
00285   32, 58, 9, 13, 0, 32, 58, 9, 
00286   13, 48, 57, 0, 32, 58, 9, 13, 
00287   48, 57, 0, 32, 58, 9, 13, 0, 
00288   32, 9, 13, 48, 57, 0, 32, 9, 
00289   13, 48, 57, 0, 32, 9, 13, 97, 
00290   121, 32, 9, 13, 111, 110, 32, 100, 
00291   9, 13, 97, 121, 32, 9, 13, 97, 
00292   117, 116, 32, 117, 9, 13, 114, 100, 
00293   97, 121, 32, 9, 13, 110, 32, 100, 
00294   9, 13, 97, 121, 32, 9, 13, 104, 
00295   117, 117, 32, 114, 9, 13, 115, 100, 
00296   97, 121, 32, 9, 13, 101, 32, 115, 
00297   9, 13, 100, 97, 121, 32, 9, 13, 
00298   101, 100, 32, 110, 9, 13, 101, 115, 
00299   100, 97, 121, 32, 9, 13, 97, 121, 
00300   32, 9, 13, 32, 97, 9, 13, 116, 
00301   32, 9, 13, 0, 32, 58, 9, 13, 
00302   48, 57, 0, 32, 58, 97, 9, 13, 
00303   48, 57, 0, 32, 58, 9, 13, 48, 
00304   57, 0, 32, 58, 9, 13, 0, 32, 
00305   58, 9, 13, 48, 57, 0, 32, 58, 
00306   9, 13, 48, 57, 0, 32, 58, 9, 
00307   13, 0, 32, 9, 13, 48, 57, 0, 
00308   32, 9, 13, 48, 57, 0, 32, 9, 
00309   13, 101, 120, 116, 32, 9, 13, 32, 
00310   70, 77, 83, 84, 87, 9, 13, 114, 
00311   105, 32, 100, 9, 13, 97, 121, 32, 
00312   9, 13, 111, 110, 32, 100, 9, 13, 
00313   97, 121, 32, 9, 13, 97, 117, 116, 
00314   32, 117, 9, 13, 114, 100, 97, 121, 
00315   32, 9, 13, 110, 32, 100, 9, 13, 
00316   97, 121, 32, 9, 13, 104, 117, 117, 
00317   32, 114, 9, 13, 115, 100, 97, 121, 
00318   32, 9, 13, 101, 32, 115, 9, 13, 
00319   100, 97, 121, 32, 9, 13, 101, 100, 
00320   32, 110, 9, 13, 101, 115, 100, 97, 
00321   121, 32, 9, 13, 110, 32, 9, 13, 
00322   32, 45, 100, 110, 116, 9, 13, 48, 
00323   57, 45, 48, 57, 45, 48, 57, 104, 
00324   111, 101, 32, 9, 13, 32, 100, 9, 
00325   13, 100, 109, 97, 121, 32, 9, 13, 
00326   111, 114, 114, 111, 119, 32, 9, 13, 
00327   32, 41, 58, 9, 13, 48, 57, 32, 
00328   41, 9, 13, 32, 41, 58, 9, 13, 
00329   32, 41, 58, 9, 13, 48, 57, 32, 
00330   41, 58, 9, 13, 48, 57, 32, 41, 
00331   58, 9, 13, 32, 41, 9, 13, 48, 
00332   57, 32, 41, 9, 13, 48, 57, 32, 
00333   41, 9, 13, 116, 32, 9, 13, 32, 
00334   41, 58, 9, 13, 48, 57, 32, 9, 
00335   13, 48, 57, 32, 9, 13, 45, 48, 
00336   57, 45, 112, 117, 114, 45, 105, 108, 
00337   45, 103, 45, 117, 115, 116, 45, 101, 
00338   99, 45, 101, 109, 98, 101, 114, 45, 
00339   101, 98, 45, 114, 117, 97, 114, 121, 
00340   45, 97, 117, 110, 45, 117, 97, 114, 
00341   121, 45, 108, 110, 45, 121, 45, 45, 
00342   101, 45, 97, 114, 121, 45, 99, 104, 
00343   45, 45, 111, 118, 45, 101, 109, 98, 
00344   101, 114, 45, 99, 116, 45, 111, 98, 
00345   101, 114, 45, 101, 112, 45, 116, 101, 
00346   109, 98, 101, 114, 45, 32, 45, 9, 
00347   13, 48, 57, 32, 109, 9, 13, 105, 
00348   110, 117, 116, 101, 115, 32, 9, 13, 
00349   32, 112, 9, 13, 97, 115, 116, 32, 
00350   9, 13, 32, 101, 9, 13, 118, 101, 
00351   114, 121, 32, 9, 13, 32, 104, 9, 
00352   13, 111, 117, 114, 32, 41, 9, 13, 
00353   32, 45, 9, 13, 48, 57, 45, 48, 
00354   57, 45, 116, 32, 9, 13, 32, 58, 
00355   9, 13, 48, 57, 32, 58, 111, 9, 
00356   13, 48, 57, 32, 58, 9, 13, 48, 
00357   57, 32, 111, 9, 13, 110, 32, 9, 
00358   13, 32, 45, 100, 110, 116, 9, 13, 
00359   48, 57, 45, 65, 68, 70, 74, 77, 
00360   78, 79, 83, 48, 57, 32, 41, 9, 
00361   13, 48, 57, 32, 41, 9, 13, 48, 
00362   57, 32, 41, 9, 13, 45, 48, 57, 
00363   45, 112, 117, 114, 45, 105, 108, 45, 
00364   103, 45, 117, 115, 116, 45, 101, 99, 
00365   45, 101, 109, 98, 101, 114, 45, 101, 
00366   98, 45, 114, 117, 97, 114, 121, 45, 
00367   97, 117, 110, 45, 117, 97, 114, 121, 
00368   45, 108, 110, 45, 121, 45, 45, 101, 
00369   45, 97, 114, 121, 45, 99, 104, 45, 
00370   45, 111, 118, 45, 101, 109, 98, 101, 
00371   114, 45, 99, 116, 45, 111, 98, 101, 
00372   114, 45, 101, 112, 45, 116, 101, 109, 
00373   98, 101, 114, 45, 45, 48, 57, 45, 
00374   48, 57, 45, 48, 57, 45, 97, 121, 
00375   32, 9, 13, 32, 97, 9, 13, 102, 
00376   116, 101, 114, 32, 9, 13, 32, 116, 
00377   9, 13, 111, 109, 111, 114, 114, 111, 
00378   119, 32, 41, 9, 13, 101, 120, 116, 
00379   32, 9, 13, 32, 70, 77, 83, 84, 
00380   87, 9, 13, 114, 105, 32, 41, 100, 
00381   9, 13, 97, 121, 32, 41, 9, 13, 
00382   111, 110, 32, 41, 100, 9, 13, 97, 
00383   121, 32, 41, 9, 13, 97, 117, 116, 
00384   32, 41, 117, 9, 13, 114, 100, 97, 
00385   121, 32, 41, 9, 13, 110, 32, 41, 
00386   100, 9, 13, 97, 121, 32, 41, 9, 
00387   13, 104, 117, 117, 32, 41, 114, 9, 
00388   13, 115, 100, 97, 121, 32, 41, 9, 
00389   13, 101, 32, 41, 115, 9, 13, 100, 
00390   97, 121, 32, 41, 9, 13, 101, 100, 
00391   32, 41, 110, 9, 13, 101, 115, 100, 
00392   97, 121, 32, 41, 9, 13, 104, 111, 
00393   101, 32, 9, 13, 32, 100, 9, 13, 
00394   100, 109, 97, 121, 32, 41, 9, 13, 
00395   111, 114, 114, 111, 119, 32, 41, 9, 
00396   13, 32, 58, 9, 13, 32, 58, 9, 
00397   13, 48, 57, 32, 58, 9, 13, 48, 
00398   57, 32, 58, 9, 13, 32, 9, 13, 
00399   48, 57, 32, 9, 13, 48, 57, 32, 
00400   9, 13, 97, 121, 32, 9, 13, 32, 
00401   97, 9, 13, 102, 116, 101, 114, 32, 
00402   9, 13, 32, 116, 9, 13, 111, 109, 
00403   111, 114, 114, 111, 119, 32, 9, 13, 
00404   118, 101, 114, 121, 32, 9, 13, 32, 
00405   70, 77, 83, 84, 87, 100, 104, 9, 
00406   13, 114, 105, 32, 100, 9, 13, 32, 
00407   97, 9, 13, 116, 32, 9, 13, 32, 
00408   41, 58, 9, 13, 48, 57, 32, 41, 
00409   58, 9, 13, 48, 57, 32, 41, 58, 
00410   9, 13, 32, 41, 58, 9, 13, 48, 
00411   57, 32, 41, 58, 9, 13, 48, 57, 
00412   32, 41, 58, 9, 13, 32, 41, 9, 
00413   13, 48, 57, 32, 41, 9, 13, 48, 
00414   57, 32, 41, 9, 13, 97, 121, 32, 
00415   9, 13, 111, 110, 32, 100, 9, 13, 
00416   97, 121, 32, 9, 13, 97, 117, 116, 
00417   32, 117, 9, 13, 114, 100, 97, 121, 
00418   32, 9, 13, 110, 32, 100, 9, 13, 
00419   97, 121, 32, 9, 13, 104, 117, 117, 
00420   32, 114, 9, 13, 115, 100, 97, 121, 
00421   32, 9, 13, 101, 32, 115, 9, 13, 
00422   100, 97, 121, 32, 9, 13, 101, 100, 
00423   32, 110, 9, 13, 101, 115, 100, 97, 
00424   121, 32, 9, 13, 97, 121, 32, 9, 
00425   13, 32, 97, 9, 13, 116, 32, 9, 
00426   13, 32, 41, 58, 9, 13, 48, 57, 
00427   32, 41, 58, 9, 13, 48, 57, 32, 
00428   41, 58, 9, 13, 32, 41, 58, 9, 
00429   13, 48, 57, 32, 41, 58, 9, 13, 
00430   48, 57, 32, 41, 58, 9, 13, 32, 
00431   41, 9, 13, 48, 57, 32, 41, 9, 
00432   13, 48, 57, 32, 41, 9, 13, 101, 
00433   120, 116, 32, 9, 13, 32, 70, 77, 
00434   83, 84, 87, 9, 13, 114, 105, 32, 
00435   100, 9, 13, 97, 121, 32, 9, 13, 
00436   111, 110, 32, 100, 9, 13, 97, 121, 
00437   32, 9, 13, 97, 117, 116, 32, 117, 
00438   9, 13, 114, 100, 97, 121, 32, 9, 
00439   13, 110, 32, 100, 9, 13, 97, 121, 
00440   32, 9, 13, 104, 117, 117, 32, 114, 
00441   9, 13, 115, 100, 97, 121, 32, 9, 
00442   13, 101, 32, 115, 9, 13, 100, 97, 
00443   121, 32, 9, 13, 101, 100, 32, 110, 
00444   9, 13, 101, 115, 100, 97, 121, 32, 
00445   9, 13, 110, 32, 9, 13, 32, 45, 
00446   100, 110, 116, 9, 13, 48, 57, 45, 
00447   48, 57, 45, 48, 57, 104, 111, 101, 
00448   32, 9, 13, 32, 100, 9, 13, 100, 
00449   109, 97, 121, 32, 9, 13, 111, 114, 
00450   114, 111, 119, 32, 9, 13, 101, 118, 
00451   120, 101, 114, 0, 32, 9, 13, 0
00452 };
00453 
00454 static const char _fsm_single_lengths[] = {
00455   0, 9, 8, 9, 1, 4, 2, 3, 
00456   1, 1, 1, 9, 9, 1, 4, 4, 
00457   3, 3, 3, 3, 3, 2, 2, 2, 
00458   2, 1, 3, 4, 1, 1, 1, 1, 
00459   1, 2, 1, 2, 1, 1, 1, 2, 
00460   1, 1, 1, 1, 1, 2, 1, 1, 
00461   1, 1, 1, 1, 1, 2, 1, 1, 
00462   1, 1, 1, 2, 1, 2, 1, 1, 
00463   1, 1, 2, 2, 1, 2, 1, 1, 
00464   2, 2, 1, 1, 1, 1, 1, 2, 
00465   1, 1, 1, 1, 1, 1, 1, 2, 
00466   1, 1, 1, 1, 1, 1, 2, 1, 
00467   1, 1, 1, 1, 1, 2, 2, 1, 
00468   1, 1, 1, 1, 1, 1, 2, 1, 
00469   1, 1, 1, 2, 1, 1, 1, 1, 
00470   1, 2, 1, 1, 1, 2, 2, 1, 
00471   1, 1, 1, 2, 3, 2, 2, 1, 
00472   1, 5, 9, 2, 2, 2, 1, 1, 
00473   2, 1, 2, 1, 1, 1, 2, 1, 
00474   1, 1, 1, 1, 2, 1, 1, 1, 
00475   1, 1, 1, 1, 2, 1, 1, 1, 
00476   1, 1, 2, 1, 2, 1, 1, 1, 
00477   1, 2, 2, 1, 2, 1, 1, 2, 
00478   2, 1, 1, 1, 1, 1, 2, 1, 
00479   1, 1, 1, 1, 1, 1, 2, 1, 
00480   1, 1, 1, 1, 1, 2, 1, 1, 
00481   1, 1, 1, 1, 1, 1, 1, 1, 
00482   1, 1, 1, 2, 1, 1, 1, 1, 
00483   1, 2, 1, 1, 1, 1, 1, 1, 
00484   1, 2, 1, 1, 1, 1, 6, 1, 
00485   1, 3, 1, 1, 2, 1, 1, 3, 
00486   1, 1, 2, 2, 1, 3, 1, 1, 
00487   1, 1, 2, 1, 3, 1, 1, 2, 
00488   2, 1, 3, 1, 1, 1, 1, 2, 
00489   1, 3, 1, 1, 1, 2, 1, 1, 
00490   3, 1, 1, 1, 1, 1, 2, 2, 
00491   1, 1, 2, 2, 1, 1, 2, 1, 
00492   1, 1, 1, 1, 2, 2, 2, 2, 
00493   2, 1, 1, 1, 1, 1, 1, 2, 
00494   1, 1, 1, 1, 1, 2, 1, 1, 
00495   1, 1, 1, 1, 1, 1, 1, 1, 
00496   1, 1, 1, 8, 1, 1, 2, 2, 
00497   1, 1, 3, 4, 3, 3, 3, 3, 
00498   3, 2, 2, 2, 1, 1, 1, 1, 
00499   1, 2, 1, 1, 1, 2, 1, 2, 
00500   1, 1, 1, 1, 1, 1, 2, 1, 
00501   1, 1, 2, 1, 2, 1, 1, 1, 
00502   1, 1, 1, 2, 1, 1, 1, 1, 
00503   1, 1, 2, 1, 1, 1, 1, 1, 
00504   1, 1, 1, 1, 2, 1, 1, 3, 
00505   4, 3, 3, 3, 3, 3, 2, 2, 
00506   2, 1, 1, 1, 1, 6, 1, 1, 
00507   2, 1, 1, 1, 1, 1, 2, 1, 
00508   1, 1, 2, 1, 2, 1, 1, 1, 
00509   1, 1, 1, 2, 1, 1, 1, 2, 
00510   1, 2, 1, 1, 1, 1, 1, 1, 
00511   2, 1, 1, 1, 1, 1, 1, 2, 
00512   1, 1, 1, 1, 1, 1, 1, 1, 
00513   5, 1, 1, 2, 1, 1, 2, 2, 
00514   1, 1, 1, 1, 1, 1, 1, 1, 
00515   1, 3, 2, 3, 3, 3, 3, 2, 
00516   2, 2, 1, 1, 3, 1, 1, 1, 
00517   1, 2, 1, 2, 1, 1, 1, 2, 
00518   1, 1, 1, 1, 1, 2, 1, 1, 
00519   1, 1, 1, 1, 1, 2, 1, 1, 
00520   1, 1, 1, 2, 1, 2, 1, 1, 
00521   1, 1, 2, 2, 1, 2, 1, 1, 
00522   2, 2, 1, 1, 1, 1, 1, 2, 
00523   1, 1, 1, 1, 1, 1, 1, 2, 
00524   1, 1, 1, 1, 1, 1, 2, 1, 
00525   1, 1, 1, 1, 1, 2, 2, 1, 
00526   1, 1, 1, 1, 1, 1, 2, 1, 
00527   1, 1, 1, 2, 1, 1, 1, 1, 
00528   1, 2, 1, 1, 1, 2, 2, 1, 
00529   1, 1, 1, 2, 3, 2, 2, 1, 
00530   1, 5, 9, 2, 2, 2, 1, 1, 
00531   2, 1, 2, 1, 1, 1, 2, 1, 
00532   1, 1, 1, 1, 2, 1, 1, 1, 
00533   1, 1, 1, 1, 2, 1, 1, 1, 
00534   1, 1, 2, 1, 2, 1, 1, 1, 
00535   1, 2, 2, 1, 2, 1, 1, 2, 
00536   2, 1, 1, 1, 1, 1, 2, 1, 
00537   1, 1, 1, 1, 1, 1, 2, 1, 
00538   1, 1, 1, 1, 1, 2, 1, 1, 
00539   1, 1, 1, 1, 1, 1, 1, 1, 
00540   1, 1, 1, 2, 1, 1, 1, 1, 
00541   1, 2, 1, 1, 1, 1, 1, 1, 
00542   1, 2, 1, 1, 1, 1, 6, 1, 
00543   1, 3, 1, 1, 2, 1, 1, 3, 
00544   1, 1, 2, 2, 1, 3, 1, 1, 
00545   1, 1, 2, 1, 3, 1, 1, 2, 
00546   2, 1, 3, 1, 1, 1, 1, 2, 
00547   1, 3, 1, 1, 1, 2, 1, 1, 
00548   3, 1, 1, 1, 1, 1, 2, 2, 
00549   1, 1, 2, 2, 1, 1, 2, 1, 
00550   1, 1, 1, 1, 2, 2, 2, 2, 
00551   2, 1, 1, 1, 1, 1, 1, 2, 
00552   1, 1, 1, 1, 1, 2, 1, 1, 
00553   1, 1, 1, 1, 1, 1, 1, 1, 
00554   1, 1, 1, 8, 1, 1, 2, 2, 
00555   1, 1, 3, 3, 3, 3, 3, 3, 
00556   2, 2, 2, 1, 1, 1, 1, 1, 
00557   2, 1, 1, 1, 2, 1, 2, 1, 
00558   1, 1, 1, 1, 1, 2, 1, 1, 
00559   1, 2, 1, 2, 1, 1, 1, 1, 
00560   1, 1, 2, 1, 1, 1, 1, 1, 
00561   1, 2, 1, 1, 1, 1, 1, 1, 
00562   1, 1, 1, 2, 1, 1, 3, 3, 
00563   3, 3, 3, 3, 2, 2, 2, 1, 
00564   1, 1, 1, 6, 1, 1, 2, 1, 
00565   1, 1, 1, 1, 2, 1, 1, 1, 
00566   2, 1, 2, 1, 1, 1, 1, 1, 
00567   1, 2, 1, 1, 1, 2, 1, 2, 
00568   1, 1, 1, 1, 1, 1, 2, 1, 
00569   1, 1, 1, 1, 1, 2, 1, 1, 
00570   1, 1, 1, 1, 1, 1, 5, 1, 
00571   1, 2, 1, 1, 2, 2, 1, 1, 
00572   1, 1, 1, 1, 1, 1, 1, 1, 
00573   2, 1, 1, 2, 0
00574 };
00575 
00576 static const char _fsm_range_lengths[] = {
00577   0, 2, 2, 1, 2, 2, 1, 1, 
00578   0, 0, 1, 2, 1, 2, 2, 2, 
00579   2, 1, 2, 2, 1, 2, 2, 1, 
00580   0, 1, 2, 2, 0, 2, 1, 1, 
00581   0, 0, 0, 0, 0, 0, 0, 0, 
00582   0, 0, 0, 0, 0, 0, 0, 0, 
00583   0, 0, 0, 0, 0, 0, 0, 0, 
00584   0, 0, 0, 0, 0, 0, 0, 0, 
00585   0, 0, 0, 0, 0, 0, 0, 0, 
00586   0, 0, 0, 0, 0, 0, 0, 0, 
00587   0, 0, 0, 0, 0, 0, 0, 0, 
00588   0, 0, 0, 0, 0, 0, 0, 0, 
00589   0, 0, 0, 0, 0, 2, 1, 0, 
00590   0, 0, 0, 0, 0, 1, 1, 0, 
00591   0, 0, 1, 1, 0, 0, 0, 0, 
00592   1, 1, 0, 0, 0, 1, 2, 1, 
00593   0, 0, 1, 2, 2, 2, 1, 0, 
00594   1, 2, 1, 2, 2, 1, 1, 0, 
00595   0, 0, 0, 0, 0, 0, 0, 0, 
00596   0, 0, 0, 0, 0, 0, 0, 0, 
00597   0, 0, 0, 0, 0, 0, 0, 0, 
00598   0, 0, 0, 0, 0, 0, 0, 0, 
00599   0, 0, 0, 0, 0, 0, 0, 0, 
00600   0, 0, 0, 0, 0, 0, 0, 0, 
00601   0, 0, 0, 0, 0, 0, 0, 0, 
00602   0, 0, 0, 0, 0, 0, 0, 0, 
00603   0, 0, 0, 0, 1, 1, 1, 0, 
00604   0, 0, 1, 1, 0, 0, 0, 0, 
00605   1, 1, 0, 0, 0, 0, 0, 0, 
00606   0, 1, 0, 0, 0, 1, 1, 0, 
00607   0, 1, 0, 0, 1, 0, 0, 1, 
00608   0, 0, 1, 0, 0, 1, 0, 0, 
00609   0, 0, 1, 0, 1, 0, 0, 1, 
00610   0, 0, 1, 0, 0, 0, 0, 1, 
00611   0, 1, 0, 0, 0, 1, 0, 0, 
00612   1, 0, 0, 0, 0, 0, 1, 0, 
00613   0, 1, 1, 0, 0, 0, 1, 0, 
00614   0, 0, 0, 0, 1, 1, 2, 2, 
00615   1, 2, 2, 1, 0, 0, 1, 1, 
00616   0, 0, 0, 0, 1, 1, 0, 0, 
00617   0, 0, 0, 0, 0, 1, 0, 0, 
00618   0, 0, 1, 1, 0, 0, 1, 1, 
00619   0, 1, 2, 2, 2, 1, 2, 2, 
00620   1, 2, 2, 1, 0, 0, 1, 0, 
00621   0, 1, 0, 0, 1, 0, 0, 1, 
00622   0, 0, 0, 0, 1, 0, 1, 0, 
00623   0, 1, 0, 0, 1, 0, 0, 0, 
00624   0, 1, 0, 1, 0, 0, 0, 1, 
00625   0, 0, 1, 0, 0, 0, 0, 0, 
00626   1, 0, 0, 1, 1, 0, 1, 2, 
00627   2, 2, 1, 2, 2, 1, 2, 2, 
00628   1, 0, 0, 0, 1, 1, 0, 0, 
00629   1, 0, 0, 1, 0, 0, 1, 0, 
00630   0, 1, 0, 0, 1, 0, 0, 0, 
00631   0, 1, 0, 1, 0, 0, 1, 0, 
00632   0, 1, 0, 0, 0, 0, 1, 0, 
00633   1, 0, 0, 0, 1, 0, 0, 1, 
00634   0, 0, 0, 0, 0, 1, 0, 1, 
00635   2, 1, 1, 0, 0, 1, 1, 0, 
00636   0, 0, 1, 0, 0, 0, 0, 0, 
00637   1, 2, 1, 1, 2, 2, 1, 2, 
00638   2, 1, 0, 1, 2, 2, 1, 1, 
00639   0, 0, 0, 0, 0, 0, 0, 0, 
00640   0, 0, 0, 0, 0, 0, 0, 0, 
00641   0, 0, 0, 0, 0, 0, 0, 0, 
00642   0, 0, 0, 0, 0, 0, 0, 0, 
00643   0, 0, 0, 0, 0, 0, 0, 0, 
00644   0, 0, 0, 0, 0, 0, 0, 0, 
00645   0, 0, 0, 0, 0, 0, 0, 0, 
00646   0, 0, 0, 0, 0, 0, 0, 0, 
00647   0, 0, 0, 0, 0, 2, 1, 0, 
00648   0, 0, 0, 0, 0, 1, 1, 0, 
00649   0, 0, 1, 1, 0, 0, 0, 0, 
00650   1, 1, 0, 0, 0, 1, 2, 1, 
00651   0, 0, 1, 2, 2, 2, 1, 0, 
00652   1, 2, 1, 2, 2, 1, 1, 0, 
00653   0, 0, 0, 0, 0, 0, 0, 0, 
00654   0, 0, 0, 0, 0, 0, 0, 0, 
00655   0, 0, 0, 0, 0, 0, 0, 0, 
00656   0, 0, 0, 0, 0, 0, 0, 0, 
00657   0, 0, 0, 0, 0, 0, 0, 0, 
00658   0, 0, 0, 0, 0, 0, 0, 0, 
00659   0, 0, 0, 0, 0, 0, 0, 0, 
00660   0, 0, 0, 0, 0, 0, 0, 0, 
00661   0, 0, 0, 0, 1, 1, 1, 0, 
00662   0, 0, 1, 1, 0, 0, 0, 0, 
00663   1, 1, 0, 0, 0, 0, 0, 0, 
00664   0, 1, 0, 0, 0, 1, 1, 0, 
00665   0, 1, 0, 0, 1, 0, 0, 1, 
00666   0, 0, 1, 0, 0, 1, 0, 0, 
00667   0, 0, 1, 0, 1, 0, 0, 1, 
00668   0, 0, 1, 0, 0, 0, 0, 1, 
00669   0, 1, 0, 0, 0, 1, 0, 0, 
00670   1, 0, 0, 0, 0, 0, 1, 0, 
00671   0, 1, 1, 0, 0, 0, 1, 0, 
00672   0, 0, 0, 0, 1, 1, 2, 2, 
00673   1, 2, 2, 1, 0, 0, 1, 1, 
00674   0, 0, 0, 0, 1, 1, 0, 0, 
00675   0, 0, 0, 0, 0, 1, 0, 0, 
00676   0, 0, 1, 1, 0, 0, 1, 1, 
00677   0, 1, 2, 2, 1, 2, 2, 1, 
00678   2, 2, 1, 0, 0, 1, 0, 0, 
00679   1, 0, 0, 1, 0, 0, 1, 0, 
00680   0, 0, 0, 1, 0, 1, 0, 0, 
00681   1, 0, 0, 1, 0, 0, 0, 0, 
00682   1, 0, 1, 0, 0, 0, 1, 0, 
00683   0, 1, 0, 0, 0, 0, 0, 1, 
00684   0, 0, 1, 1, 0, 1, 2, 2, 
00685   1, 2, 2, 1, 2, 2, 1, 0, 
00686   0, 0, 1, 1, 0, 0, 1, 0, 
00687   0, 1, 0, 0, 1, 0, 0, 1, 
00688   0, 0, 1, 0, 0, 0, 0, 1, 
00689   0, 1, 0, 0, 1, 0, 0, 1, 
00690   0, 0, 0, 0, 1, 0, 1, 0, 
00691   0, 0, 1, 0, 0, 1, 0, 0, 
00692   0, 0, 0, 1, 0, 1, 2, 1, 
00693   1, 0, 0, 1, 1, 0, 0, 0, 
00694   1, 0, 0, 0, 0, 0, 1, 0, 
00695   0, 0, 0, 1, 0
00696 };
00697 
00698 static const short _fsm_index_offsets[] = {
00699   0, 0, 12, 23, 34, 38, 45, 49, 
00700   54, 56, 58, 61, 73, 84, 88, 95, 
00701   102, 108, 113, 119, 125, 130, 135, 140, 
00702   144, 147, 150, 156, 163, 165, 169, 172, 
00703   175, 177, 180, 182, 185, 187, 189, 191, 
00704   194, 196, 198, 200, 202, 204, 207, 209, 
00705   211, 213, 215, 217, 219, 221, 224, 226, 
00706   228, 230, 232, 234, 237, 239, 242, 244, 
00707   246, 248, 250, 253, 256, 258, 261, 263, 
00708   265, 268, 271, 273, 275, 277, 279, 281, 
00709   284, 286, 288, 290, 292, 294, 296, 298, 
00710   301, 303, 305, 307, 309, 311, 313, 316, 
00711   318, 320, 322, 324, 326, 328, 333, 337, 
00712   339, 341, 343, 345, 347, 349, 352, 356, 
00713   358, 360, 362, 365, 369, 371, 373, 375, 
00714   377, 380, 384, 386, 388, 390, 394, 399, 
00715   402, 404, 406, 409, 414, 420, 425, 429, 
00716   431, 434, 442, 453, 458, 463, 467, 470, 
00717   472, 475, 477, 480, 482, 484, 486, 489, 
00718   491, 493, 495, 497, 499, 502, 504, 506, 
00719   508, 510, 512, 514, 516, 519, 521, 523, 
00720   525, 527, 529, 532, 534, 537, 539, 541, 
00721   543, 545, 548, 551, 553, 556, 558, 560, 
00722   563, 566, 568, 570, 572, 574, 576, 579, 
00723   581, 583, 585, 587, 589, 591, 593, 596, 
00724   598, 600, 602, 604, 606, 608, 611, 613, 
00725   615, 617, 619, 621, 623, 626, 629, 632, 
00726   634, 636, 638, 641, 645, 647, 649, 651, 
00727   653, 656, 660, 662, 664, 666, 668, 670, 
00728   672, 674, 678, 680, 682, 684, 687, 695, 
00729   697, 699, 704, 706, 708, 712, 714, 716, 
00730   721, 723, 725, 729, 732, 734, 739, 741, 
00731   743, 745, 747, 751, 753, 758, 760, 762, 
00732   766, 769, 771, 776, 778, 780, 782, 784, 
00733   788, 790, 795, 797, 799, 801, 805, 807, 
00734   809, 814, 816, 818, 820, 822, 824, 828, 
00735   831, 833, 836, 840, 843, 845, 847, 851, 
00736   853, 855, 857, 859, 861, 865, 869, 874, 
00737   879, 883, 887, 891, 894, 896, 898, 901, 
00738   905, 907, 909, 911, 913, 916, 920, 922, 
00739   924, 926, 928, 930, 932, 934, 937, 939, 
00740   941, 943, 945, 948, 958, 960, 962, 966, 
00741   970, 972, 975, 981, 988, 994, 999, 1005, 
00742   1011, 1016, 1021, 1026, 1030, 1032, 1034, 1037, 
00743   1039, 1041, 1045, 1047, 1049, 1052, 1055, 1057, 
00744   1061, 1063, 1065, 1067, 1069, 1072, 1074, 1078, 
00745   1080, 1082, 1085, 1088, 1090, 1094, 1096, 1098, 
00746   1100, 1102, 1105, 1107, 1111, 1113, 1115, 1117, 
00747   1120, 1122, 1124, 1128, 1130, 1132, 1134, 1136, 
00748   1138, 1141, 1143, 1145, 1148, 1152, 1154, 1157, 
00749   1163, 1170, 1176, 1181, 1187, 1193, 1198, 1203, 
00750   1208, 1212, 1214, 1216, 1218, 1221, 1229, 1231, 
00751   1233, 1237, 1239, 1241, 1244, 1246, 1248, 1252, 
00752   1254, 1256, 1259, 1262, 1264, 1268, 1270, 1272, 
00753   1274, 1276, 1279, 1281, 1285, 1287, 1289, 1292, 
00754   1295, 1297, 1301, 1303, 1305, 1307, 1309, 1312, 
00755   1314, 1318, 1320, 1322, 1324, 1327, 1329, 1331, 
00756   1335, 1337, 1339, 1341, 1343, 1345, 1348, 1350, 
00757   1353, 1361, 1364, 1367, 1370, 1372, 1375, 1379, 
00758   1382, 1384, 1386, 1389, 1391, 1393, 1395, 1397, 
00759   1399, 1402, 1408, 1412, 1417, 1423, 1429, 1434, 
00760   1439, 1444, 1448, 1450, 1453, 1459, 1463, 1466, 
00761   1469, 1471, 1474, 1476, 1479, 1481, 1483, 1485, 
00762   1488, 1490, 1492, 1494, 1496, 1498, 1501, 1503, 
00763   1505, 1507, 1509, 1511, 1513, 1515, 1518, 1520, 
00764   1522, 1524, 1526, 1528, 1531, 1533, 1536, 1538, 
00765   1540, 1542, 1544, 1547, 1550, 1552, 1555, 1557, 
00766   1559, 1562, 1565, 1567, 1569, 1571, 1573, 1575, 
00767   1578, 1580, 1582, 1584, 1586, 1588, 1590, 1592, 
00768   1595, 1597, 1599, 1601, 1603, 1605, 1607, 1610, 
00769   1612, 1614, 1616, 1618, 1620, 1622, 1627, 1631, 
00770   1633, 1635, 1637, 1639, 1641, 1643, 1646, 1650, 
00771   1652, 1654, 1656, 1659, 1663, 1665, 1667, 1669, 
00772   1671, 1674, 1678, 1680, 1682, 1684, 1688, 1693, 
00773   1696, 1698, 1700, 1703, 1708, 1714, 1719, 1723, 
00774   1725, 1728, 1736, 1747, 1752, 1757, 1761, 1764, 
00775   1766, 1769, 1771, 1774, 1776, 1778, 1780, 1783, 
00776   1785, 1787, 1789, 1791, 1793, 1796, 1798, 1800, 
00777   1802, 1804, 1806, 1808, 1810, 1813, 1815, 1817, 
00778   1819, 1821, 1823, 1826, 1828, 1831, 1833, 1835, 
00779   1837, 1839, 1842, 1845, 1847, 1850, 1852, 1854, 
00780   1857, 1860, 1862, 1864, 1866, 1868, 1870, 1873, 
00781   1875, 1877, 1879, 1881, 1883, 1885, 1887, 1890, 
00782   1892, 1894, 1896, 1898, 1900, 1902, 1905, 1907, 
00783   1909, 1911, 1913, 1915, 1917, 1920, 1923, 1926, 
00784   1928, 1930, 1932, 1935, 1939, 1941, 1943, 1945, 
00785   1947, 1950, 1954, 1956, 1958, 1960, 1962, 1964, 
00786   1966, 1968, 1972, 1974, 1976, 1978, 1981, 1989, 
00787   1991, 1993, 1998, 2000, 2002, 2006, 2008, 2010, 
00788   2015, 2017, 2019, 2023, 2026, 2028, 2033, 2035, 
00789   2037, 2039, 2041, 2045, 2047, 2052, 2054, 2056, 
00790   2060, 2063, 2065, 2070, 2072, 2074, 2076, 2078, 
00791   2082, 2084, 2089, 2091, 2093, 2095, 2099, 2101, 
00792   2103, 2108, 2110, 2112, 2114, 2116, 2118, 2122, 
00793   2125, 2127, 2130, 2134, 2137, 2139, 2141, 2145, 
00794   2147, 2149, 2151, 2153, 2155, 2159, 2163, 2168, 
00795   2173, 2177, 2181, 2185, 2188, 2190, 2192, 2195, 
00796   2199, 2201, 2203, 2205, 2207, 2210, 2214, 2216, 
00797   2218, 2220, 2222, 2224, 2226, 2228, 2231, 2233, 
00798   2235, 2237, 2239, 2242, 2252, 2254, 2256, 2260, 
00799   2264, 2266, 2269, 2275, 2281, 2286, 2292, 2298, 
00800   2303, 2308, 2313, 2317, 2319, 2321, 2324, 2326, 
00801   2328, 2332, 2334, 2336, 2339, 2342, 2344, 2348, 
00802   2350, 2352, 2354, 2356, 2359, 2361, 2365, 2367, 
00803   2369, 2372, 2375, 2377, 2381, 2383, 2385, 2387, 
00804   2389, 2392, 2394, 2398, 2400, 2402, 2404, 2407, 
00805   2409, 2411, 2415, 2417, 2419, 2421, 2423, 2425, 
00806   2428, 2430, 2432, 2435, 2439, 2441, 2444, 2450, 
00807   2456, 2461, 2467, 2473, 2478, 2483, 2488, 2492, 
00808   2494, 2496, 2498, 2501, 2509, 2511, 2513, 2517, 
00809   2519, 2521, 2524, 2526, 2528, 2532, 2534, 2536, 
00810   2539, 2542, 2544, 2548, 2550, 2552, 2554, 2556, 
00811   2559, 2561, 2565, 2567, 2569, 2572, 2575, 2577, 
00812   2581, 2583, 2585, 2587, 2589, 2592, 2594, 2598, 
00813   2600, 2602, 2604, 2607, 2609, 2611, 2615, 2617, 
00814   2619, 2621, 2623, 2625, 2628, 2630, 2633, 2641, 
00815   2644, 2647, 2650, 2652, 2655, 2659, 2662, 2664, 
00816   2666, 2669, 2671, 2673, 2675, 2677, 2679, 2682, 
00817   2684, 2687, 2689, 2691, 2695
00818 };
00819 
00820 static const short _fsm_trans_targs_wi[] = {
00821   1, 2, 12, 129, 308, 326, 943, 462, 
00822   467, 1, 101, 0, 2, 3, 593, 772, 
00823   790, 871, 924, 929, 2, 565, 0, 4, 
00824   497, 507, 515, 523, 535, 541, 549, 556, 
00825   495, 0, 5, 5, 493, 0, 5, 6, 
00826   484, 490, 5, 481, 0, 948, 7, 7, 
00827   0, 948, 7, 8, 7, 0, 9, 0, 
00828   10, 0, 11, 11, 0, 11, 2, 12, 
00829   129, 308, 326, 409, 462, 467, 11, 101, 
00830   0, 13, 33, 43, 51, 59, 71, 77, 
00831   85, 92, 31, 0, 14, 14, 29, 0, 
00832   948, 15, 18, 28, 15, 16, 0, 948, 
00833   15, 18, 24, 15, 16, 0, 948, 7, 
00834   18, 7, 17, 0, 948, 7, 18, 7, 
00835   0, 948, 7, 21, 7, 19, 0, 948, 
00836   7, 21, 7, 20, 0, 948, 7, 21, 
00837   7, 0, 948, 7, 7, 22, 0, 948, 
00838   7, 7, 23, 0, 948, 7, 7, 0, 
00839   9, 25, 0, 26, 26, 0, 948, 27, 
00840   18, 27, 16, 0, 948, 27, 18, 8, 
00841   27, 16, 0, 25, 0, 14, 14, 30, 
00842   0, 14, 14, 0, 13, 32, 0, 13, 
00843   0, 34, 38, 0, 35, 0, 13, 36, 
00844   0, 37, 0, 13, 0, 39, 0, 13, 
00845   40, 0, 41, 0, 42, 0, 13, 0, 
00846   44, 0, 45, 0, 13, 46, 0, 47, 
00847   0, 48, 0, 49, 0, 50, 0, 13, 
00848   0, 52, 0, 53, 0, 13, 54, 0, 
00849   55, 0, 56, 0, 57, 0, 58, 0, 
00850   13, 0, 60, 66, 0, 61, 0, 13, 
00851   62, 0, 63, 0, 64, 0, 65, 0, 
00852   13, 0, 67, 69, 0, 13, 68, 0, 
00853   13, 0, 13, 70, 0, 13, 0, 72, 
00854   0, 73, 76, 0, 13, 74, 0, 75, 
00855   0, 13, 0, 13, 0, 78, 0, 79, 
00856   0, 13, 80, 0, 81, 0, 82, 0, 
00857   83, 0, 84, 0, 13, 0, 86, 0, 
00858   87, 0, 13, 88, 0, 89, 0, 90, 
00859   0, 91, 0, 13, 0, 93, 0, 94, 
00860   0, 13, 95, 0, 96, 0, 97, 0, 
00861   98, 0, 99, 0, 100, 0, 13, 0, 
00862   102, 12, 102, 126, 0, 102, 103, 102, 
00863   0, 104, 0, 105, 0, 106, 0, 107, 
00864   0, 108, 0, 109, 0, 110, 110, 0, 
00865   110, 111, 110, 0, 112, 0, 113, 0, 
00866   114, 0, 115, 115, 0, 115, 116, 115, 
00867   0, 117, 0, 118, 0, 119, 0, 120, 
00868   0, 121, 121, 0, 121, 122, 121, 0, 
00869   123, 0, 124, 0, 125, 0, 948, 7, 
00870   7, 0, 102, 12, 102, 127, 0, 12, 
00871   128, 0, 12, 0, 130, 0, 131, 131, 
00872   0, 132, 302, 132, 133, 0, 132, 302, 
00873   135, 132, 133, 0, 134, 302, 134, 301, 
00874   0, 134, 135, 134, 0, 136, 0, 137, 
00875   137, 0, 137, 138, 216, 234, 287, 137, 
00876   212, 0, 139, 144, 154, 162, 170, 182, 
00877   188, 196, 203, 142, 0, 948, 7, 7, 
00878   140, 0, 948, 7, 7, 141, 0, 948, 
00879   7, 7, 0, 139, 143, 0, 139, 0, 
00880   145, 149, 0, 146, 0, 139, 147, 0, 
00881   148, 0, 139, 0, 150, 0, 139, 151, 
00882   0, 152, 0, 153, 0, 139, 0, 155, 
00883   0, 156, 0, 139, 157, 0, 158, 0, 
00884   159, 0, 160, 0, 161, 0, 139, 0, 
00885   163, 0, 164, 0, 139, 165, 0, 166, 
00886   0, 167, 0, 168, 0, 169, 0, 139, 
00887   0, 171, 177, 0, 172, 0, 139, 173, 
00888   0, 174, 0, 175, 0, 176, 0, 139, 
00889   0, 178, 180, 0, 139, 179, 0, 139, 
00890   0, 139, 181, 0, 139, 0, 183, 0, 
00891   184, 187, 0, 139, 185, 0, 186, 0, 
00892   139, 0, 139, 0, 189, 0, 190, 0, 
00893   139, 191, 0, 192, 0, 193, 0, 194, 
00894   0, 195, 0, 139, 0, 197, 0, 198, 
00895   0, 139, 199, 0, 200, 0, 201, 0, 
00896   202, 0, 139, 0, 204, 0, 205, 0, 
00897   139, 206, 0, 207, 0, 208, 0, 209, 
00898   0, 210, 0, 211, 0, 139, 0, 138, 
00899   213, 0, 138, 214, 0, 138, 215, 0, 
00900   138, 0, 217, 0, 218, 0, 219, 219, 
00901   0, 219, 220, 219, 0, 221, 0, 222, 
00902   0, 223, 0, 224, 0, 225, 225, 0, 
00903   225, 226, 225, 0, 227, 0, 228, 0, 
00904   229, 0, 230, 0, 231, 0, 232, 0, 
00905   233, 0, 948, 7, 7, 0, 235, 0, 
00906   236, 0, 237, 0, 238, 238, 0, 238, 
00907   239, 245, 251, 264, 278, 238, 0, 240, 
00908   0, 241, 0, 948, 7, 242, 7, 0, 
00909   243, 0, 244, 0, 948, 7, 7, 0, 
00910   246, 0, 247, 0, 948, 7, 248, 7, 
00911   0, 249, 0, 250, 0, 948, 7, 7, 
00912   0, 252, 259, 0, 253, 0, 948, 7, 
00913   254, 7, 0, 255, 0, 256, 0, 257, 
00914   0, 258, 0, 948, 7, 7, 0, 260, 
00915   0, 948, 7, 261, 7, 0, 262, 0, 
00916   263, 0, 948, 7, 7, 0, 265, 272, 
00917   0, 266, 0, 948, 7, 267, 7, 0, 
00918   268, 0, 269, 0, 270, 0, 271, 0, 
00919   948, 7, 7, 0, 273, 0, 948, 7, 
00920   274, 7, 0, 275, 0, 276, 0, 277, 
00921   0, 948, 7, 7, 0, 279, 0, 280, 
00922   0, 948, 7, 281, 7, 0, 282, 0, 
00923   283, 0, 284, 0, 285, 0, 286, 0, 
00924   948, 7, 7, 0, 288, 291, 0, 289, 
00925   0, 290, 290, 0, 290, 216, 290, 0, 
00926   292, 295, 0, 293, 0, 294, 0, 948, 
00927   7, 7, 0, 296, 0, 297, 0, 298, 
00928   0, 299, 0, 300, 0, 948, 7, 7, 
00929   0, 134, 302, 134, 0, 134, 305, 134, 
00930   303, 0, 134, 305, 134, 304, 0, 134, 
00931   305, 134, 0, 134, 134, 306, 0, 134, 
00932   134, 307, 0, 134, 134, 0, 309, 0, 
00933   310, 0, 311, 311, 0, 311, 312, 311, 
00934   0, 313, 0, 314, 0, 315, 0, 316, 
00935   0, 317, 317, 0, 317, 318, 317, 0, 
00936   319, 0, 320, 0, 321, 0, 322, 0, 
00937   323, 0, 324, 0, 325, 0, 14, 14, 
00938   0, 327, 0, 328, 0, 329, 0, 330, 
00939   0, 331, 331, 0, 331, 332, 351, 357, 
00940   370, 384, 393, 122, 331, 0, 333, 0, 
00941   334, 0, 335, 348, 335, 0, 335, 336, 
00942   335, 0, 337, 0, 338, 338, 0, 948, 
00943   339, 342, 339, 340, 0, 948, 339, 342, 
00944   8, 339, 340, 0, 948, 7, 342, 7, 
00945   341, 0, 948, 7, 342, 7, 0, 948, 
00946   7, 345, 7, 343, 0, 948, 7, 345, 
00947   7, 344, 0, 948, 7, 345, 7, 0, 
00948   948, 7, 7, 346, 0, 948, 7, 7, 
00949   347, 0, 948, 7, 7, 0, 349, 0, 
00950   350, 0, 335, 335, 0, 352, 0, 353, 
00951   0, 335, 354, 335, 0, 355, 0, 356, 
00952   0, 335, 335, 0, 358, 365, 0, 359, 
00953   0, 335, 360, 335, 0, 361, 0, 362, 
00954   0, 363, 0, 364, 0, 335, 335, 0, 
00955   366, 0, 335, 367, 335, 0, 368, 0, 
00956   369, 0, 335, 335, 0, 371, 378, 0, 
00957   372, 0, 335, 373, 335, 0, 374, 0, 
00958   375, 0, 376, 0, 377, 0, 335, 335, 
00959   0, 379, 0, 335, 380, 335, 0, 381, 
00960   0, 382, 0, 383, 0, 335, 335, 0, 
00961   385, 0, 386, 0, 335, 387, 335, 0, 
00962   388, 0, 389, 0, 390, 0, 391, 0, 
00963   392, 0, 335, 335, 0, 394, 0, 395, 
00964   0, 396, 396, 0, 396, 397, 396, 0, 
00965   398, 0, 399, 399, 0, 948, 400, 403, 
00966   400, 401, 0, 948, 400, 403, 8, 400, 
00967   401, 0, 948, 7, 403, 7, 402, 0, 
00968   948, 7, 403, 7, 0, 948, 7, 406, 
00969   7, 404, 0, 948, 7, 406, 7, 405, 
00970   0, 948, 7, 406, 7, 0, 948, 7, 
00971   7, 407, 0, 948, 7, 7, 408, 0, 
00972   948, 7, 7, 0, 410, 0, 411, 0, 
00973   412, 0, 413, 413, 0, 413, 414, 420, 
00974   426, 439, 453, 413, 0, 415, 0, 416, 
00975   0, 14, 417, 14, 0, 418, 0, 419, 
00976   0, 14, 14, 0, 421, 0, 422, 0, 
00977   14, 423, 14, 0, 424, 0, 425, 0, 
00978   14, 14, 0, 427, 434, 0, 428, 0, 
00979   14, 429, 14, 0, 430, 0, 431, 0, 
00980   432, 0, 433, 0, 14, 14, 0, 435, 
00981   0, 14, 436, 14, 0, 437, 0, 438, 
00982   0, 14, 14, 0, 440, 447, 0, 441, 
00983   0, 14, 442, 14, 0, 443, 0, 444, 
00984   0, 445, 0, 446, 0, 14, 14, 0, 
00985   448, 0, 14, 449, 14, 0, 450, 0, 
00986   451, 0, 452, 0, 14, 14, 0, 454, 
00987   0, 455, 0, 14, 456, 14, 0, 457, 
00988   0, 458, 0, 459, 0, 460, 0, 461, 
00989   0, 14, 14, 0, 463, 0, 464, 464, 
00990   0, 464, 12, 308, 409, 467, 464, 465, 
00991   0, 12, 466, 0, 12, 127, 0, 468, 
00992   471, 0, 469, 0, 470, 470, 0, 470, 
00993   308, 470, 0, 472, 475, 0, 473, 0, 
00994   474, 0, 14, 14, 0, 476, 0, 477, 
00995   0, 478, 0, 479, 0, 480, 0, 14, 
00996   14, 0, 482, 6, 484, 482, 483, 0, 
00997   482, 6, 482, 0, 482, 6, 484, 482, 
00998   0, 482, 6, 487, 482, 485, 0, 482, 
00999   6, 487, 482, 486, 0, 482, 6, 487, 
01000   482, 0, 482, 6, 482, 488, 0, 482, 
01001   6, 482, 489, 0, 482, 6, 482, 0, 
01002   491, 0, 492, 492, 0, 492, 6, 484, 
01003   492, 481, 0, 5, 5, 494, 0, 5, 
01004   5, 0, 4, 496, 0, 4, 0, 498, 
01005   502, 0, 499, 0, 4, 500, 0, 501, 
01006   0, 4, 0, 503, 0, 4, 504, 0, 
01007   505, 0, 506, 0, 4, 0, 508, 0, 
01008   509, 0, 4, 510, 0, 511, 0, 512, 
01009   0, 513, 0, 514, 0, 4, 0, 516, 
01010   0, 517, 0, 4, 518, 0, 519, 0, 
01011   520, 0, 521, 0, 522, 0, 4, 0, 
01012   524, 530, 0, 525, 0, 4, 526, 0, 
01013   527, 0, 528, 0, 529, 0, 4, 0, 
01014   531, 533, 0, 4, 532, 0, 4, 0, 
01015   4, 534, 0, 4, 0, 536, 0, 537, 
01016   540, 0, 4, 538, 0, 539, 0, 4, 
01017   0, 4, 0, 542, 0, 543, 0, 4, 
01018   544, 0, 545, 0, 546, 0, 547, 0, 
01019   548, 0, 4, 0, 550, 0, 551, 0, 
01020   4, 552, 0, 553, 0, 554, 0, 555, 
01021   0, 4, 0, 557, 0, 558, 0, 4, 
01022   559, 0, 560, 0, 561, 0, 562, 0, 
01023   563, 0, 564, 0, 4, 0, 566, 3, 
01024   566, 590, 0, 566, 567, 566, 0, 568, 
01025   0, 569, 0, 570, 0, 571, 0, 572, 
01026   0, 573, 0, 574, 574, 0, 574, 575, 
01027   574, 0, 576, 0, 577, 0, 578, 0, 
01028   579, 579, 0, 579, 580, 579, 0, 581, 
01029   0, 582, 0, 583, 0, 584, 0, 585, 
01030   585, 0, 585, 586, 585, 0, 587, 0, 
01031   588, 0, 589, 0, 482, 6, 482, 0, 
01032   566, 3, 566, 591, 0, 3, 592, 0, 
01033   3, 0, 594, 0, 595, 595, 0, 596, 
01034   766, 596, 597, 0, 596, 766, 599, 596, 
01035   597, 0, 598, 766, 598, 765, 0, 598, 
01036   599, 598, 0, 600, 0, 601, 601, 0, 
01037   601, 602, 680, 698, 751, 601, 676, 0, 
01038   603, 608, 618, 626, 634, 646, 652, 660, 
01039   667, 606, 0, 482, 6, 482, 604, 0, 
01040   482, 6, 482, 605, 0, 482, 6, 482, 
01041   0, 603, 607, 0, 603, 0, 609, 613, 
01042   0, 610, 0, 603, 611, 0, 612, 0, 
01043   603, 0, 614, 0, 603, 615, 0, 616, 
01044   0, 617, 0, 603, 0, 619, 0, 620, 
01045   0, 603, 621, 0, 622, 0, 623, 0, 
01046   624, 0, 625, 0, 603, 0, 627, 0, 
01047   628, 0, 603, 629, 0, 630, 0, 631, 
01048   0, 632, 0, 633, 0, 603, 0, 635, 
01049   641, 0, 636, 0, 603, 637, 0, 638, 
01050   0, 639, 0, 640, 0, 603, 0, 642, 
01051   644, 0, 603, 643, 0, 603, 0, 603, 
01052   645, 0, 603, 0, 647, 0, 648, 651, 
01053   0, 603, 649, 0, 650, 0, 603, 0, 
01054   603, 0, 653, 0, 654, 0, 603, 655, 
01055   0, 656, 0, 657, 0, 658, 0, 659, 
01056   0, 603, 0, 661, 0, 662, 0, 603, 
01057   663, 0, 664, 0, 665, 0, 666, 0, 
01058   603, 0, 668, 0, 669, 0, 603, 670, 
01059   0, 671, 0, 672, 0, 673, 0, 674, 
01060   0, 675, 0, 603, 0, 602, 677, 0, 
01061   602, 678, 0, 602, 679, 0, 602, 0, 
01062   681, 0, 682, 0, 683, 683, 0, 683, 
01063   684, 683, 0, 685, 0, 686, 0, 687, 
01064   0, 688, 0, 689, 689, 0, 689, 690, 
01065   689, 0, 691, 0, 692, 0, 693, 0, 
01066   694, 0, 695, 0, 696, 0, 697, 0, 
01067   482, 6, 482, 0, 699, 0, 700, 0, 
01068   701, 0, 702, 702, 0, 702, 703, 709, 
01069   715, 728, 742, 702, 0, 704, 0, 705, 
01070   0, 482, 6, 706, 482, 0, 707, 0, 
01071   708, 0, 482, 6, 482, 0, 710, 0, 
01072   711, 0, 482, 6, 712, 482, 0, 713, 
01073   0, 714, 0, 482, 6, 482, 0, 716, 
01074   723, 0, 717, 0, 482, 6, 718, 482, 
01075   0, 719, 0, 720, 0, 721, 0, 722, 
01076   0, 482, 6, 482, 0, 724, 0, 482, 
01077   6, 725, 482, 0, 726, 0, 727, 0, 
01078   482, 6, 482, 0, 729, 736, 0, 730, 
01079   0, 482, 6, 731, 482, 0, 732, 0, 
01080   733, 0, 734, 0, 735, 0, 482, 6, 
01081   482, 0, 737, 0, 482, 6, 738, 482, 
01082   0, 739, 0, 740, 0, 741, 0, 482, 
01083   6, 482, 0, 743, 0, 744, 0, 482, 
01084   6, 745, 482, 0, 746, 0, 747, 0, 
01085   748, 0, 749, 0, 750, 0, 482, 6, 
01086   482, 0, 752, 755, 0, 753, 0, 754, 
01087   754, 0, 754, 680, 754, 0, 756, 759, 
01088   0, 757, 0, 758, 0, 482, 6, 482, 
01089   0, 760, 0, 761, 0, 762, 0, 763, 
01090   0, 764, 0, 482, 6, 482, 0, 598, 
01091   766, 598, 0, 598, 769, 598, 767, 0, 
01092   598, 769, 598, 768, 0, 598, 769, 598, 
01093   0, 598, 598, 770, 0, 598, 598, 771, 
01094   0, 598, 598, 0, 773, 0, 774, 0, 
01095   775, 775, 0, 775, 776, 775, 0, 777, 
01096   0, 778, 0, 779, 0, 780, 0, 781, 
01097   781, 0, 781, 782, 781, 0, 783, 0, 
01098   784, 0, 785, 0, 786, 0, 787, 0, 
01099   788, 0, 789, 0, 5, 5, 0, 791, 
01100   0, 792, 0, 793, 0, 794, 0, 795, 
01101   795, 0, 795, 796, 814, 820, 833, 847, 
01102   856, 586, 795, 0, 797, 0, 798, 0, 
01103   799, 811, 799, 0, 799, 800, 799, 0, 
01104   801, 0, 802, 802, 0, 802, 6, 805, 
01105   802, 803, 0, 482, 6, 805, 482, 804, 
01106   0, 482, 6, 805, 482, 0, 482, 6, 
01107   808, 482, 806, 0, 482, 6, 808, 482, 
01108   807, 0, 482, 6, 808, 482, 0, 482, 
01109   6, 482, 809, 0, 482, 6, 482, 810, 
01110   0, 482, 6, 482, 0, 812, 0, 813, 
01111   0, 799, 799, 0, 815, 0, 816, 0, 
01112   799, 817, 799, 0, 818, 0, 819, 0, 
01113   799, 799, 0, 821, 828, 0, 822, 0, 
01114   799, 823, 799, 0, 824, 0, 825, 0, 
01115   826, 0, 827, 0, 799, 799, 0, 829, 
01116   0, 799, 830, 799, 0, 831, 0, 832, 
01117   0, 799, 799, 0, 834, 841, 0, 835, 
01118   0, 799, 836, 799, 0, 837, 0, 838, 
01119   0, 839, 0, 840, 0, 799, 799, 0, 
01120   842, 0, 799, 843, 799, 0, 844, 0, 
01121   845, 0, 846, 0, 799, 799, 0, 848, 
01122   0, 849, 0, 799, 850, 799, 0, 851, 
01123   0, 852, 0, 853, 0, 854, 0, 855, 
01124   0, 799, 799, 0, 857, 0, 858, 0, 
01125   859, 859, 0, 859, 860, 859, 0, 861, 
01126   0, 862, 862, 0, 862, 6, 865, 862, 
01127   863, 0, 482, 6, 865, 482, 864, 0, 
01128   482, 6, 865, 482, 0, 482, 6, 868, 
01129   482, 866, 0, 482, 6, 868, 482, 867, 
01130   0, 482, 6, 868, 482, 0, 482, 6, 
01131   482, 869, 0, 482, 6, 482, 870, 0, 
01132   482, 6, 482, 0, 872, 0, 873, 0, 
01133   874, 0, 875, 875, 0, 875, 876, 882, 
01134   888, 901, 915, 875, 0, 877, 0, 878, 
01135   0, 5, 879, 5, 0, 880, 0, 881, 
01136   0, 5, 5, 0, 883, 0, 884, 0, 
01137   5, 885, 5, 0, 886, 0, 887, 0, 
01138   5, 5, 0, 889, 896, 0, 890, 0, 
01139   5, 891, 5, 0, 892, 0, 893, 0, 
01140   894, 0, 895, 0, 5, 5, 0, 897, 
01141   0, 5, 898, 5, 0, 899, 0, 900, 
01142   0, 5, 5, 0, 902, 909, 0, 903, 
01143   0, 5, 904, 5, 0, 905, 0, 906, 
01144   0, 907, 0, 908, 0, 5, 5, 0, 
01145   910, 0, 5, 911, 5, 0, 912, 0, 
01146   913, 0, 914, 0, 5, 5, 0, 916, 
01147   0, 917, 0, 5, 918, 5, 0, 919, 
01148   0, 920, 0, 921, 0, 922, 0, 923, 
01149   0, 5, 5, 0, 925, 0, 926, 926, 
01150   0, 926, 3, 772, 871, 929, 926, 927, 
01151   0, 3, 928, 0, 3, 591, 0, 930, 
01152   933, 0, 931, 0, 932, 932, 0, 932, 
01153   772, 932, 0, 934, 937, 0, 935, 0, 
01154   936, 0, 5, 5, 0, 938, 0, 939, 
01155   0, 940, 0, 941, 0, 942, 0, 5, 
01156   5, 0, 944, 0, 945, 411, 0, 946, 
01157   0, 947, 0, 948, 947, 947, 0, 0, 
01158   0
01159 };
01160 
01161 static const unsigned char _fsm_trans_actions_wi[] = {
01162   0, 0, 91, 0, 0, 47, 0, 0, 
01163   0, 0, 88, 0, 0, 91, 0, 0, 
01164   47, 0, 0, 0, 0, 88, 0, 94, 
01165   0, 0, 0, 0, 0, 0, 0, 0, 
01166   39, 0, 97, 97, 39, 0, 215, 215, 
01167   191, 0, 215, 109, 0, 0, 0, 0, 
01168   0, 0, 0, 0, 0, 0, 0, 0, 
01169   0, 0, 0, 0, 0, 0, 0, 91, 
01170   0, 0, 47, 0, 0, 0, 0, 88, 
01171   0, 94, 0, 0, 0, 0, 0, 0, 
01172   0, 0, 39, 0, 97, 97, 39, 0, 
01173   215, 215, 191, 0, 215, 109, 0, 215, 
01174   215, 191, 0, 215, 109, 0, 100, 100, 
01175   41, 100, 0, 0, 100, 100, 41, 100, 
01176   0, 155, 155, 82, 155, 39, 0, 103, 
01177   103, 43, 103, 0, 0, 103, 103, 43, 
01178   103, 0, 159, 159, 159, 39, 0, 106, 
01179   106, 106, 0, 0, 106, 106, 106, 0, 
01180   0, 0, 0, 0, 0, 0, 215, 215, 
01181   191, 215, 109, 0, 215, 215, 191, 0, 
01182   215, 109, 0, 0, 0, 59, 59, 0, 
01183   0, 59, 59, 0, 57, 0, 0, 57, 
01184   0, 0, 0, 0, 0, 0, 21, 0, 
01185   0, 0, 0, 21, 0, 0, 0, 29, 
01186   0, 0, 0, 0, 0, 0, 29, 0, 
01187   0, 0, 0, 0, 37, 0, 0, 0, 
01188   0, 0, 0, 0, 0, 0, 0, 37, 
01189   0, 0, 0, 0, 0, 17, 0, 0, 
01190   0, 0, 0, 0, 0, 0, 0, 0, 
01191   17, 0, 0, 0, 0, 0, 0, 15, 
01192   0, 0, 0, 0, 0, 0, 0, 0, 
01193   15, 0, 0, 0, 0, 27, 0, 0, 
01194   27, 0, 25, 0, 0, 25, 0, 0, 
01195   0, 0, 0, 0, 19, 0, 0, 0, 
01196   0, 19, 0, 23, 0, 0, 0, 0, 
01197   0, 35, 0, 0, 0, 0, 0, 0, 
01198   0, 0, 0, 0, 35, 0, 0, 0, 
01199   0, 0, 33, 0, 0, 0, 0, 0, 
01200   0, 0, 0, 33, 0, 0, 0, 0, 
01201   0, 31, 0, 0, 0, 0, 0, 0, 
01202   0, 0, 0, 0, 0, 0, 31, 0, 
01203   43, 55, 43, 0, 0, 0, 0, 0, 
01204   0, 0, 0, 0, 0, 0, 0, 0, 
01205   0, 0, 0, 0, 0, 0, 0, 0, 
01206   0, 0, 0, 0, 0, 0, 0, 0, 
01207   0, 0, 0, 0, 0, 0, 0, 0, 
01208   0, 0, 0, 0, 0, 0, 0, 0, 
01209   0, 0, 0, 0, 0, 0, 0, 0, 
01210   0, 0, 0, 0, 0, 0, 124, 124, 
01211   124, 0, 43, 55, 43, 0, 0, 55, 
01212   0, 0, 55, 0, 0, 0, 0, 0, 
01213   0, 191, 191, 191, 109, 0, 191, 191, 
01214   0, 191, 109, 0, 41, 41, 41, 0, 
01215   0, 0, 0, 0, 0, 0, 0, 0, 
01216   0, 0, 0, 91, 0, 0, 0, 0, 
01217   39, 0, 94, 0, 0, 0, 0, 0, 
01218   0, 0, 0, 39, 0, 163, 163, 163, 
01219   39, 0, 121, 121, 121, 0, 0, 121, 
01220   121, 121, 0, 57, 0, 0, 57, 0, 
01221   0, 0, 0, 0, 0, 21, 0, 0, 
01222   0, 0, 21, 0, 0, 0, 29, 0, 
01223   0, 0, 0, 0, 0, 29, 0, 0, 
01224   0, 0, 0, 37, 0, 0, 0, 0, 
01225   0, 0, 0, 0, 0, 0, 37, 0, 
01226   0, 0, 0, 0, 17, 0, 0, 0, 
01227   0, 0, 0, 0, 0, 0, 0, 17, 
01228   0, 0, 0, 0, 0, 0, 15, 0, 
01229   0, 0, 0, 0, 0, 0, 0, 15, 
01230   0, 0, 0, 0, 27, 0, 0, 27, 
01231   0, 25, 0, 0, 25, 0, 0, 0, 
01232   0, 0, 0, 19, 0, 0, 0, 0, 
01233   19, 0, 23, 0, 0, 0, 0, 0, 
01234   35, 0, 0, 0, 0, 0, 0, 0, 
01235   0, 0, 0, 35, 0, 0, 0, 0, 
01236   0, 33, 0, 0, 0, 0, 0, 0, 
01237   0, 0, 33, 0, 0, 0, 0, 0, 
01238   31, 0, 0, 0, 0, 0, 0, 0, 
01239   0, 0, 0, 0, 0, 31, 0, 55, 
01240   0, 0, 55, 0, 0, 55, 0, 0, 
01241   55, 0, 0, 0, 0, 0, 0, 0, 
01242   0, 0, 0, 0, 0, 0, 0, 0, 
01243   0, 0, 0, 0, 0, 0, 0, 0, 
01244   0, 0, 0, 0, 0, 0, 0, 0, 
01245   0, 0, 0, 0, 0, 0, 0, 0, 
01246   0, 0, 118, 118, 118, 0, 0, 0, 
01247   0, 0, 0, 0, 0, 0, 0, 0, 
01248   0, 0, 0, 0, 0, 0, 0, 0, 
01249   0, 0, 0, 143, 143, 0, 143, 0, 
01250   0, 0, 0, 0, 143, 143, 143, 0, 
01251   0, 0, 0, 0, 127, 127, 0, 127, 
01252   0, 0, 0, 0, 0, 127, 127, 127, 
01253   0, 0, 0, 0, 0, 0, 147, 147, 
01254   0, 147, 0, 0, 0, 0, 0, 0, 
01255   0, 0, 0, 147, 147, 147, 0, 0, 
01256   0, 151, 151, 0, 151, 0, 0, 0, 
01257   0, 0, 151, 151, 151, 0, 0, 0, 
01258   0, 0, 0, 139, 139, 0, 139, 0, 
01259   0, 0, 0, 0, 0, 0, 0, 0, 
01260   139, 139, 139, 0, 0, 0, 131, 131, 
01261   0, 131, 0, 0, 0, 0, 0, 0, 
01262   0, 131, 131, 131, 0, 0, 0, 0, 
01263   0, 135, 135, 0, 135, 0, 0, 0, 
01264   0, 0, 0, 0, 0, 0, 0, 0, 
01265   135, 135, 135, 0, 0, 0, 0, 0, 
01266   0, 0, 0, 0, 0, 0, 0, 0, 
01267   0, 0, 0, 0, 0, 0, 0, 112, 
01268   112, 112, 0, 0, 0, 0, 0, 0, 
01269   0, 0, 0, 0, 0, 115, 115, 115, 
01270   0, 41, 41, 41, 0, 82, 82, 82, 
01271   39, 0, 43, 43, 43, 0, 0, 43, 
01272   43, 43, 0, 85, 85, 39, 0, 45, 
01273   45, 0, 0, 45, 45, 0, 0, 0, 
01274   0, 0, 0, 0, 0, 0, 0, 0, 
01275   0, 0, 0, 0, 0, 0, 0, 0, 
01276   0, 0, 0, 0, 0, 0, 0, 0, 
01277   0, 0, 0, 0, 0, 0, 0, 0, 
01278   0, 0, 0, 0, 0, 0, 53, 53, 
01279   0, 0, 0, 0, 0, 0, 0, 0, 
01280   0, 0, 0, 0, 0, 0, 0, 0, 
01281   0, 0, 0, 0, 0, 0, 0, 0, 
01282   0, 0, 9, 0, 9, 0, 0, 0, 
01283   0, 0, 0, 0, 0, 0, 0, 226, 
01284   226, 191, 226, 109, 0, 226, 226, 191, 
01285   0, 226, 109, 0, 171, 171, 41, 171, 
01286   0, 0, 171, 171, 41, 171, 0, 200, 
01287   200, 82, 200, 39, 0, 179, 179, 43, 
01288   179, 0, 0, 179, 179, 43, 179, 0, 
01289   210, 210, 210, 39, 0, 187, 187, 187, 
01290   0, 0, 187, 187, 187, 0, 0, 0, 
01291   0, 0, 9, 9, 0, 0, 0, 0, 
01292   0, 1, 0, 1, 0, 0, 0, 0, 
01293   0, 1, 1, 0, 0, 0, 0, 0, 
01294   0, 11, 0, 11, 0, 0, 0, 0, 
01295   0, 0, 0, 0, 0, 11, 11, 0, 
01296   0, 0, 13, 0, 13, 0, 0, 0, 
01297   0, 0, 13, 13, 0, 0, 0, 0, 
01298   0, 0, 7, 0, 7, 0, 0, 0, 
01299   0, 0, 0, 0, 0, 0, 7, 7, 
01300   0, 0, 0, 3, 0, 3, 0, 0, 
01301   0, 0, 0, 0, 0, 3, 3, 0, 
01302   0, 0, 0, 0, 5, 0, 5, 0, 
01303   0, 0, 0, 0, 0, 0, 0, 0, 
01304   0, 0, 5, 5, 0, 0, 0, 0, 
01305   0, 0, 0, 0, 0, 0, 0, 0, 
01306   0, 0, 0, 0, 0, 220, 220, 191, 
01307   220, 109, 0, 220, 220, 191, 0, 220, 
01308   109, 0, 167, 167, 41, 167, 0, 0, 
01309   167, 167, 41, 167, 0, 195, 195, 82, 
01310   195, 39, 0, 175, 175, 43, 175, 0, 
01311   0, 175, 175, 43, 175, 0, 205, 205, 
01312   205, 39, 0, 183, 183, 183, 0, 0, 
01313   183, 183, 183, 0, 0, 0, 0, 0, 
01314   0, 0, 0, 0, 0, 0, 0, 0, 
01315   0, 0, 0, 0, 0, 0, 0, 0, 
01316   0, 73, 0, 73, 0, 0, 0, 0, 
01317   0, 73, 73, 0, 0, 0, 0, 0, 
01318   61, 0, 61, 0, 0, 0, 0, 0, 
01319   61, 61, 0, 0, 0, 0, 0, 0, 
01320   76, 0, 76, 0, 0, 0, 0, 0, 
01321   0, 0, 0, 0, 76, 76, 0, 0, 
01322   0, 79, 0, 79, 0, 0, 0, 0, 
01323   0, 79, 79, 0, 0, 0, 0, 0, 
01324   0, 70, 0, 70, 0, 0, 0, 0, 
01325   0, 0, 0, 0, 0, 70, 70, 0, 
01326   0, 0, 64, 0, 64, 0, 0, 0, 
01327   0, 0, 0, 0, 64, 64, 0, 0, 
01328   0, 0, 0, 67, 0, 67, 0, 0, 
01329   0, 0, 0, 0, 0, 0, 0, 0, 
01330   0, 67, 67, 0, 0, 0, 0, 0, 
01331   0, 0, 91, 0, 0, 0, 0, 39, 
01332   0, 55, 0, 0, 55, 0, 0, 0, 
01333   0, 0, 0, 0, 0, 0, 0, 0, 
01334   0, 0, 0, 0, 0, 0, 0, 0, 
01335   0, 0, 49, 49, 0, 0, 0, 0, 
01336   0, 0, 0, 0, 0, 0, 0, 51, 
01337   51, 0, 100, 100, 41, 100, 0, 0, 
01338   0, 0, 0, 0, 100, 100, 41, 100, 
01339   0, 155, 155, 82, 155, 39, 0, 103, 
01340   103, 43, 103, 0, 0, 103, 103, 43, 
01341   103, 0, 159, 159, 159, 39, 0, 106, 
01342   106, 106, 0, 0, 106, 106, 106, 0, 
01343   0, 0, 0, 0, 0, 215, 215, 191, 
01344   215, 109, 0, 59, 59, 0, 0, 59, 
01345   59, 0, 57, 0, 0, 57, 0, 0, 
01346   0, 0, 0, 0, 21, 0, 0, 0, 
01347   0, 21, 0, 0, 0, 29, 0, 0, 
01348   0, 0, 0, 0, 29, 0, 0, 0, 
01349   0, 0, 37, 0, 0, 0, 0, 0, 
01350   0, 0, 0, 0, 0, 37, 0, 0, 
01351   0, 0, 0, 17, 0, 0, 0, 0, 
01352   0, 0, 0, 0, 0, 0, 17, 0, 
01353   0, 0, 0, 0, 0, 15, 0, 0, 
01354   0, 0, 0, 0, 0, 0, 15, 0, 
01355   0, 0, 0, 27, 0, 0, 27, 0, 
01356   25, 0, 0, 25, 0, 0, 0, 0, 
01357   0, 0, 19, 0, 0, 0, 0, 19, 
01358   0, 23, 0, 0, 0, 0, 0, 35, 
01359   0, 0, 0, 0, 0, 0, 0, 0, 
01360   0, 0, 35, 0, 0, 0, 0, 0, 
01361   33, 0, 0, 0, 0, 0, 0, 0, 
01362   0, 33, 0, 0, 0, 0, 0, 31, 
01363   0, 0, 0, 0, 0, 0, 0, 0, 
01364   0, 0, 0, 0, 31, 0, 43, 55, 
01365   43, 0, 0, 0, 0, 0, 0, 0, 
01366   0, 0, 0, 0, 0, 0, 0, 0, 
01367   0, 0, 0, 0, 0, 0, 0, 0, 
01368   0, 0, 0, 0, 0, 0, 0, 0, 
01369   0, 0, 0, 0, 0, 0, 0, 0, 
01370   0, 0, 0, 0, 0, 0, 0, 0, 
01371   0, 0, 0, 0, 0, 0, 0, 0, 
01372   0, 0, 0, 0, 124, 124, 124, 0, 
01373   43, 55, 43, 0, 0, 55, 0, 0, 
01374   55, 0, 0, 0, 0, 0, 0, 191, 
01375   191, 191, 109, 0, 191, 191, 0, 191, 
01376   109, 0, 41, 41, 41, 0, 0, 0, 
01377   0, 0, 0, 0, 0, 0, 0, 0, 
01378   0, 91, 0, 0, 0, 0, 39, 0, 
01379   94, 0, 0, 0, 0, 0, 0, 0, 
01380   0, 39, 0, 163, 163, 163, 39, 0, 
01381   121, 121, 121, 0, 0, 121, 121, 121, 
01382   0, 57, 0, 0, 57, 0, 0, 0, 
01383   0, 0, 0, 21, 0, 0, 0, 0, 
01384   21, 0, 0, 0, 29, 0, 0, 0, 
01385   0, 0, 0, 29, 0, 0, 0, 0, 
01386   0, 37, 0, 0, 0, 0, 0, 0, 
01387   0, 0, 0, 0, 37, 0, 0, 0, 
01388   0, 0, 17, 0, 0, 0, 0, 0, 
01389   0, 0, 0, 0, 0, 17, 0, 0, 
01390   0, 0, 0, 0, 15, 0, 0, 0, 
01391   0, 0, 0, 0, 0, 15, 0, 0, 
01392   0, 0, 27, 0, 0, 27, 0, 25, 
01393   0, 0, 25, 0, 0, 0, 0, 0, 
01394   0, 19, 0, 0, 0, 0, 19, 0, 
01395   23, 0, 0, 0, 0, 0, 35, 0, 
01396   0, 0, 0, 0, 0, 0, 0, 0, 
01397   0, 35, 0, 0, 0, 0, 0, 33, 
01398   0, 0, 0, 0, 0, 0, 0, 0, 
01399   33, 0, 0, 0, 0, 0, 31, 0, 
01400   0, 0, 0, 0, 0, 0, 0, 0, 
01401   0, 0, 0, 31, 0, 55, 0, 0, 
01402   55, 0, 0, 55, 0, 0, 55, 0, 
01403   0, 0, 0, 0, 0, 0, 0, 0, 
01404   0, 0, 0, 0, 0, 0, 0, 0, 
01405   0, 0, 0, 0, 0, 0, 0, 0, 
01406   0, 0, 0, 0, 0, 0, 0, 0, 
01407   0, 0, 0, 0, 0, 0, 0, 0, 
01408   118, 118, 118, 0, 0, 0, 0, 0, 
01409   0, 0, 0, 0, 0, 0, 0, 0, 
01410   0, 0, 0, 0, 0, 0, 0, 0, 
01411   0, 143, 143, 0, 143, 0, 0, 0, 
01412   0, 0, 143, 143, 143, 0, 0, 0, 
01413   0, 0, 127, 127, 0, 127, 0, 0, 
01414   0, 0, 0, 127, 127, 127, 0, 0, 
01415   0, 0, 0, 0, 147, 147, 0, 147, 
01416   0, 0, 0, 0, 0, 0, 0, 0, 
01417   0, 147, 147, 147, 0, 0, 0, 151, 
01418   151, 0, 151, 0, 0, 0, 0, 0, 
01419   151, 151, 151, 0, 0, 0, 0, 0, 
01420   0, 139, 139, 0, 139, 0, 0, 0, 
01421   0, 0, 0, 0, 0, 0, 139, 139, 
01422   139, 0, 0, 0, 131, 131, 0, 131, 
01423   0, 0, 0, 0, 0, 0, 0, 131, 
01424   131, 131, 0, 0, 0, 0, 0, 135, 
01425   135, 0, 135, 0, 0, 0, 0, 0, 
01426   0, 0, 0, 0, 0, 0, 135, 135, 
01427   135, 0, 0, 0, 0, 0, 0, 0, 
01428   0, 0, 0, 0, 0, 0, 0, 0, 
01429   0, 0, 0, 0, 0, 112, 112, 112, 
01430   0, 0, 0, 0, 0, 0, 0, 0, 
01431   0, 0, 0, 115, 115, 115, 0, 41, 
01432   41, 41, 0, 82, 82, 82, 39, 0, 
01433   43, 43, 43, 0, 0, 43, 43, 43, 
01434   0, 85, 85, 39, 0, 45, 45, 0, 
01435   0, 45, 45, 0, 0, 0, 0, 0, 
01436   0, 0, 0, 0, 0, 0, 0, 0, 
01437   0, 0, 0, 0, 0, 0, 0, 0, 
01438   0, 0, 0, 0, 0, 0, 0, 0, 
01439   0, 0, 0, 0, 0, 0, 0, 0, 
01440   0, 0, 0, 0, 53, 53, 0, 0, 
01441   0, 0, 0, 0, 0, 0, 0, 0, 
01442   0, 0, 0, 0, 0, 0, 0, 0, 
01443   0, 0, 0, 0, 0, 0, 0, 0, 
01444   9, 0, 9, 0, 0, 0, 0, 0, 
01445   0, 0, 0, 0, 0, 226, 226, 191, 
01446   226, 109, 0, 171, 171, 41, 171, 0, 
01447   0, 171, 171, 41, 171, 0, 200, 200, 
01448   82, 200, 39, 0, 179, 179, 43, 179, 
01449   0, 0, 179, 179, 43, 179, 0, 210, 
01450   210, 210, 39, 0, 187, 187, 187, 0, 
01451   0, 187, 187, 187, 0, 0, 0, 0, 
01452   0, 9, 9, 0, 0, 0, 0, 0, 
01453   1, 0, 1, 0, 0, 0, 0, 0, 
01454   1, 1, 0, 0, 0, 0, 0, 0, 
01455   11, 0, 11, 0, 0, 0, 0, 0, 
01456   0, 0, 0, 0, 11, 11, 0, 0, 
01457   0, 13, 0, 13, 0, 0, 0, 0, 
01458   0, 13, 13, 0, 0, 0, 0, 0, 
01459   0, 7, 0, 7, 0, 0, 0, 0, 
01460   0, 0, 0, 0, 0, 7, 7, 0, 
01461   0, 0, 3, 0, 3, 0, 0, 0, 
01462   0, 0, 0, 0, 3, 3, 0, 0, 
01463   0, 0, 0, 5, 0, 5, 0, 0, 
01464   0, 0, 0, 0, 0, 0, 0, 0, 
01465   0, 5, 5, 0, 0, 0, 0, 0, 
01466   0, 0, 0, 0, 0, 0, 0, 0, 
01467   0, 0, 0, 0, 220, 220, 191, 220, 
01468   109, 0, 167, 167, 41, 167, 0, 0, 
01469   167, 167, 41, 167, 0, 195, 195, 82, 
01470   195, 39, 0, 175, 175, 43, 175, 0, 
01471   0, 175, 175, 43, 175, 0, 205, 205, 
01472   205, 39, 0, 183, 183, 183, 0, 0, 
01473   183, 183, 183, 0, 0, 0, 0, 0, 
01474   0, 0, 0, 0, 0, 0, 0, 0, 
01475   0, 0, 0, 0, 0, 0, 0, 0, 
01476   0, 73, 0, 73, 0, 0, 0, 0, 
01477   0, 73, 73, 0, 0, 0, 0, 0, 
01478   61, 0, 61, 0, 0, 0, 0, 0, 
01479   61, 61, 0, 0, 0, 0, 0, 0, 
01480   76, 0, 76, 0, 0, 0, 0, 0, 
01481   0, 0, 0, 0, 76, 76, 0, 0, 
01482   0, 79, 0, 79, 0, 0, 0, 0, 
01483   0, 79, 79, 0, 0, 0, 0, 0, 
01484   0, 70, 0, 70, 0, 0, 0, 0, 
01485   0, 0, 0, 0, 0, 70, 70, 0, 
01486   0, 0, 64, 0, 64, 0, 0, 0, 
01487   0, 0, 0, 0, 64, 64, 0, 0, 
01488   0, 0, 0, 67, 0, 67, 0, 0, 
01489   0, 0, 0, 0, 0, 0, 0, 0, 
01490   0, 67, 67, 0, 0, 0, 0, 0, 
01491   0, 0, 91, 0, 0, 0, 0, 39, 
01492   0, 55, 0, 0, 55, 0, 0, 0, 
01493   0, 0, 0, 0, 0, 0, 0, 0, 
01494   0, 0, 0, 0, 0, 0, 0, 0, 
01495   0, 0, 49, 49, 0, 0, 0, 0, 
01496   0, 0, 0, 0, 0, 0, 0, 51, 
01497   51, 0, 0, 0, 0, 0, 0, 0, 
01498   0, 0, 0, 0, 0, 0, 0, 0, 
01499   0
01500 };
01501 
01502 static const int fsm_start = 1;
01503 static const int fsm_first_final = 948;
01504 static const int fsm_error = 0;
01505 
01506 static const int fsm_en_main = 1;
01507 
01508 #line 100 "moment_parser.rl"
01509 
01510 // Resolves the next moment defined by expression "s" that is "now" or
01511 // greater; relative expressions are interpreted relative to "ctx".
01512 // s:: Must be a zero terminated string.
01513 // result:: 0 time is used to indicate never. This makes sense since
01514 //          it is the most likely moment to already be in the past.
01515 gboolean parse_moment(const char* s, time_t ctx, time_t now,
01516           time_t* result, GError** error)
01517 {
01518   int cs = 0;
01519   const char* p = s;
01520   const char* pe = s + strlen(s) + 1;
01521 
01522   struct tm ctx_tm;
01523   gmtime_r(&ctx, &ctx_tm);
01524 
01525   struct tm now_tm;
01526   gmtime_r(&now, &now_tm);
01527 
01528   // The moment closest after "now" found so far, or 0.
01529   time_t future = 0;
01530 
01531   const char* mark;
01532   struct tm seen;
01533   int seenWday;
01534 
01535   
01536 #line 1537 "moment_parser.c"
01537   {
01538   cs = fsm_start;
01539   }
01540 #line 127 "moment_parser.rl"
01541   
01542 #line 1543 "moment_parser.c"
01543   {
01544   int _klen;
01545   unsigned int _trans;
01546   const char *_acts;
01547   unsigned int _nacts;
01548   const char *_keys;
01549 
01550   if ( p == pe )
01551     goto _test_eof;
01552   if ( cs == 0 )
01553     goto _out;
01554 _resume:
01555   _keys = _fsm_trans_keys + _fsm_key_offsets[cs];
01556   _trans = _fsm_index_offsets[cs];
01557 
01558   _klen = _fsm_single_lengths[cs];
01559   if ( _klen > 0 ) {
01560     const char *_lower = _keys;
01561     const char *_mid;
01562     const char *_upper = _keys + _klen - 1;
01563     while (1) {
01564       if ( _upper < _lower )
01565         break;
01566 
01567       _mid = _lower + ((_upper-_lower) >> 1);
01568       if ( (*p) < *_mid )
01569         _upper = _mid - 1;
01570       else if ( (*p) > *_mid )
01571         _lower = _mid + 1;
01572       else {
01573         _trans += (_mid - _keys);
01574         goto _match;
01575       }
01576     }
01577     _keys += _klen;
01578     _trans += _klen;
01579   }
01580 
01581   _klen = _fsm_range_lengths[cs];
01582   if ( _klen > 0 ) {
01583     const char *_lower = _keys;
01584     const char *_mid;
01585     const char *_upper = _keys + (_klen<<1) - 2;
01586     while (1) {
01587       if ( _upper < _lower )
01588         break;
01589 
01590       _mid = _lower + (((_upper-_lower) >> 1) & ~1);
01591       if ( (*p) < _mid[0] )
01592         _upper = _mid - 2;
01593       else if ( (*p) > _mid[1] )
01594         _lower = _mid + 2;
01595       else {
01596         _trans += ((_mid - _keys)>>1);
01597         goto _match;
01598       }
01599     }
01600     _trans += _klen;
01601   }
01602 
01603 _match:
01604   cs = _fsm_trans_targs_wi[_trans];
01605 
01606   if ( _fsm_trans_actions_wi[_trans] == 0 )
01607     goto _again;
01608 
01609   _acts = _fsm_actions + _fsm_trans_actions_wi[_trans];
01610   _nacts = (unsigned int) *_acts++;
01611   while ( _nacts-- > 0 )
01612   {
01613     switch ( *_acts++ )
01614     {
01615   case 0:
01616 #line 5 "moment_parser.rl"
01617   { seenWday = 1; }
01618   break;
01619   case 1:
01620 #line 6 "moment_parser.rl"
01621   { seenWday = 2; }
01622   break;
01623   case 2:
01624 #line 7 "moment_parser.rl"
01625   { seenWday = 3; }
01626   break;
01627   case 3:
01628 #line 8 "moment_parser.rl"
01629   { seenWday = 4; }
01630   break;
01631   case 4:
01632 #line 9 "moment_parser.rl"
01633   { seenWday = 5; }
01634   break;
01635   case 5:
01636 #line 10 "moment_parser.rl"
01637   { seenWday = 6; }
01638   break;
01639   case 6:
01640 #line 11 "moment_parser.rl"
01641   { seenWday = 0; }
01642   break;
01643   case 7:
01644 #line 15 "moment_parser.rl"
01645   { seenMonth = 0; }
01646   break;
01647   case 8:
01648 #line 16 "moment_parser.rl"
01649   { seenMonth = 1; }
01650   break;
01651   case 9:
01652 #line 17 "moment_parser.rl"
01653   { seenMonth = 2; }
01654   break;
01655   case 10:
01656 #line 18 "moment_parser.rl"
01657   { seenMonth = 3; }
01658   break;
01659   case 11:
01660 #line 19 "moment_parser.rl"
01661   { seenMonth = 4; }
01662   break;
01663   case 12:
01664 #line 20 "moment_parser.rl"
01665   { seenMonth = 5; }
01666   break;
01667   case 13:
01668 #line 21 "moment_parser.rl"
01669   { seenMonth = 6; }
01670   break;
01671   case 14:
01672 #line 22 "moment_parser.rl"
01673   { seenMonth = 7; }
01674   break;
01675   case 15:
01676 #line 23 "moment_parser.rl"
01677   { seenMonth = 8; }
01678   break;
01679   case 16:
01680 #line 24 "moment_parser.rl"
01681   { seenMonth = 9; }
01682   break;
01683   case 17:
01684 #line 25 "moment_parser.rl"
01685   { seenMonth = 10; }
01686   break;
01687   case 18:
01688 #line 26 "moment_parser.rl"
01689   { seenMonth = 11; }
01690   break;
01691   case 19:
01692 #line 30 "moment_parser.rl"
01693   { mark = p; }
01694   break;
01695   case 20:
01696 #line 32 "moment_parser.rl"
01697   { seenHour = ATOI_RANGE(mark,0,23); }
01698   break;
01699   case 21:
01700 #line 33 "moment_parser.rl"
01701   { seenMin = ATOI_RANGE(mark,0,59); }
01702   break;
01703   case 22:
01704 #line 34 "moment_parser.rl"
01705   { seenSec = ATOI_RANGE(mark,0,59); }
01706   break;
01707   case 23:
01708 #line 36 "moment_parser.rl"
01709   { seenMin = seenSec = 0; }
01710   break;
01711   case 24:
01712 #line 45 "moment_parser.rl"
01713   {
01714     seenYear = ctx_tm.tm_year;
01715     seenMonth = ctx_tm.tm_mon;
01716     seenDay = ctx_tm.tm_mday;
01717   }
01718   break;
01719   case 25:
01720 #line 51 "moment_parser.rl"
01721   {
01722     SET_SEEN_DATE_PLUS_DAYS(ctx, 1);
01723   }
01724   break;
01725   case 26:
01726 #line 55 "moment_parser.rl"
01727   {
01728     SET_SEEN_DATE_PLUS_DAYS(ctx, 2);
01729   }
01730   break;
01731   case 27:
01732 #line 59 "moment_parser.rl"
01733   {
01734     // want next seenWday, but not today
01735     int plusDays = num_days_till_next_wday(ctx_tm.tm_wday, seenWday);
01736     SET_SEEN_DATE_PLUS_DAYS(ctx, plusDays);
01737   }
01738   break;
01739   case 28:
01740 #line 71 "moment_parser.rl"
01741   { seenYear = ATOI_RANGE(mark,1900,9999) - 1900; }
01742   break;
01743   case 29:
01744 #line 72 "moment_parser.rl"
01745   { seenMonth = ATOI_RANGE(mark,1,12) - 1; }
01746   break;
01747   case 30:
01748 #line 73 "moment_parser.rl"
01749   { seenDay = ATOI_RANGE(mark,1,31); }
01750   break;
01751   case 31:
01752 #line 33 "moment_parser.rl"
01753   {
01754     time_t seen_tt = SEEN_TIME_T;
01755     if (seen_tt >= now && (!future || (seen_tt < future)))
01756       future = seen_tt;
01757   }
01758   break;
01759   case 32:
01760 #line 39 "moment_parser.rl"
01761   {
01762     // Now "ctx" does not matter. Just compute next exact hour relative to "now".
01763     // Compute based on now_tm.tm_min and now_tm.tm_sec.
01764     time_t nowHourStart = now - now_tm.tm_sec - 60 * now_tm.tm_min;
01765     time_t nowHourMin = nowHourStart + seenMin * 60;
01766     if (now > nowHourMin)
01767       nowHourMin += (60 * 60);
01768     SET_SEEN_DATETIME_FROM_TIME_T(nowHourMin);
01769   }
01770   break;
01771   case 33:
01772 #line 49 "moment_parser.rl"
01773   {
01774     DEF_NOW_DAY_WITH_SEEN_TIME(wtm);
01775     time_t wtt = timegm(&wtm);
01776     if (wtt < now)
01777       wtt += 24 * 60 * 60;
01778     SET_SEEN_DATETIME_FROM_TIME_T(wtt);
01779   }
01780   break;
01781   case 34:
01782 #line 57 "moment_parser.rl"
01783   {
01784     // Want next seenWday relative to "now"; it may be the "now" day,
01785     // but only if the "now" time is no more than (seenHour, seenMin,
01786     // seenSec).
01787     DEF_NOW_DAY_WITH_SEEN_TIME(wtm);
01788     time_t wtt = timegm(&wtm);
01789     if (now_tm.tm_wday != seenWday || wtt < now) {
01790       int plusDays = num_days_till_next_wday(now_tm.tm_wday, seenWday);
01791       wtt += plusDays * 24 * 60 * 60;
01792     }
01793     SET_SEEN_DATETIME_FROM_TIME_T(wtt);
01794   }
01795   break;
01796 #line 1797 "moment_parser.c"
01797     }
01798   }
01799 
01800 _again:
01801   if ( cs == 0 )
01802     goto _out;
01803   if ( ++p != pe )
01804     goto _resume;
01805   _test_eof: {}
01806   _out: {}
01807   }
01808 #line 128 "moment_parser.rl"
01809 
01810   if (cs == fsm_error) {
01811     if (error)
01812       *error = g_error_new(this_domain, code_parse_error, "parse error in moment expression '%s'", s);
01813     return FALSE;
01814   } else if (cs == fsm_first_final) {
01815     *result = future;
01816     return TRUE;
01817   } else {
01818     if (error)
01819       *error = g_error_new(this_domain, code_incomplete_input, "incomplete moment expression '%s'", s);
01820     return FALSE;
01821   }
01822 }

ContextLogger2—ContextLogger2 Logger Daemon Internals—Generated on Mon May 2 13:49:55 2011 by Doxygen 1.6.1